[{"data":1,"prerenderedAt":173191},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch22-dai-ma-ti-jiao-yu-xin-xing-xiang-dui-dan-wei":3,"wiki-doc-nav":265},{"id":4,"title":5,"body":6,"description":257,"extension":258,"meta":259,"navigation":260,"path":261,"seo":262,"stem":263,"__hash__":264},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":8,"toc":253},"minimark",[9,13,18,22,41,47,52,57,105,110,122,127,142,147,165,170,190,195,215,218,221,224,227,231,234,237,240,243,246,249],[10,11,5],"h1",{"id":12},"_22-代码提交与新型相对单位",[14,15,17],"h2",{"id":16},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,20,21],"p",{},"法1：",[23,24,25,35,38],"ol",{},[26,27,28,29],"li",{},"登录网站注册：",[30,31,32],"a",{"href":32,"rel":33},"https:\u002F\u002Fgitee.com\u002F",[34],"nofollow",[26,36,37],{},"码云创建新的仓库",[26,39,40],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[42,43,44],"ul",{},[26,45,46],{},"在网站根目录右键-- Git Bash Here",[48,49],"img",{"style":50,"src":51},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[42,53,54],{},[26,55,56],{},"如果是第一次利用git提交，请配置好全局选项",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-Bash shiki shiki-themes github-light github-dark","git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n","Bash","",[65,66,67,90],"code",{"__ignoreMap":63},[68,69,72,76,80,84,87],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"sScJk","git",[68,77,79],{"class":78},"sZZnC"," config",[68,81,83],{"class":82},"sj4cs"," --global",[68,85,86],{"class":78}," user.name",[68,88,89],{"class":78}," \"你的名字\"\n",[68,91,93,95,97,99,102],{"class":70,"line":92},2,[68,94,75],{"class":74},[68,96,79],{"class":78},[68,98,83],{"class":82},[68,100,101],{"class":78}," user.email",[68,103,104],{"class":78}," \"你的邮箱\"\n",[42,106,107],{},[26,108,109],{},"初始化仓库",[58,111,113],{"className":60,"code":112,"language":62,"meta":63,"style":63},"git init\n",[65,114,115],{"__ignoreMap":63},[68,116,117,119],{"class":70,"line":71},[68,118,75],{"class":74},[68,120,121],{"class":78}," init\n",[42,123,124],{},[26,125,126],{},"把本地文件放到暂存区",[58,128,130],{"className":60,"code":129,"language":62,"meta":63,"style":63},"git add .\n",[65,131,132],{"__ignoreMap":63},[68,133,134,136,139],{"class":70,"line":71},[68,135,75],{"class":74},[68,137,138],{"class":78}," add",[68,140,141],{"class":78}," .\n",[42,143,144],{},[26,145,146],{},"把本地文件放到本地仓库里面",[58,148,150],{"className":60,"code":149,"language":62,"meta":63,"style":63},"git commit -m \"first commit\"\n",[65,151,152],{"__ignoreMap":63},[68,153,154,156,159,162],{"class":70,"line":71},[68,155,75],{"class":74},[68,157,158],{"class":78}," commit",[68,160,161],{"class":82}," -m",[68,163,164],{"class":78}," \"first commit\"\n",[42,166,167],{},[26,168,169],{},"链接远程仓库",[58,171,173],{"className":60,"code":172,"language":62,"meta":63,"style":63},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[65,174,175],{"__ignoreMap":63},[68,176,177,179,182,184,187],{"class":70,"line":71},[68,178,75],{"class":74},[68,180,181],{"class":78}," remote",[68,183,138],{"class":78},[68,185,186],{"class":78}," origin",[68,188,189],{"class":78}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[42,191,192],{},[26,193,194],{},"把本地仓库的文件推送到远程仓库 push",[58,196,198],{"className":60,"code":197,"language":62,"meta":63,"style":63},"git push -u origin master\n",[65,199,200],{"__ignoreMap":63},[68,201,202,204,207,210,212],{"class":70,"line":71},[68,203,75],{"class":74},[68,205,206],{"class":78}," push",[68,208,209],{"class":82}," -u",[68,211,186],{"class":78},[68,213,214],{"class":78}," master\n",[48,216],{"style":50,"src":217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,219,220],{},"上方方法暂未实现，后边学完git后在整",[19,222,223],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[48,225],{"style":50,"src":226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,228,230],{"id":229},"_222-新型相对单位","22.2 新型相对单位",[48,232],{"style":50,"src":233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[48,235],{"style":50,"src":236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,238,239],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,241,242],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[48,244],{"style":50,"src":245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,247,248],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[250,251,252],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--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":63,"searchDepth":92,"depth":92,"links":254},[255,256],{"id":16,"depth":92,"text":17},{"id":229,"depth":92,"text":230},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":5,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",[266,5368,6475,7895,10884,12235,13724,14813,23576,23588,24185,24211,24335,24576,24641,24659,24672,24719,24843,25012,25211,25391,25596,25732,25827,25864,25877,26187,26928,27636,27657,28676,30305,30456,30469,30481,30782,50594,50609,50626,50659,53531,76879,93024,93045,93158,93279,94049,94712,95073,95111,95217,95317,95360,95386,95447,97101,97202,97227,97718,98218,99298,99581,100323,100825,100837,102852,104516,106019,107717,109634,111553,113575,117045,117477,117938,118687,121630,121978,122000,122356,125663,125675,126078,126101,126248,126415,126619,126920,127477,128134,130065,131663,132312,133806,135237,136472,138166,139918,142328,142444,143379,143590,144475,145710,145886,145899,147054,149466,151834,155155,157632,159276,161053,163066,166118,168298,170825,173019],{"id":267,"title":268,"body":269,"description":63,"extension":258,"meta":5363,"navigation":260,"path":5364,"seo":5365,"stem":5366,"__hash__":5367},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":270,"toc":5335},[271,274,278,281,285,296,300,305,308,311,314,317,320,350,354,357,360,363,366,418,422,440,442,456,459,467,470,1332,1339,1355,1359,1450,1454,1460,1549,1553,1591,1595,1659,1663,1667,1673,1684,1688,1693,1697,1702,1706,1711,1715,1719,1724,1994,1999,2137,2142,2398,2401,2409,2413,2418,2521,2524,2830,2839,2940,2943,2946,2949,2952,3212,3217,3357,3360,3539,3542,3670,3673,3825,3829,3834,3837,3848,3856,3859,3966,3970,3974,3979,4029,4034,4039,4063,4068,4121,4124,4129,4306,4311,4596,4601,4998,5002,5007,5064,5069,5077,5080,5220,5223,5332],[10,272,268],{"id":273},"_1基础入门",[14,275,277],{"id":276},"_11注释","1.1注释",[19,279,280],{},"\u002F\u002F或者\u002F* *\u002F",[14,282,284],{"id":283},"_12命名","1.2命名",[23,286,287,290,293],{},[26,288,289],{},"字母数字下划线",[26,291,292],{},"开头必须是字母或_",[26,294,295],{},"不能使用关键词",[14,297,299],{"id":298},"_13数据类型","1.3数据类型",[301,302,304],"h3",{"id":303},"_131整形","1.3.1整形",[19,306,307],{},"short 短整形 2",[19,309,310],{},"int 整形 4",[19,312,313],{},"long 长整形 win4 linux32位4 linux64位8",[19,315,316],{},"long long 长长整形 8",[19,318,319],{},"利用sizeof可以求数据类型占用的内存空间大小",[58,321,325],{"className":322,"code":323,"language":324,"meta":63,"style":63},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[65,326,327,343],{"__ignoreMap":63},[68,328,329,333,337,340],{"class":70,"line":71},[68,330,332],{"class":331},"szBVR","sizeof",[68,334,336],{"class":335},"sVt8B","(",[68,338,339],{"class":331},"int",[68,341,342],{"class":335},")\n",[68,344,345,347],{"class":70,"line":92},[68,346,332],{"class":331},[68,348,349],{"class":335},"(num)\n",[301,351,353],{"id":352},"_132浮点型","1.3.2浮点型",[19,355,356],{},"float 单精度 4节 7位有效数字",[19,358,359],{},"double 双精度 8节 15-16有效数字",[19,361,362],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,364,365],{},"注意点：",[58,367,369],{"className":322,"code":368,"language":324,"meta":63,"style":63},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[65,370,371,395],{"__ignoreMap":63},[68,372,373,376,379,382,385,388,391],{"class":70,"line":71},[68,374,375],{"class":331},"float",[68,377,378],{"class":335}," f1",[68,380,381],{"class":331},"=",[68,383,384],{"class":82},"3.14",[68,386,387],{"class":331},"f",[68,389,390],{"class":335},";",[68,392,394],{"class":393},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[68,396,397,399,402,404,407,410,413,415],{"class":70,"line":92},[68,398,375],{"class":331},[68,400,401],{"class":335}," f2",[68,403,381],{"class":331},[68,405,406],{"class":82},"3",[68,408,409],{"class":331},"e",[68,411,412],{"class":82},"2",[68,414,390],{"class":335},[68,416,417],{"class":393}," \u002F\u002F科学记数法\n",[301,419,421],{"id":420},"_133字符型","1.3.3字符型",[58,423,425],{"className":322,"code":424,"language":324,"meta":63,"style":63},"char ch='a'\n",[65,426,427],{"__ignoreMap":63},[68,428,429,432,435,437],{"class":70,"line":71},[68,430,431],{"class":331},"char",[68,433,434],{"class":335}," ch",[68,436,381],{"class":331},[68,438,439],{"class":78},"'a'\n",[19,441,365],{},[23,443,444,447,450,453],{},[26,445,446],{},"在显示字符型变量时，只能单引号，双引号x",[26,448,449],{},"单引号内只能一个字符，不能字符串",[26,451,452],{},"c和c++字符型变量只占用一个字符",[26,454,455],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,457,458],{},"ASCII码大致由以下两部分组成：",[23,460,461,464],{},[26,462,463],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[26,465,466],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,468,469],{},"ASCII码表格：",[471,472,473,517],"table",{},[474,475,476],"thead",{},[477,478,479,487,492,496,501,505,509,513],"tr",{},[480,481,482,486],"th",{},[483,484,485],"strong",{},"ASCII","值",[480,488,489],{},[483,490,491],{},"控制字符",[480,493,494,486],{},[483,495,485],{},[480,497,498],{},[483,499,500],{},"字符",[480,502,503,486],{},[483,504,485],{},[480,506,507],{},[483,508,500],{},[480,510,511,486],{},[483,512,485],{},[480,514,515],{},[483,516,500],{},[518,519,520,547,572,597,622,648,673,698,724,749,775,801,827,852,878,904,930,954,979,1004,1029,1054,1079,1104,1129,1154,1179,1205,1230,1255,1280,1306],"tbody",{},[477,521,522,526,529,532,535,538,541,544],{},[523,524,525],"td",{},"0",[523,527,528],{},"NUT",[523,530,531],{},"32",[523,533,534],{},"(space)",[523,536,537],{},"64",[523,539,540],{},"@",[523,542,543],{},"96",[523,545,546],{},"、",[477,548,549,552,555,558,561,564,567,570],{},[523,550,551],{},"1",[523,553,554],{},"SOH",[523,556,557],{},"33",[523,559,560],{},"!",[523,562,563],{},"65",[523,565,566],{},"A",[523,568,569],{},"97",[523,571,30],{},[477,573,574,576,579,582,585,588,591,594],{},[523,575,412],{},[523,577,578],{},"STX",[523,580,581],{},"34",[523,583,584],{},"\"",[523,586,587],{},"66",[523,589,590],{},"B",[523,592,593],{},"98",[523,595,596],{},"b",[477,598,599,601,604,607,610,613,616,619],{},[523,600,406],{},[523,602,603],{},"ETX",[523,605,606],{},"35",[523,608,609],{},"#",[523,611,612],{},"67",[523,614,615],{},"C",[523,617,618],{},"99",[523,620,621],{},"c",[477,623,624,627,630,633,636,639,642,645],{},[523,625,626],{},"4",[523,628,629],{},"EOT",[523,631,632],{},"36",[523,634,635],{},"$",[523,637,638],{},"68",[523,640,641],{},"D",[523,643,644],{},"100",[523,646,647],{},"d",[477,649,650,653,656,659,662,665,668,671],{},[523,651,652],{},"5",[523,654,655],{},"ENQ",[523,657,658],{},"37",[523,660,661],{},"%",[523,663,664],{},"69",[523,666,667],{},"E",[523,669,670],{},"101",[523,672,409],{},[477,674,675,678,681,684,687,690,693,696],{},[523,676,677],{},"6",[523,679,680],{},"ACK",[523,682,683],{},"38",[523,685,686],{},"&",[523,688,689],{},"70",[523,691,692],{},"F",[523,694,695],{},"102",[523,697,387],{},[477,699,700,703,706,709,712,715,718,721],{},[523,701,702],{},"7",[523,704,705],{},"BEL",[523,707,708],{},"39",[523,710,711],{},",",[523,713,714],{},"71",[523,716,717],{},"G",[523,719,720],{},"103",[523,722,723],{},"g",[477,725,726,729,732,735,737,740,743,746],{},[523,727,728],{},"8",[523,730,731],{},"BS",[523,733,734],{},"40",[523,736,336],{},[523,738,739],{},"72",[523,741,742],{},"H",[523,744,745],{},"104",[523,747,748],{},"h",[477,750,751,754,757,760,763,766,769,772],{},[523,752,753],{},"9",[523,755,756],{},"HT",[523,758,759],{},"41",[523,761,762],{},")",[523,764,765],{},"73",[523,767,768],{},"I",[523,770,771],{},"105",[523,773,774],{},"i",[477,776,777,780,783,786,789,792,795,798],{},[523,778,779],{},"10",[523,781,782],{},"LF",[523,784,785],{},"42",[523,787,788],{},"*",[523,790,791],{},"74",[523,793,794],{},"J",[523,796,797],{},"106",[523,799,800],{},"j",[477,802,803,806,809,812,815,818,821,824],{},[523,804,805],{},"11",[523,807,808],{},"VT",[523,810,811],{},"43",[523,813,814],{},"+",[523,816,817],{},"75",[523,819,820],{},"K",[523,822,823],{},"107",[523,825,826],{},"k",[477,828,829,832,835,838,840,843,846,849],{},[523,830,831],{},"12",[523,833,834],{},"FF",[523,836,837],{},"44",[523,839,711],{},[523,841,842],{},"76",[523,844,845],{},"L",[523,847,848],{},"108",[523,850,851],{},"l",[477,853,854,857,860,863,866,869,872,875],{},[523,855,856],{},"13",[523,858,859],{},"CR",[523,861,862],{},"45",[523,864,865],{},"-",[523,867,868],{},"77",[523,870,871],{},"M",[523,873,874],{},"109",[523,876,877],{},"m",[477,879,880,883,886,889,892,895,898,901],{},[523,881,882],{},"14",[523,884,885],{},"SO",[523,887,888],{},"46",[523,890,891],{},".",[523,893,894],{},"78",[523,896,897],{},"N",[523,899,900],{},"110",[523,902,903],{},"n",[477,905,906,909,912,915,918,921,924,927],{},[523,907,908],{},"15",[523,910,911],{},"SI",[523,913,914],{},"47",[523,916,917],{},"\u002F",[523,919,920],{},"79",[523,922,923],{},"O",[523,925,926],{},"111",[523,928,929],{},"o",[477,931,932,935,938,941,943,946,949,952],{},[523,933,934],{},"16",[523,936,937],{},"DLE",[523,939,940],{},"48",[523,942,525],{},[523,944,945],{},"80",[523,947,948],{},"P",[523,950,951],{},"112",[523,953,19],{},[477,955,956,959,962,965,967,970,973,976],{},[523,957,958],{},"17",[523,960,961],{},"DCI",[523,963,964],{},"49",[523,966,551],{},[523,968,969],{},"81",[523,971,972],{},"Q",[523,974,975],{},"113",[523,977,978],{},"q",[477,980,981,984,987,990,992,995,998,1001],{},[523,982,983],{},"18",[523,985,986],{},"DC2",[523,988,989],{},"50",[523,991,412],{},[523,993,994],{},"82",[523,996,997],{},"R",[523,999,1000],{},"114",[523,1002,1003],{},"r",[477,1005,1006,1009,1012,1015,1017,1020,1023,1026],{},[523,1007,1008],{},"19",[523,1010,1011],{},"DC3",[523,1013,1014],{},"51",[523,1016,406],{},[523,1018,1019],{},"83",[523,1021,1022],{},"S",[523,1024,1025],{},"115",[523,1027,1028],{},"s",[477,1030,1031,1034,1037,1040,1042,1045,1048,1051],{},[523,1032,1033],{},"20",[523,1035,1036],{},"DC4",[523,1038,1039],{},"52",[523,1041,626],{},[523,1043,1044],{},"84",[523,1046,1047],{},"T",[523,1049,1050],{},"116",[523,1052,1053],{},"t",[477,1055,1056,1059,1062,1065,1067,1070,1073,1076],{},[523,1057,1058],{},"21",[523,1060,1061],{},"NAK",[523,1063,1064],{},"53",[523,1066,652],{},[523,1068,1069],{},"85",[523,1071,1072],{},"U",[523,1074,1075],{},"117",[523,1077,1078],{},"u",[477,1080,1081,1084,1087,1090,1092,1095,1098,1101],{},[523,1082,1083],{},"22",[523,1085,1086],{},"SYN",[523,1088,1089],{},"54",[523,1091,677],{},[523,1093,1094],{},"86",[523,1096,1097],{},"V",[523,1099,1100],{},"118",[523,1102,1103],{},"v",[477,1105,1106,1109,1112,1115,1117,1120,1123,1126],{},[523,1107,1108],{},"23",[523,1110,1111],{},"TB",[523,1113,1114],{},"55",[523,1116,702],{},[523,1118,1119],{},"87",[523,1121,1122],{},"W",[523,1124,1125],{},"119",[523,1127,1128],{},"w",[477,1130,1131,1134,1137,1140,1142,1145,1148,1151],{},[523,1132,1133],{},"24",[523,1135,1136],{},"CAN",[523,1138,1139],{},"56",[523,1141,728],{},[523,1143,1144],{},"88",[523,1146,1147],{},"X",[523,1149,1150],{},"120",[523,1152,1153],{},"x",[477,1155,1156,1159,1162,1165,1167,1170,1173,1176],{},[523,1157,1158],{},"25",[523,1160,1161],{},"EM",[523,1163,1164],{},"57",[523,1166,753],{},[523,1168,1169],{},"89",[523,1171,1172],{},"Y",[523,1174,1175],{},"121",[523,1177,1178],{},"y",[477,1180,1181,1184,1187,1190,1193,1196,1199,1202],{},[523,1182,1183],{},"26",[523,1185,1186],{},"SUB",[523,1188,1189],{},"58",[523,1191,1192],{},":",[523,1194,1195],{},"90",[523,1197,1198],{},"Z",[523,1200,1201],{},"122",[523,1203,1204],{},"z",[477,1206,1207,1210,1213,1216,1218,1221,1224,1227],{},[523,1208,1209],{},"27",[523,1211,1212],{},"ESC",[523,1214,1215],{},"59",[523,1217,390],{},[523,1219,1220],{},"91",[523,1222,1223],{},"[",[523,1225,1226],{},"123",[523,1228,1229],{},"{",[477,1231,1232,1235,1238,1241,1244,1247,1249,1252],{},[523,1233,1234],{},"28",[523,1236,1237],{},"FS",[523,1239,1240],{},"60",[523,1242,1243],{},"\u003C",[523,1245,1246],{},"92",[523,1248,917],{},[523,1250,1251],{},"124",[523,1253,1254],{},"|",[477,1256,1257,1260,1263,1266,1268,1271,1274,1277],{},[523,1258,1259],{},"29",[523,1261,1262],{},"GS",[523,1264,1265],{},"61",[523,1267,381],{},[523,1269,1270],{},"93",[523,1272,1273],{},"]",[523,1275,1276],{},"125",[523,1278,1279],{},"}",[477,1281,1282,1285,1288,1291,1294,1297,1300,1303],{},[523,1283,1284],{},"30",[523,1286,1287],{},"RS",[523,1289,1290],{},"62",[523,1292,1293],{},">",[523,1295,1296],{},"94",[523,1298,1299],{},"^",[523,1301,1302],{},"126",[523,1304,1305],{},"`",[477,1307,1308,1311,1314,1317,1320,1323,1326,1329],{},[523,1309,1310],{},"31",[523,1312,1313],{},"US",[523,1315,1316],{},"63",[523,1318,1319],{},"?",[523,1321,1322],{},"95",[523,1324,1325],{},"_",[523,1327,1328],{},"127",[523,1330,1331],{},"DEL",[19,1333,1334,1335,1338],{},"ASCII 码大致由以下",[483,1336,1337],{},"两部分组","成：",[42,1340,1341,1348],{},[26,1342,1343,1344,1347],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[483,1345,1346],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[26,1349,1350,1351,1354],{},"ASCII 打印字符：数字 ",[483,1352,1353],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[301,1356,1358],{"id":1357},"_134转义字符","1.3.4转义字符",[58,1360,1362],{"className":322,"code":1361,"language":324,"meta":63,"style":63},"\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",[65,1363,1364,1369,1385,1400,1406,1420,1426],{"__ignoreMap":63},[68,1365,1366],{"class":70,"line":71},[68,1367,1368],{"class":393},"\u002F\u002F换行符\n",[68,1370,1371,1374,1377,1380,1382],{"class":70,"line":92},[68,1372,1373],{"class":335},"cout ",[68,1375,1376],{"class":331},"\u003C\u003C",[68,1378,1379],{"class":78},"\"hello world\u002Fn\"",[68,1381,390],{"class":335},[68,1383,1384],{"class":393}," \u002F\u002F就等同于如下：\n",[68,1386,1388,1390,1392,1395,1397],{"class":70,"line":1387},3,[68,1389,1373],{"class":335},[68,1391,1376],{"class":331},[68,1393,1394],{"class":78},"\"hello world\"",[68,1396,1376],{"class":331},[68,1398,1399],{"class":335},"endl;\n",[68,1401,1403],{"class":70,"line":1402},4,[68,1404,1405],{"class":393},"\u002F\u002F反斜杠\n",[68,1407,1409,1411,1413,1416,1418],{"class":70,"line":1408},5,[68,1410,1373],{"class":335},[68,1412,1376],{"class":331},[68,1414,1415],{"class":78},"\"\u002F\u002F\"",[68,1417,1376],{"class":331},[68,1419,1399],{"class":335},[68,1421,1423],{"class":70,"line":1422},6,[68,1424,1425],{"class":393},"\u002F\u002F水平制表符\n",[68,1427,1429,1431,1433,1436,1439,1442,1444,1447],{"class":70,"line":1428},7,[68,1430,1373],{"class":335},[68,1432,1376],{"class":331},[68,1434,1435],{"class":78},"\"aaaa",[68,1437,1438],{"class":82},"\\t",[68,1440,1441],{"class":78},"helloworld\"",[68,1443,1376],{"class":331},[68,1445,1446],{"class":335},"endl;",[68,1448,1449],{"class":393}," \u002F\u002F输出窗口时有对齐效果\n",[301,1451,1453],{"id":1452},"_135字符串型","1.3.5字符串型",[19,1455,1456,1457,1459],{},"char 变量名",[68,1458],{},"=\"字符串值\"",[58,1461,1463],{"className":322,"code":1462,"language":324,"meta":63,"style":63},"\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",[65,1464,1465,1470,1475,1480,1485,1499,1512,1517,1523,1535],{"__ignoreMap":63},[68,1466,1467],{"class":70,"line":71},[68,1468,1469],{"class":393},"\u002F\u002Fc风格字符串\n",[68,1471,1472],{"class":70,"line":92},[68,1473,1474],{"class":393},"\u002F\u002F注意事项：\n",[68,1476,1477],{"class":70,"line":1387},[68,1478,1479],{"class":393},"\u002F\u002F1.char字符串名[]\n",[68,1481,1482],{"class":70,"line":1402},[68,1483,1484],{"class":393},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[68,1486,1487,1489,1492,1494,1496],{"class":70,"line":1408},[68,1488,431],{"class":331},[68,1490,1491],{"class":335}," str[]",[68,1493,381],{"class":331},[68,1495,1394],{"class":78},[68,1497,1498],{"class":335},";\n",[68,1500,1501,1503,1505,1508,1510],{"class":70,"line":1422},[68,1502,1373],{"class":335},[68,1504,1376],{"class":331},[68,1506,1507],{"class":335},"str",[68,1509,1376],{"class":331},[68,1511,1399],{"class":335},[68,1513,1514],{"class":70,"line":1428},[68,1515,1516],{"class":393},"\u002F\u002Fc++风格字符串\n",[68,1518,1520],{"class":70,"line":1519},8,[68,1521,1522],{"class":393},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[68,1524,1526,1529,1531,1533],{"class":70,"line":1525},9,[68,1527,1528],{"class":335},"string str2",[68,1530,381],{"class":331},[68,1532,1394],{"class":78},[68,1534,1498],{"class":335},[68,1536,1538,1540,1542,1545,1547],{"class":70,"line":1537},10,[68,1539,1373],{"class":335},[68,1541,1376],{"class":331},[68,1543,1544],{"class":335},"str2",[68,1546,1376],{"class":331},[68,1548,1399],{"class":335},[301,1550,1552],{"id":1551},"_136布尔类型bool","1.3.6布尔类型bool",[58,1554,1556],{"className":322,"code":1555,"language":324,"meta":63,"style":63},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[65,1557,1558,1573],{"__ignoreMap":63},[68,1559,1560,1563,1566,1568,1571],{"class":70,"line":71},[68,1561,1562],{"class":331},"bool",[68,1564,1565],{"class":335}," flag",[68,1567,381],{"class":331},[68,1569,1570],{"class":82},"true",[68,1572,1498],{"class":335},[68,1574,1575,1578,1581,1584,1586,1588],{"class":70,"line":92},[68,1576,1577],{"class":335},"cout",[68,1579,1580],{"class":331},"\u003C\u003Csizeof",[68,1582,1583],{"class":335},"(flag)",[68,1585,1376],{"class":331},[68,1587,1446],{"class":335},[68,1589,1590],{"class":393}," \u002F\u002F查看布尔占内存空间\n",[14,1592,1594],{"id":1593},"_14键盘输入cin","1.4键盘输入cin",[58,1596,1598],{"className":322,"code":1597,"language":324,"meta":63,"style":63},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[65,1599,1600,1613,1630,1641],{"__ignoreMap":63},[68,1601,1602,1604,1607,1609,1611],{"class":70,"line":71},[68,1603,339],{"class":331},[68,1605,1606],{"class":335}," a",[68,1608,381],{"class":331},[68,1610,525],{"class":82},[68,1612,1498],{"class":335},[68,1614,1615,1617,1619,1622,1624,1626,1628],{"class":70,"line":92},[68,1616,1577],{"class":335},[68,1618,1376],{"class":331},[68,1620,1621],{"class":78},"\"请给整型变量a赋值\"",[68,1623,1376],{"class":331},[68,1625,30],{"class":335},[68,1627,1376],{"class":331},[68,1629,1399],{"class":335},[68,1631,1632,1635,1638],{"class":70,"line":1387},[68,1633,1634],{"class":335},"cin ",[68,1636,1637],{"class":331},">>",[68,1639,1640],{"class":335}," a;\n",[68,1642,1643,1645,1647,1650,1653,1655,1657],{"class":70,"line":1402},[68,1644,1373],{"class":335},[68,1646,1376],{"class":331},[68,1648,1649],{"class":78}," \"整型变量a=\"",[68,1651,1652],{"class":331}," \u003C\u003C",[68,1654,30],{"class":335},[68,1656,1376],{"class":331},[68,1658,1399],{"class":335},[14,1660,1662],{"id":1661},"_15运算符","1.5运算符",[301,1664,1666],{"id":1665},"_151算术运算符","1.5.1算术运算符",[19,1668,1669,1672],{},[48,1670],{"alt":63,"src":1671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[23,1674,1675,1678,1681],{},[26,1676,1677],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[26,1679,1680],{},"两个小数不可以做取模运算",[26,1682,1683],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[301,1685,1687],{"id":1686},"_152赋值运算符","1.5.2赋值运算符",[19,1689,1690],{},[48,1691],{"alt":63,"src":1692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[301,1694,1696],{"id":1695},"_153比较运算符","1.5.3比较运算符",[19,1698,1699],{},[48,1700],{"alt":63,"src":1701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[301,1703,1705],{"id":1704},"_154逻辑运算符","1.5.4逻辑运算符",[19,1707,1708],{},[48,1709],{"alt":63,"src":1710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1712,1714],{"id":1713},"_16程序流程结构","1.6程序流程结构",[301,1716,1718],{"id":1717},"_161选择结构","1.6.1选择结构",[23,1720,1721],{},[26,1722,1723],{},"if语句\n单行、多行、多条件if语句",[58,1725,1727],{"className":322,"code":1726,"language":324,"meta":63,"style":63},"\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",[65,1728,1729,1734,1749,1754,1768,1773,1778,1787,1800,1804,1817,1822,1828,1833,1847,1852,1858,1879,1884,1898,1903,1932,1937,1954,1959,1964,1969,1983,1988],{"__ignoreMap":63},[68,1730,1731],{"class":70,"line":71},[68,1732,1733],{"class":393},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[68,1735,1736,1739,1742,1744,1747],{"class":70,"line":92},[68,1737,1738],{"class":331},"if",[68,1740,1741],{"class":335},"(score",[68,1743,1293],{"class":331},[68,1745,1746],{"class":82},"600",[68,1748,342],{"class":335},[68,1750,1751],{"class":70,"line":1387},[68,1752,1753],{"class":335},"{\n",[68,1755,1756,1759,1761,1764,1766],{"class":70,"line":1402},[68,1757,1758],{"class":335},"    cout",[68,1760,1376],{"class":331},[68,1762,1763],{"class":78},"'这是单行if语句'",[68,1765,1376],{"class":331},[68,1767,1399],{"class":335},[68,1769,1770],{"class":70,"line":1408},[68,1771,1772],{"class":335},"}\n",[68,1774,1775],{"class":70,"line":1422},[68,1776,1777],{"class":393},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[68,1779,1780,1782,1784],{"class":70,"line":1428},[68,1781,1634],{"class":335},[68,1783,1637],{"class":331},[68,1785,1786],{"class":335}," score\n",[68,1788,1789,1791,1793,1796,1798],{"class":70,"line":1519},[68,1790,1738],{"class":331},[68,1792,1741],{"class":335},[68,1794,1795],{"class":331},"\u003C=",[68,1797,1746],{"class":82},[68,1799,342],{"class":335},[68,1801,1802],{"class":70,"line":1525},[68,1803,1753],{"class":335},[68,1805,1806,1808,1810,1813,1815],{"class":70,"line":1537},[68,1807,1758],{"class":335},[68,1809,1637],{"class":331},[68,1811,1812],{"class":78},"\"小于等于600\"",[68,1814,1376],{"class":331},[68,1816,1399],{"class":335},[68,1818,1820],{"class":70,"line":1819},11,[68,1821,1772],{"class":335},[68,1823,1825],{"class":70,"line":1824},12,[68,1826,1827],{"class":331},"else\n",[68,1829,1831],{"class":70,"line":1830},13,[68,1832,1753],{"class":335},[68,1834,1836,1838,1840,1843,1845],{"class":70,"line":1835},14,[68,1837,1758],{"class":335},[68,1839,1637],{"class":331},[68,1841,1842],{"class":78},"\"大于600\"",[68,1844,1637],{"class":331},[68,1846,1399],{"class":335},[68,1848,1850],{"class":70,"line":1849},15,[68,1851,1772],{"class":335},[68,1853,1855],{"class":70,"line":1854},16,[68,1856,1857],{"class":393},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[68,1859,1861,1863,1866,1868,1870,1873,1875,1877],{"class":70,"line":1860},17,[68,1862,1738],{"class":331},[68,1864,1865],{"class":335}," (",[68,1867,525],{"class":82},[68,1869,1243],{"class":331},[68,1871,1872],{"class":335},"num",[68,1874,1243],{"class":331},[68,1876,644],{"class":82},[68,1878,342],{"class":335},[68,1880,1882],{"class":70,"line":1881},18,[68,1883,1753],{"class":335},[68,1885,1887,1889,1891,1894,1896],{"class":70,"line":1886},19,[68,1888,1758],{"class":335},[68,1890,1376],{"class":331},[68,1892,1893],{"class":78},"\"小于100\"",[68,1895,1376],{"class":331},[68,1897,1399],{"class":335},[68,1899,1901],{"class":70,"line":1900},20,[68,1902,1772],{"class":335},[68,1904,1906,1909,1912,1915,1918,1920,1923,1925,1927,1930],{"class":70,"line":1905},21,[68,1907,1908],{"class":331},"else",[68,1910,1911],{"class":331}," if",[68,1913,1914],{"class":335}," (nmu",[68,1916,1917],{"class":331},">=",[68,1919,644],{"class":82},[68,1921,1922],{"class":331},"&&",[68,1924,1872],{"class":335},[68,1926,1243],{"class":331},[68,1928,1929],{"class":82},"200",[68,1931,342],{"class":335},[68,1933,1935],{"class":70,"line":1934},22,[68,1936,1753],{"class":335},[68,1938,1940,1942,1944,1947,1949,1951],{"class":70,"line":1939},23,[68,1941,1758],{"class":335},[68,1943,1376],{"class":331},[68,1945,1946],{"class":78},"\"不小于100且小于200\"",[68,1948,1376],{"class":331},[68,1950,1446],{"class":335},[68,1952,1953],{"class":393}," \u002F\u002F可以无限else if,python中是elif：\n",[68,1955,1957],{"class":70,"line":1956},24,[68,1958,1772],{"class":335},[68,1960,1962],{"class":70,"line":1961},25,[68,1963,1827],{"class":331},[68,1965,1967],{"class":70,"line":1966},26,[68,1968,1753],{"class":335},[68,1970,1972,1974,1976,1979,1981],{"class":70,"line":1971},27,[68,1973,1758],{"class":335},[68,1975,1376],{"class":331},[68,1977,1978],{"class":78},"\"不小于200\"",[68,1980,1376],{"class":331},[68,1982,1399],{"class":335},[68,1984,1986],{"class":70,"line":1985},28,[68,1987,1772],{"class":335},[68,1989,1991],{"class":70,"line":1990},29,[68,1992,1993],{"class":393},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[23,1995,1996],{"start":92},[26,1997,1998],{},"三目运算符",[58,2000,2002],{"className":322,"code":2001,"language":324,"meta":63,"style":63},"\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",[65,2003,2004,2009,2014,2040,2062,2079,2084,2107,2122],{"__ignoreMap":63},[68,2005,2006],{"class":70,"line":71},[68,2007,2008],{"class":393},"\u002F\u002F创建三个变量a,b,c\n",[68,2010,2011],{"class":70,"line":92},[68,2012,2013],{"class":393},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[68,2015,2016,2018,2020,2022,2024,2027,2029,2031,2034,2036,2038],{"class":70,"line":1387},[68,2017,339],{"class":331},[68,2019,1606],{"class":335},[68,2021,381],{"class":331},[68,2023,1033],{"class":82},[68,2025,2026],{"class":335},",b",[68,2028,381],{"class":331},[68,2030,779],{"class":82},[68,2032,2033],{"class":335},",c",[68,2035,381],{"class":331},[68,2037,525],{"class":82},[68,2039,1498],{"class":335},[68,2041,2042,2044,2046,2049,2051,2053,2055,2057,2059],{"class":70,"line":1402},[68,2043,621],{"class":335},[68,2045,381],{"class":331},[68,2047,2048],{"class":335},"(a",[68,2050,1293],{"class":331},[68,2052,596],{"class":335},[68,2054,1319],{"class":331},[68,2056,30],{"class":335},[68,2058,1192],{"class":331},[68,2060,2061],{"class":335},"b)\n",[68,2063,2064,2066,2068,2071,2073,2075,2077],{"class":70,"line":1408},[68,2065,1577],{"class":335},[68,2067,1376],{"class":331},[68,2069,2070],{"class":78},"\"c=\"",[68,2072,1376],{"class":331},[68,2074,621],{"class":335},[68,2076,1376],{"class":331},[68,2078,1399],{"class":335},[68,2080,2081],{"class":70,"line":1422},[68,2082,2083],{"class":393},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[68,2085,2086,2088,2090,2092,2094,2096,2098,2101,2103,2105],{"class":70,"line":1428},[68,2087,2048],{"class":335},[68,2089,1293],{"class":331},[68,2091,596],{"class":335},[68,2093,1319],{"class":331},[68,2095,30],{"class":335},[68,2097,1192],{"class":331},[68,2099,2100],{"class":335},"b)",[68,2102,381],{"class":331},[68,2104,644],{"class":82},[68,2106,1498],{"class":335},[68,2108,2109,2111,2113,2115,2117,2119],{"class":70,"line":1519},[68,2110,1577],{"class":335},[68,2112,1376],{"class":331},[68,2114,30],{"class":335},[68,2116,1376],{"class":331},[68,2118,1446],{"class":335},[68,2120,2121],{"class":393}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[68,2123,2124,2126,2128,2130,2132,2134],{"class":70,"line":1525},[68,2125,1577],{"class":335},[68,2127,1376],{"class":331},[68,2129,596],{"class":335},[68,2131,1376],{"class":331},[68,2133,1446],{"class":335},[68,2135,2136],{"class":393}," \u002F\u002F10   a>b,b还是原值\n",[23,2138,2139],{"start":1387},[26,2140,2141],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[58,2143,2145],{"className":322,"code":2144,"language":324,"meta":63,"style":63},"\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",[65,2146,2147,2152,2160,2173,2183,2187,2201,2214,2224,2232,2237,2262,2283,2305,2326,2348,2369,2389,2394],{"__ignoreMap":63},[68,2148,2149],{"class":70,"line":71},[68,2150,2151],{"class":393},"\u002F\u002F案例-电影打分\n",[68,2153,2154,2157],{"class":70,"line":92},[68,2155,2156],{"class":331},"#include",[68,2158,2159],{"class":78},"\u003Ciostream>\n",[68,2161,2162,2165,2168,2171],{"class":70,"line":1387},[68,2163,2164],{"class":331},"using",[68,2166,2167],{"class":331}," namespace",[68,2169,2170],{"class":74}," std",[68,2172,1498],{"class":335},[68,2174,2175,2177,2180],{"class":70,"line":1402},[68,2176,339],{"class":331},[68,2178,2179],{"class":74}," main",[68,2181,2182],{"class":335},"()\n",[68,2184,2185],{"class":70,"line":1408},[68,2186,1753],{"class":335},[68,2188,2189,2192,2195,2197,2199],{"class":70,"line":1422},[68,2190,2191],{"class":331},"    int",[68,2193,2194],{"class":335}," score",[68,2196,381],{"class":331},[68,2198,525],{"class":82},[68,2200,1498],{"class":335},[68,2202,2203,2205,2207,2210,2212],{"class":70,"line":1428},[68,2204,1758],{"class":335},[68,2206,1376],{"class":331},[68,2208,2209],{"class":78},"\"电影打分：\"",[68,2211,1376],{"class":331},[68,2213,1399],{"class":335},[68,2215,2216,2219,2221],{"class":70,"line":1519},[68,2217,2218],{"class":335},"    cin",[68,2220,1637],{"class":331},[68,2222,2223],{"class":335},"score;\n",[68,2225,2226,2229],{"class":70,"line":1525},[68,2227,2228],{"class":331},"    switch",[68,2230,2231],{"class":335},"(score)\n",[68,2233,2234],{"class":70,"line":1537},[68,2235,2236],{"class":335},"    {\n",[68,2238,2239,2242,2245,2248,2250,2253,2255,2257,2260],{"class":70,"line":1819},[68,2240,2241],{"class":331},"        case",[68,2243,2244],{"class":82}," 10",[68,2246,2247],{"class":335},":cout",[68,2249,1376],{"class":331},[68,2251,2252],{"class":78},"\"经典\"",[68,2254,1376],{"class":331},[68,2256,1446],{"class":335},[68,2258,2259],{"class":331},"break",[68,2261,1498],{"class":335},[68,2263,2264,2266,2269,2271,2273,2275,2277,2279,2281],{"class":70,"line":1824},[68,2265,2241],{"class":331},[68,2267,2268],{"class":82}," 9",[68,2270,2247],{"class":335},[68,2272,1376],{"class":331},[68,2274,2252],{"class":78},[68,2276,1376],{"class":331},[68,2278,1446],{"class":335},[68,2280,2259],{"class":331},[68,2282,1498],{"class":335},[68,2284,2285,2287,2290,2292,2294,2297,2299,2301,2303],{"class":70,"line":1830},[68,2286,2241],{"class":331},[68,2288,2289],{"class":82}," 8",[68,2291,2247],{"class":335},[68,2293,1376],{"class":331},[68,2295,2296],{"class":78},"\"非常好\"",[68,2298,1376],{"class":331},[68,2300,1446],{"class":335},[68,2302,2259],{"class":331},[68,2304,1498],{"class":335},[68,2306,2307,2309,2312,2314,2316,2318,2320,2322,2324],{"class":70,"line":1835},[68,2308,2241],{"class":331},[68,2310,2311],{"class":82}," 7",[68,2313,2247],{"class":335},[68,2315,1376],{"class":331},[68,2317,2296],{"class":78},[68,2319,1376],{"class":331},[68,2321,1446],{"class":335},[68,2323,2259],{"class":331},[68,2325,1498],{"class":335},[68,2327,2328,2330,2333,2335,2337,2340,2342,2344,2346],{"class":70,"line":1849},[68,2329,2241],{"class":331},[68,2331,2332],{"class":82}," 6",[68,2334,2247],{"class":335},[68,2336,1376],{"class":331},[68,2338,2339],{"class":78},"\"一般\"",[68,2341,1376],{"class":331},[68,2343,1446],{"class":335},[68,2345,2259],{"class":331},[68,2347,1498],{"class":335},[68,2349,2350,2352,2355,2357,2359,2361,2363,2365,2367],{"class":70,"line":1854},[68,2351,2241],{"class":331},[68,2353,2354],{"class":82}," 5",[68,2356,2247],{"class":335},[68,2358,1376],{"class":331},[68,2360,2339],{"class":78},[68,2362,1376],{"class":331},[68,2364,1446],{"class":335},[68,2366,2259],{"class":331},[68,2368,1498],{"class":335},[68,2370,2371,2374,2376,2378,2381,2383,2385,2387],{"class":70,"line":1860},[68,2372,2373],{"class":331},"        default",[68,2375,2247],{"class":335},[68,2377,1376],{"class":331},[68,2379,2380],{"class":78},"\"烂片\"",[68,2382,1376],{"class":331},[68,2384,1446],{"class":335},[68,2386,2259],{"class":331},[68,2388,1498],{"class":335},[68,2390,2391],{"class":70,"line":1881},[68,2392,2393],{"class":335},"    }\n",[68,2395,2396],{"class":70,"line":1886},[68,2397,1772],{"class":335},[19,2399,2400],{},"if和switch区别：",[42,2402,2403,2406],{},[26,2404,2405],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[26,2407,2408],{},"switch优点：结构清晰，执行效率高",[301,2410,2412],{"id":2411},"_162循环结构","1.6.2循环结构",[23,2414,2415],{},[26,2416,2417],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[58,2419,2421],{"className":322,"code":2420,"language":324,"meta":63,"style":63},"\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",[65,2422,2423,2428,2436,2440,2453,2467,2471,2491,2501,2505,2517],{"__ignoreMap":63},[68,2424,2425],{"class":70,"line":71},[68,2426,2427],{"class":393},"\u002F\u002F打印0-9数字\n",[68,2429,2430,2432,2434],{"class":70,"line":92},[68,2431,339],{"class":331},[68,2433,2179],{"class":74},[68,2435,2182],{"class":335},[68,2437,2438],{"class":70,"line":1387},[68,2439,1753],{"class":335},[68,2441,2442,2444,2447,2449,2451],{"class":70,"line":1402},[68,2443,2191],{"class":331},[68,2445,2446],{"class":335}," num",[68,2448,381],{"class":331},[68,2450,525],{"class":82},[68,2452,1498],{"class":335},[68,2454,2455,2458,2461,2463,2465],{"class":70,"line":1408},[68,2456,2457],{"class":331},"    while",[68,2459,2460],{"class":335},"(num",[68,2462,1243],{"class":331},[68,2464,779],{"class":82},[68,2466,342],{"class":335},[68,2468,2469],{"class":70,"line":1422},[68,2470,2236],{"class":335},[68,2472,2473,2476,2479,2481,2483,2485,2488],{"class":70,"line":1428},[68,2474,2475],{"class":74},"       std",[68,2477,2478],{"class":335},"::cout",[68,2480,1376],{"class":331},[68,2482,1872],{"class":335},[68,2484,1376],{"class":331},[68,2486,2487],{"class":74},"std",[68,2489,2490],{"class":335},"::endl;\n",[68,2492,2493,2496,2499],{"class":70,"line":1519},[68,2494,2495],{"class":335},"        num",[68,2497,2498],{"class":331},"++",[68,2500,1498],{"class":335},[68,2502,2503],{"class":70,"line":1525},[68,2504,2393],{"class":335},[68,2506,2507,2510,2512,2515],{"class":70,"line":1537},[68,2508,2509],{"class":74},"    system",[68,2511,336],{"class":335},[68,2513,2514],{"class":78},"\"pause\"",[68,2516,342],{"class":335},[68,2518,2519],{"class":70,"line":1819},[68,2520,1772],{"class":335},[19,2522,2523],{},"注意：写好循环条件，避免死循环情况",[58,2525,2527],{"className":322,"code":2526,"language":324,"meta":63,"style":63},"\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",[65,2528,2529,2534,2541,2548,2558,2566,2570,2575,2602,2607,2612,2620,2647,2652,2657,2670,2680,2684,2694,2699,2712,2717,2731,2736,2751,2755,2768,2772,2777,2781,2795,2803,2808,2814,2820,2825],{"__ignoreMap":63},[68,2530,2531],{"class":70,"line":71},[68,2532,2533],{"class":393},"\u002F\u002F循环结构-猜数字\n",[68,2535,2536,2538],{"class":70,"line":92},[68,2537,2156],{"class":331},[68,2539,2540],{"class":78}," \u003Ciostream>\n",[68,2542,2543,2545],{"class":70,"line":1387},[68,2544,2156],{"class":331},[68,2546,2547],{"class":78}," \u003Cctime>\n",[68,2549,2550,2552,2554,2556],{"class":70,"line":1402},[68,2551,2164],{"class":331},[68,2553,2167],{"class":331},[68,2555,2170],{"class":74},[68,2557,1498],{"class":335},[68,2559,2560,2562,2564],{"class":70,"line":1408},[68,2561,339],{"class":331},[68,2563,2179],{"class":74},[68,2565,2182],{"class":335},[68,2567,2568],{"class":70,"line":1422},[68,2569,1753],{"class":335},[68,2571,2572],{"class":70,"line":1428},[68,2573,2574],{"class":393},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[68,2576,2577,2580,2583,2586,2589,2591,2594,2596,2599],{"class":70,"line":1519},[68,2578,2579],{"class":74},"    srand",[68,2581,2582],{"class":335},"((",[68,2584,2585],{"class":331},"unsigned",[68,2587,2588],{"class":331}," int",[68,2590,762],{"class":335},[68,2592,2593],{"class":74},"time",[68,2595,336],{"class":335},[68,2597,2598],{"class":82},"NULL",[68,2600,2601],{"class":335},"));\n",[68,2603,2604],{"class":70,"line":1525},[68,2605,2606],{"emptyLinePlaceholder":260},"\n",[68,2608,2609],{"class":70,"line":1537},[68,2610,2611],{"class":393},"    \u002F\u002F1.系统生成随机数\n",[68,2613,2614,2617],{"class":70,"line":1819},[68,2615,2616],{"class":393},"    \u002F\u002Frand()%100",[68,2618,2619],{"class":393}," \u002F\u002F生成0-99的随机数\n",[68,2621,2622,2624,2626,2628,2631,2634,2636,2638,2640,2642,2644],{"class":70,"line":1824},[68,2623,2191],{"class":331},[68,2625,2446],{"class":335},[68,2627,381],{"class":331},[68,2629,2630],{"class":74},"rand",[68,2632,2633],{"class":335},"()",[68,2635,661],{"class":331},[68,2637,644],{"class":82},[68,2639,814],{"class":331},[68,2641,551],{"class":82},[68,2643,390],{"class":335},[68,2645,2646],{"class":393}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[68,2648,2649],{"class":70,"line":1830},[68,2650,2651],{"class":393},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[68,2653,2654],{"class":70,"line":1835},[68,2655,2656],{"class":393},"    \u002F\u002F2.玩家猜测\n",[68,2658,2659,2661,2664,2666,2668],{"class":70,"line":1849},[68,2660,2191],{"class":331},[68,2662,2663],{"class":335}," val",[68,2665,381],{"class":331},[68,2667,525],{"class":82},[68,2669,1498],{"class":335},[68,2671,2672,2674,2676,2678],{"class":70,"line":1854},[68,2673,2457],{"class":331},[68,2675,1865],{"class":335},[68,2677,551],{"class":82},[68,2679,342],{"class":335},[68,2681,2682],{"class":70,"line":1860},[68,2683,2236],{"class":335},[68,2685,2686,2689,2691],{"class":70,"line":1881},[68,2687,2688],{"class":335},"        cin",[68,2690,1637],{"class":331},[68,2692,2693],{"class":335},"val;\n",[68,2695,2696],{"class":70,"line":1886},[68,2697,2698],{"class":393},"        \u002F\u002F3.判断玩家猜测\n",[68,2700,2701,2704,2707,2709],{"class":70,"line":1900},[68,2702,2703],{"class":331},"        if",[68,2705,2706],{"class":335},"(val",[68,2708,1243],{"class":331},[68,2710,2711],{"class":335},"num) \n",[68,2713,2714],{"class":70,"line":1905},[68,2715,2716],{"class":335},"        {\n",[68,2718,2719,2722,2724,2727,2729],{"class":70,"line":1934},[68,2720,2721],{"class":335},"            cout",[68,2723,1376],{"class":331},[68,2725,2726],{"class":78},"\"猜小了！\"",[68,2728,1376],{"class":331},[68,2730,1399],{"class":335},[68,2732,2733],{"class":70,"line":1939},[68,2734,2735],{"class":335},"        }\n",[68,2737,2738,2741,2743,2746,2748],{"class":70,"line":1956},[68,2739,2740],{"class":331},"        else",[68,2742,1911],{"class":331},[68,2744,2745],{"class":335}," (val",[68,2747,1293],{"class":331},[68,2749,2750],{"class":335},"num)\n",[68,2752,2753],{"class":70,"line":1961},[68,2754,2716],{"class":335},[68,2756,2757,2759,2761,2764,2766],{"class":70,"line":1966},[68,2758,2721],{"class":335},[68,2760,1376],{"class":331},[68,2762,2763],{"class":78},"\"猜大了！\"",[68,2765,1376],{"class":331},[68,2767,1399],{"class":335},[68,2769,2770],{"class":70,"line":1971},[68,2771,2735],{"class":335},[68,2773,2774],{"class":70,"line":1985},[68,2775,2776],{"class":331},"        else\n",[68,2778,2779],{"class":70,"line":1990},[68,2780,2716],{"class":335},[68,2782,2784,2786,2788,2791,2793],{"class":70,"line":2783},30,[68,2785,2721],{"class":335},[68,2787,1376],{"class":331},[68,2789,2790],{"class":78},"\"猜对了！\"",[68,2792,1376],{"class":331},[68,2794,1399],{"class":335},[68,2796,2798,2801],{"class":70,"line":2797},31,[68,2799,2800],{"class":331},"            break",[68,2802,1498],{"class":335},[68,2804,2806],{"class":70,"line":2805},32,[68,2807,2735],{"class":335},[68,2809,2811],{"class":70,"line":2810},33,[68,2812,2813],{"class":393},"        \u002F\u002F猜对 退出游戏\n",[68,2815,2817],{"class":70,"line":2816},34,[68,2818,2819],{"class":393},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[68,2821,2823],{"class":70,"line":2822},35,[68,2824,2393],{"class":335},[68,2826,2828],{"class":70,"line":2827},36,[68,2829,1772],{"class":335},[23,2831,2832],{"start":92},[26,2833,2834,2835,2838],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[483,2836,2837],{},"do...while会先执行一次循环语句","，在判断循环语句",[58,2840,2842],{"className":322,"code":2841,"language":324,"meta":63,"style":63},"\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",[65,2843,2844,2849,2857,2861,2873,2881,2885,2902,2909,2913,2926,2936],{"__ignoreMap":63},[68,2845,2846],{"class":70,"line":71},[68,2847,2848],{"class":393},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[68,2850,2851,2853,2855],{"class":70,"line":92},[68,2852,339],{"class":331},[68,2854,2179],{"class":74},[68,2856,2182],{"class":335},[68,2858,2859],{"class":70,"line":1387},[68,2860,1753],{"class":335},[68,2862,2863,2865,2867,2869,2871],{"class":70,"line":1402},[68,2864,2191],{"class":331},[68,2866,2446],{"class":335},[68,2868,381],{"class":331},[68,2870,525],{"class":82},[68,2872,1498],{"class":335},[68,2874,2875,2878],{"class":70,"line":1408},[68,2876,2877],{"class":331},"    do",[68,2879,2880],{"class":335}," \n",[68,2882,2883],{"class":70,"line":1422},[68,2884,2236],{"class":335},[68,2886,2887,2890,2892,2894,2896,2898,2900],{"class":70,"line":1428},[68,2888,2889],{"class":74},"        std",[68,2891,2478],{"class":335},[68,2893,1376],{"class":331},[68,2895,1872],{"class":335},[68,2897,1376],{"class":331},[68,2899,2487],{"class":74},[68,2901,2490],{"class":335},[68,2903,2904,2906],{"class":70,"line":1519},[68,2905,2495],{"class":335},[68,2907,2908],{"class":331},"++\n",[68,2910,2911],{"class":70,"line":1525},[68,2912,2393],{"class":335},[68,2914,2915,2917,2919,2921,2923],{"class":70,"line":1537},[68,2916,2457],{"class":331},[68,2918,2460],{"class":335},[68,2920,1243],{"class":331},[68,2922,779],{"class":82},[68,2924,2925],{"class":335},");\n",[68,2927,2928,2930,2932,2934],{"class":70,"line":1819},[68,2929,2509],{"class":74},[68,2931,336],{"class":335},[68,2933,2514],{"class":78},[68,2935,2925],{"class":335},[68,2937,2938],{"class":70,"line":1824},[68,2939,1772],{"class":335},[19,2941,2942],{},"案例-水仙花数",[19,2944,2945],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2947,2948],{},"例如：1^3+5^3+3^3=153",[19,2950,2951],{},"请用do...while语句，求出所有3位数的水仙花数",[58,2953,2955],{"className":322,"code":2954,"language":324,"meta":63,"style":63},"#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",[65,2956,2957,2963,2973,2981,2985,2990,3002,3008,3012,3017,3033,3049,3065,3080,3099,3114,3162,3166,3178,3182,3190,3194,3208],{"__ignoreMap":63},[68,2958,2959,2961],{"class":70,"line":71},[68,2960,2156],{"class":331},[68,2962,2540],{"class":78},[68,2964,2965,2967,2969,2971],{"class":70,"line":92},[68,2966,2164],{"class":331},[68,2968,2167],{"class":331},[68,2970,2170],{"class":74},[68,2972,1498],{"class":335},[68,2974,2975,2977,2979],{"class":70,"line":1387},[68,2976,339],{"class":331},[68,2978,2179],{"class":74},[68,2980,2182],{"class":335},[68,2982,2983],{"class":70,"line":1402},[68,2984,1753],{"class":335},[68,2986,2987],{"class":70,"line":1408},[68,2988,2989],{"class":393},"    \u002F\u002F1.先打印所有三位数字\n",[68,2991,2992,2994,2996,2998,3000],{"class":70,"line":1422},[68,2993,2191],{"class":331},[68,2995,2446],{"class":335},[68,2997,381],{"class":331},[68,2999,644],{"class":82},[68,3001,1498],{"class":335},[68,3003,3004,3006],{"class":70,"line":1428},[68,3005,2877],{"class":331},[68,3007,2880],{"class":335},[68,3009,3010],{"class":70,"line":1519},[68,3011,2236],{"class":335},[68,3013,3014],{"class":70,"line":1525},[68,3015,3016],{"class":393},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[68,3018,3019,3022,3024,3026,3028,3030],{"class":70,"line":1537},[68,3020,3021],{"class":331},"        int",[68,3023,1606],{"class":335},[68,3025,381],{"class":331},[68,3027,525],{"class":82},[68,3029,390],{"class":335},[68,3031,3032],{"class":393}," \u002F\u002F个位\n",[68,3034,3035,3037,3040,3042,3044,3046],{"class":70,"line":1819},[68,3036,3021],{"class":331},[68,3038,3039],{"class":335}," b",[68,3041,381],{"class":331},[68,3043,525],{"class":82},[68,3045,390],{"class":335},[68,3047,3048],{"class":393}," \u002F\u002F十位\n",[68,3050,3051,3053,3056,3058,3060,3062],{"class":70,"line":1824},[68,3052,3021],{"class":331},[68,3054,3055],{"class":335}," c",[68,3057,381],{"class":331},[68,3059,525],{"class":82},[68,3061,390],{"class":335},[68,3063,3064],{"class":393}," \u002F\u002F百位\n",[68,3066,3067,3070,3072,3074,3076,3078],{"class":70,"line":1830},[68,3068,3069],{"class":335},"        a",[68,3071,381],{"class":331},[68,3073,1872],{"class":335},[68,3075,661],{"class":331},[68,3077,779],{"class":82},[68,3079,1498],{"class":335},[68,3081,3082,3085,3087,3089,3091,3093,3095,3097],{"class":70,"line":1835},[68,3083,3084],{"class":335},"        b",[68,3086,381],{"class":331},[68,3088,1872],{"class":335},[68,3090,917],{"class":331},[68,3092,779],{"class":82},[68,3094,661],{"class":331},[68,3096,779],{"class":82},[68,3098,1498],{"class":335},[68,3100,3101,3104,3106,3108,3110,3112],{"class":70,"line":1849},[68,3102,3103],{"class":335},"        c",[68,3105,381],{"class":331},[68,3107,1872],{"class":335},[68,3109,917],{"class":331},[68,3111,644],{"class":82},[68,3113,1498],{"class":335},[68,3115,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3153,3156,3159],{"class":70,"line":1854},[68,3117,2703],{"class":331},[68,3119,2048],{"class":335},[68,3121,788],{"class":331},[68,3123,30],{"class":335},[68,3125,788],{"class":331},[68,3127,30],{"class":335},[68,3129,814],{"class":331},[68,3131,596],{"class":335},[68,3133,788],{"class":331},[68,3135,596],{"class":335},[68,3137,788],{"class":331},[68,3139,596],{"class":335},[68,3141,814],{"class":331},[68,3143,621],{"class":335},[68,3145,788],{"class":331},[68,3147,621],{"class":335},[68,3149,788],{"class":331},[68,3151,3152],{"class":335},"c ",[68,3154,3155],{"class":331},"==",[68,3157,3158],{"class":335}," num)",[68,3160,3161],{"class":393}," \u002F\u002F如果是水仙花数，才打印\n",[68,3163,3164],{"class":70,"line":1860},[68,3165,2716],{"class":335},[68,3167,3168,3170,3172,3174,3176],{"class":70,"line":1881},[68,3169,2721],{"class":335},[68,3171,1376],{"class":331},[68,3173,1872],{"class":335},[68,3175,1376],{"class":331},[68,3177,1399],{"class":335},[68,3179,3180],{"class":70,"line":1886},[68,3181,2735],{"class":335},[68,3183,3184,3186,3188],{"class":70,"line":1900},[68,3185,2495],{"class":335},[68,3187,2498],{"class":331},[68,3189,1498],{"class":335},[68,3191,3192],{"class":70,"line":1905},[68,3193,2393],{"class":335},[68,3195,3196,3198,3201,3203,3206],{"class":70,"line":1934},[68,3197,2457],{"class":331},[68,3199,3200],{"class":335}," (num ",[68,3202,1243],{"class":331},[68,3204,3205],{"class":82}," 1000",[68,3207,2925],{"class":335},[68,3209,3210],{"class":70,"line":1939},[68,3211,1772],{"class":335},[23,3213,3214],{"start":1387},[26,3215,3216],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[58,3218,3220],{"className":322,"code":3219,"language":324,"meta":63,"style":63},"\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",[65,3221,3222,3227,3256,3260,3272,3276,3281,3292,3299,3303,3317,3321,3328,3332,3344,3353],{"__ignoreMap":63},[68,3223,3224],{"class":70,"line":71},[68,3225,3226],{"class":393},"\u002F\u002F从数字0-9打印\n",[68,3228,3229,3232,3234,3236,3239,3241,3243,3246,3248,3250,3252,3254],{"class":70,"line":92},[68,3230,3231],{"class":331},"for",[68,3233,336],{"class":335},[68,3235,339],{"class":331},[68,3237,3238],{"class":335}," i",[68,3240,381],{"class":331},[68,3242,525],{"class":82},[68,3244,3245],{"class":335},";i",[68,3247,1243],{"class":331},[68,3249,779],{"class":82},[68,3251,3245],{"class":335},[68,3253,2498],{"class":331},[68,3255,342],{"class":335},[68,3257,3258],{"class":70,"line":1387},[68,3259,1753],{"class":335},[68,3261,3262,3264,3266,3268,3270],{"class":70,"line":1402},[68,3263,1758],{"class":335},[68,3265,1376],{"class":331},[68,3267,774],{"class":335},[68,3269,1376],{"class":331},[68,3271,1399],{"class":335},[68,3273,3274],{"class":70,"line":1408},[68,3275,1772],{"class":335},[68,3277,3278],{"class":70,"line":1422},[68,3279,3280],{"class":393},"\u002F\u002F上式可以进行拆分\n",[68,3282,3283,3285,3287,3289],{"class":70,"line":1428},[68,3284,339],{"class":331},[68,3286,3238],{"class":335},[68,3288,381],{"class":331},[68,3290,3291],{"class":82},"0\n",[68,3293,3294,3296],{"class":70,"line":1519},[68,3295,3231],{"class":331},[68,3297,3298],{"class":335},"(;;;)\n",[68,3300,3301],{"class":70,"line":1525},[68,3302,1753],{"class":335},[68,3304,3305,3308,3311,3313,3315],{"class":70,"line":1537},[68,3306,3307],{"class":331},"    if",[68,3309,3310],{"class":335},"(i",[68,3312,1917],{"class":331},[68,3314,779],{"class":82},[68,3316,342],{"class":335},[68,3318,3319],{"class":70,"line":1819},[68,3320,2236],{"class":335},[68,3322,3323,3326],{"class":70,"line":1824},[68,3324,3325],{"class":331},"        break",[68,3327,1498],{"class":335},[68,3329,3330],{"class":70,"line":1830},[68,3331,2393],{"class":335},[68,3333,3334,3336,3338,3340,3342],{"class":70,"line":1835},[68,3335,1758],{"class":335},[68,3337,1376],{"class":331},[68,3339,774],{"class":335},[68,3341,1376],{"class":331},[68,3343,1399],{"class":335},[68,3345,3346,3349,3351],{"class":70,"line":1849},[68,3347,3348],{"class":335},"    i",[68,3350,2498],{"class":331},[68,3352,1498],{"class":335},[68,3354,3355],{"class":70,"line":1854},[68,3356,1772],{"class":335},[19,3358,3359],{},"小练习",[58,3361,3363],{"className":322,"code":3362,"language":324,"meta":63,"style":63},"#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",[65,3364,3365,3371,3381,3389,3393,3398,3403,3431,3435,3440,3445,3486,3490,3503,3507,3511,3515,3527,3531,3535],{"__ignoreMap":63},[68,3366,3367,3369],{"class":70,"line":71},[68,3368,2156],{"class":331},[68,3370,2159],{"class":78},[68,3372,3373,3375,3377,3379],{"class":70,"line":92},[68,3374,2164],{"class":331},[68,3376,2167],{"class":331},[68,3378,2170],{"class":74},[68,3380,1498],{"class":335},[68,3382,3383,3385,3387],{"class":70,"line":1387},[68,3384,339],{"class":331},[68,3386,2179],{"class":74},[68,3388,2182],{"class":335},[68,3390,3391],{"class":70,"line":1402},[68,3392,1753],{"class":335},[68,3394,3395],{"class":70,"line":1408},[68,3396,3397],{"class":393},"    \u002F\u002F敲桌子案例\n",[68,3399,3400],{"class":70,"line":1422},[68,3401,3402],{"class":393},"    \u002F\u002F1.先输出1-100的数字\n",[68,3404,3405,3408,3410,3412,3414,3416,3418,3421,3423,3425,3427,3429],{"class":70,"line":1428},[68,3406,3407],{"class":331},"    for",[68,3409,336],{"class":335},[68,3411,339],{"class":331},[68,3413,3238],{"class":335},[68,3415,381],{"class":331},[68,3417,551],{"class":82},[68,3419,3420],{"class":335},"; i",[68,3422,1795],{"class":331},[68,3424,644],{"class":82},[68,3426,3420],{"class":335},[68,3428,2498],{"class":331},[68,3430,342],{"class":335},[68,3432,3433],{"class":70,"line":1519},[68,3434,2236],{"class":335},[68,3436,3437],{"class":70,"line":1525},[68,3438,3439],{"class":393},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[68,3441,3442],{"class":70,"line":1537},[68,3443,3444],{"class":393},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[68,3446,3447,3449,3451,3453,3455,3457,3459,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484],{"class":70,"line":1819},[68,3448,2703],{"class":331},[68,3450,3310],{"class":335},[68,3452,661],{"class":331},[68,3454,702],{"class":82},[68,3456,3155],{"class":331},[68,3458,525],{"class":82},[68,3460,3461],{"class":331}," ||",[68,3463,3238],{"class":335},[68,3465,661],{"class":331},[68,3467,779],{"class":82},[68,3469,3155],{"class":331},[68,3471,702],{"class":82},[68,3473,3461],{"class":331},[68,3475,3238],{"class":335},[68,3477,917],{"class":331},[68,3479,779],{"class":82},[68,3481,3155],{"class":331},[68,3483,702],{"class":82},[68,3485,342],{"class":335},[68,3487,3488],{"class":70,"line":1824},[68,3489,2716],{"class":335},[68,3491,3492,3494,3496,3499,3501],{"class":70,"line":1830},[68,3493,2721],{"class":335},[68,3495,1376],{"class":331},[68,3497,3498],{"class":78},"\"敲桌子\"",[68,3500,1376],{"class":331},[68,3502,1399],{"class":335},[68,3504,3505],{"class":70,"line":1835},[68,3506,2735],{"class":335},[68,3508,3509],{"class":70,"line":1849},[68,3510,2776],{"class":331},[68,3512,3513],{"class":70,"line":1854},[68,3514,2716],{"class":335},[68,3516,3517,3519,3521,3523,3525],{"class":70,"line":1860},[68,3518,2721],{"class":335},[68,3520,1376],{"class":331},[68,3522,774],{"class":335},[68,3524,1376],{"class":331},[68,3526,1399],{"class":335},[68,3528,3529],{"class":70,"line":1881},[68,3530,2735],{"class":335},[68,3532,3533],{"class":70,"line":1886},[68,3534,2393],{"class":335},[68,3536,3537],{"class":70,"line":1900},[68,3538,1772],{"class":335},[19,3540,3541],{},"嵌套实现星图",[58,3543,3545],{"className":322,"code":3544,"language":324,"meta":63,"style":63},"#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",[65,3546,3547,3553,3563,3571,3575,3601,3605,3634,3638,3649,3653,3662,3666],{"__ignoreMap":63},[68,3548,3549,3551],{"class":70,"line":71},[68,3550,2156],{"class":331},[68,3552,2159],{"class":78},[68,3554,3555,3557,3559,3561],{"class":70,"line":92},[68,3556,2164],{"class":331},[68,3558,2167],{"class":331},[68,3560,2170],{"class":74},[68,3562,1498],{"class":335},[68,3564,3565,3567,3569],{"class":70,"line":1387},[68,3566,339],{"class":331},[68,3568,2179],{"class":74},[68,3570,2182],{"class":335},[68,3572,3573],{"class":70,"line":1402},[68,3574,1753],{"class":335},[68,3576,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599],{"class":70,"line":1408},[68,3578,3407],{"class":331},[68,3580,1865],{"class":335},[68,3582,339],{"class":331},[68,3584,3238],{"class":335},[68,3586,381],{"class":331},[68,3588,525],{"class":82},[68,3590,3245],{"class":335},[68,3592,1243],{"class":331},[68,3594,779],{"class":82},[68,3596,3245],{"class":335},[68,3598,2498],{"class":331},[68,3600,342],{"class":335},[68,3602,3603],{"class":70,"line":1422},[68,3604,2236],{"class":335},[68,3606,3607,3610,3612,3614,3617,3619,3621,3624,3626,3628,3630,3632],{"class":70,"line":1428},[68,3608,3609],{"class":331},"        for",[68,3611,1865],{"class":335},[68,3613,339],{"class":331},[68,3615,3616],{"class":335}," j",[68,3618,381],{"class":331},[68,3620,525],{"class":82},[68,3622,3623],{"class":335},";j",[68,3625,1243],{"class":331},[68,3627,779],{"class":82},[68,3629,3623],{"class":335},[68,3631,2498],{"class":331},[68,3633,342],{"class":335},[68,3635,3636],{"class":70,"line":1519},[68,3637,2716],{"class":335},[68,3639,3640,3642,3644,3647],{"class":70,"line":1525},[68,3641,2721],{"class":335},[68,3643,1376],{"class":331},[68,3645,3646],{"class":78},"\"*\"",[68,3648,1498],{"class":335},[68,3650,3651],{"class":70,"line":1537},[68,3652,2735],{"class":335},[68,3654,3655,3658,3660],{"class":70,"line":1819},[68,3656,3657],{"class":335},"        cout",[68,3659,1376],{"class":331},[68,3661,1399],{"class":335},[68,3663,3664],{"class":70,"line":1824},[68,3665,2393],{"class":335},[68,3667,3668],{"class":70,"line":1830},[68,3669,1772],{"class":335},[19,3671,3672],{},"乘法口诀表",[58,3674,3676],{"className":322,"code":3675,"language":324,"meta":63,"style":63},"#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",[65,3677,3678,3684,3694,3702,3706,3732,3736,3761,3765,3805,3809,3817,3821],{"__ignoreMap":63},[68,3679,3680,3682],{"class":70,"line":71},[68,3681,2156],{"class":331},[68,3683,2540],{"class":78},[68,3685,3686,3688,3690,3692],{"class":70,"line":92},[68,3687,2164],{"class":331},[68,3689,2167],{"class":331},[68,3691,2170],{"class":74},[68,3693,1498],{"class":335},[68,3695,3696,3698,3700],{"class":70,"line":1387},[68,3697,339],{"class":331},[68,3699,2179],{"class":74},[68,3701,2182],{"class":335},[68,3703,3704],{"class":70,"line":1402},[68,3705,1753],{"class":335},[68,3707,3708,3710,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730],{"class":70,"line":1408},[68,3709,3407],{"class":331},[68,3711,336],{"class":335},[68,3713,339],{"class":331},[68,3715,3238],{"class":335},[68,3717,381],{"class":331},[68,3719,551],{"class":82},[68,3721,3245],{"class":335},[68,3723,1243],{"class":331},[68,3725,779],{"class":82},[68,3727,3245],{"class":335},[68,3729,2498],{"class":331},[68,3731,342],{"class":335},[68,3733,3734],{"class":70,"line":1422},[68,3735,2236],{"class":335},[68,3737,3738,3740,3742,3744,3746,3748,3750,3752,3754,3757,3759],{"class":70,"line":1428},[68,3739,3609],{"class":331},[68,3741,336],{"class":335},[68,3743,339],{"class":331},[68,3745,3616],{"class":335},[68,3747,381],{"class":331},[68,3749,551],{"class":82},[68,3751,3623],{"class":335},[68,3753,1795],{"class":331},[68,3755,3756],{"class":335},"i;j",[68,3758,2498],{"class":331},[68,3760,342],{"class":335},[68,3762,3763],{"class":70,"line":1519},[68,3764,2716],{"class":335},[68,3766,3767,3769,3771,3773,3775,3777,3779,3781,3783,3786,3788,3790,3792,3794,3796,3799,3801,3803],{"class":70,"line":1525},[68,3768,2721],{"class":335},[68,3770,1376],{"class":331},[68,3772,800],{"class":335},[68,3774,1376],{"class":331},[68,3776,3646],{"class":78},[68,3778,1376],{"class":331},[68,3780,774],{"class":335},[68,3782,1376],{"class":331},[68,3784,3785],{"class":78},"\"=\"",[68,3787,1376],{"class":331},[68,3789,774],{"class":335},[68,3791,788],{"class":331},[68,3793,800],{"class":335},[68,3795,1376],{"class":331},[68,3797,3798],{"class":78},"'",[68,3800,1438],{"class":82},[68,3802,3798],{"class":78},[68,3804,1498],{"class":335},[68,3806,3807],{"class":70,"line":1537},[68,3808,2735],{"class":335},[68,3810,3811,3813,3815],{"class":70,"line":1819},[68,3812,3657],{"class":335},[68,3814,1376],{"class":331},[68,3816,1399],{"class":335},[68,3818,3819],{"class":70,"line":1824},[68,3820,2393],{"class":335},[68,3822,3823],{"class":70,"line":1830},[68,3824,1772],{"class":335},[301,3826,3828],{"id":3827},"_163跳出语句","1.6.3跳出语句",[23,3830,3831],{},[26,3832,3833],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3835,3836],{},"break使用时机：",[42,3838,3839,3842,3845],{},[26,3840,3841],{},"出现在switch条件语句中，作用是终止case并跳出switch",[26,3843,3844],{},"出现在循环结构中，作用是跳出当前的循环结构",[26,3846,3847],{},"出现在嵌套循环中，跳出最近的内层循环语句",[23,3849,3850,3853],{"start":92},[26,3851,3852],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[26,3854,3855],{},"goto语句\n语法：goto 标记;",[19,3857,3858],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[58,3860,3862],{"className":322,"code":3861,"language":324,"meta":63,"style":63},"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",[65,3863,3864,3872,3876,3889,3899,3912,3925,3938,3946,3962],{"__ignoreMap":63},[68,3865,3866,3868,3870],{"class":70,"line":71},[68,3867,339],{"class":331},[68,3869,2179],{"class":74},[68,3871,2182],{"class":335},[68,3873,3874],{"class":70,"line":92},[68,3875,1753],{"class":335},[68,3877,3878,3880,3882,3885,3887],{"class":70,"line":1387},[68,3879,1758],{"class":335},[68,3881,1376],{"class":331},[68,3883,3884],{"class":78},"\"1\"",[68,3886,1376],{"class":331},[68,3888,1399],{"class":335},[68,3890,3891,3894,3897],{"class":70,"line":1402},[68,3892,3893],{"class":331},"    goto",[68,3895,3896],{"class":74}," FLAG",[68,3898,1498],{"class":335},[68,3900,3901,3903,3905,3908,3910],{"class":70,"line":1408},[68,3902,1758],{"class":335},[68,3904,1376],{"class":331},[68,3906,3907],{"class":78},"\"2\"",[68,3909,1376],{"class":331},[68,3911,1399],{"class":335},[68,3913,3914,3916,3918,3921,3923],{"class":70,"line":1422},[68,3915,1758],{"class":335},[68,3917,1376],{"class":331},[68,3919,3920],{"class":78},"\"3\"",[68,3922,1376],{"class":331},[68,3924,1399],{"class":335},[68,3926,3927,3929,3931,3934,3936],{"class":70,"line":1428},[68,3928,1758],{"class":335},[68,3930,1376],{"class":331},[68,3932,3933],{"class":78},"\"4\"",[68,3935,1376],{"class":331},[68,3937,1399],{"class":335},[68,3939,3940,3943],{"class":70,"line":1519},[68,3941,3942],{"class":74},"    FLAG",[68,3944,3945],{"class":335},":\n",[68,3947,3948,3950,3952,3955,3957,3959],{"class":70,"line":1525},[68,3949,1758],{"class":335},[68,3951,1376],{"class":331},[68,3953,3954],{"class":78},"\"5\"",[68,3956,1376],{"class":331},[68,3958,1446],{"class":335},[68,3960,3961],{"class":393},"\u002F\u002F跳过了2,3,4,直接到5\n",[68,3963,3964],{"class":70,"line":1537},[68,3965,1772],{"class":335},[14,3967,3969],{"id":3968},"_17数组","1.7数组",[301,3971,3973],{"id":3972},"_171一维数组","1.7.1一维数组",[23,3975,3976],{},[26,3977,3978],{},"一维数组定义方式",[471,3980,3981,3991],{},[474,3982,3983],{},[477,3984,3985,3988],{},[480,3986,3987],{},"方式",[480,3989,3990],{},"注意事项",[518,3992,3993,4007,4017],{},[477,3994,3995,4001],{},[523,3996,3997,3998,390],{},"数据类型 数组名",[68,3999,4000],{},"数组长度",[523,4002,4003,4004,4006],{},"这种方式是先定义再arr",[68,4005,774],{},"赋值",[477,4008,4009,4014],{},[523,4010,3997,4011,4013],{},[68,4012,4000],{},"={值1,值2....};",[523,4015,4016],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[477,4018,4019,4023],{},[523,4020,3997,4021,4013],{},[68,4022],{},[523,4024,4025,4026,4028],{},"int arr",[68,4027],{},";这是不正确的，按照这样的方式定义必须有初始长度",[23,4030,4031],{"start":92},[26,4032,4033],{},"一维数组数组名\n用途：",[42,4035,4036],{},[26,4037,4038],{},"1.可以统计整个数组在内存中的长度：",[58,4040,4042],{"className":322,"code":4041,"language":324,"meta":63,"style":63},"sizeof(arr);\nsizeof(arr[0]);\n",[65,4043,4044,4051],{"__ignoreMap":63},[68,4045,4046,4048],{"class":70,"line":71},[68,4047,332],{"class":331},[68,4049,4050],{"class":335},"(arr);\n",[68,4052,4053,4055,4058,4060],{"class":70,"line":92},[68,4054,332],{"class":331},[68,4056,4057],{"class":335},"(arr[",[68,4059,525],{"class":82},[68,4061,4062],{"class":335},"]);\n",[42,4064,4065],{},[26,4066,4067],{},"2.可以获取数组在内存中的首地址:",[58,4069,4071],{"className":322,"code":4070,"language":324,"meta":63,"style":63},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[65,4072,4073,4078,4091,4096],{"__ignoreMap":63},[68,4074,4075],{"class":70,"line":71},[68,4076,4077],{"class":393},"\u002F\u002F查看16进制的首地址\n",[68,4079,4080,4082,4084,4087,4089],{"class":70,"line":92},[68,4081,1577],{"class":335},[68,4083,1376],{"class":331},[68,4085,4086],{"class":335},"arr",[68,4088,1376],{"class":331},[68,4090,1399],{"class":335},[68,4092,4093],{"class":70,"line":1387},[68,4094,4095],{"class":393},"\u002F\u002F看10进制数\n",[68,4097,4098,4100,4102,4104,4106,4108,4110,4113,4115,4117,4119],{"class":70,"line":1402},[68,4099,1577],{"class":335},[68,4101,1376],{"class":331},[68,4103,336],{"class":335},[68,4105,339],{"class":331},[68,4107,762],{"class":335},[68,4109,686],{"class":331},[68,4111,4112],{"class":335},"arr[",[68,4114,525],{"class":82},[68,4116,1273],{"class":335},[68,4118,1376],{"class":331},[68,4120,1399],{"class":335},[19,4122,4123],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[42,4125,4126],{},[26,4127,4128],{},"1️⃣五只小猪称体重",[58,4130,4132],{"className":322,"code":4131,"language":324,"meta":63,"style":63},"#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",[65,4133,4134,4140,4150,4158,4162,4202,4215,4241,4245,4257,4261,4271,4275,4279,4292,4302],{"__ignoreMap":63},[68,4135,4136,4138],{"class":70,"line":71},[68,4137,2156],{"class":331},[68,4139,2159],{"class":78},[68,4141,4142,4144,4146,4148],{"class":70,"line":92},[68,4143,2164],{"class":331},[68,4145,2167],{"class":331},[68,4147,2170],{"class":74},[68,4149,1498],{"class":335},[68,4151,4152,4154,4156],{"class":70,"line":1387},[68,4153,339],{"class":331},[68,4155,2179],{"class":74},[68,4157,2182],{"class":335},[68,4159,4160],{"class":70,"line":1402},[68,4161,1753],{"class":335},[68,4163,4164,4166,4169,4171,4173,4175,4177,4180,4182,4185,4187,4189,4191,4194,4196,4199],{"class":70,"line":1408},[68,4165,2191],{"class":331},[68,4167,4168],{"class":335}," arr[",[68,4170,652],{"class":82},[68,4172,1273],{"class":335},[68,4174,381],{"class":331},[68,4176,1229],{"class":335},[68,4178,4179],{"class":82},"300",[68,4181,711],{"class":335},[68,4183,4184],{"class":82},"350",[68,4186,711],{"class":335},[68,4188,1929],{"class":82},[68,4190,711],{"class":335},[68,4192,4193],{"class":82},"400",[68,4195,711],{"class":335},[68,4197,4198],{"class":82},"250",[68,4200,4201],{"class":335},"};\n",[68,4203,4204,4206,4209,4211,4213],{"class":70,"line":1422},[68,4205,2191],{"class":331},[68,4207,4208],{"class":335}," tmp",[68,4210,381],{"class":331},[68,4212,525],{"class":82},[68,4214,1498],{"class":335},[68,4216,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239],{"class":70,"line":1428},[68,4218,3407],{"class":331},[68,4220,1865],{"class":335},[68,4222,339],{"class":331},[68,4224,3238],{"class":335},[68,4226,381],{"class":331},[68,4228,525],{"class":82},[68,4230,3245],{"class":335},[68,4232,1243],{"class":331},[68,4234,652],{"class":82},[68,4236,3245],{"class":335},[68,4238,2498],{"class":331},[68,4240,342],{"class":335},[68,4242,4243],{"class":70,"line":1519},[68,4244,2236],{"class":335},[68,4246,4247,4249,4252,4254],{"class":70,"line":1525},[68,4248,2703],{"class":331},[68,4250,4251],{"class":335},"(tmp",[68,4253,1243],{"class":331},[68,4255,4256],{"class":335},"arr[i])\n",[68,4258,4259],{"class":70,"line":1537},[68,4260,2716],{"class":335},[68,4262,4263,4266,4268],{"class":70,"line":1819},[68,4264,4265],{"class":335},"            tmp",[68,4267,381],{"class":331},[68,4269,4270],{"class":335},"arr[i];\n",[68,4272,4273],{"class":70,"line":1824},[68,4274,2735],{"class":335},[68,4276,4277],{"class":70,"line":1830},[68,4278,2393],{"class":335},[68,4280,4281,4283,4285,4288,4290],{"class":70,"line":1835},[68,4282,1758],{"class":335},[68,4284,1376],{"class":331},[68,4286,4287],{"class":335},"tmp",[68,4289,1376],{"class":331},[68,4291,1399],{"class":335},[68,4293,4294,4297,4300],{"class":70,"line":1849},[68,4295,4296],{"class":331},"    return",[68,4298,4299],{"class":82}," 0",[68,4301,1498],{"class":335},[68,4303,4304],{"class":70,"line":1854},[68,4305,1772],{"class":335},[42,4307,4308],{},[26,4309,4310],{},"2️⃣数组元素逆置",[58,4312,4314],{"className":322,"code":4313,"language":324,"meta":63,"style":63},"\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",[65,4315,4316,4321,4327,4337,4345,4349,4384,4400,4432,4445,4450,4455,4467,4477,4487,4492,4501,4511,4516,4521,4548,4552,4568,4572,4583,4592],{"__ignoreMap":63},[68,4317,4318],{"class":70,"line":71},[68,4319,4320],{"class":393},"\u002F\u002F元素逆置\n",[68,4322,4323,4325],{"class":70,"line":92},[68,4324,2156],{"class":331},[68,4326,2159],{"class":78},[68,4328,4329,4331,4333,4335],{"class":70,"line":1387},[68,4330,2164],{"class":331},[68,4332,2167],{"class":331},[68,4334,2170],{"class":74},[68,4336,1498],{"class":335},[68,4338,4339,4341,4343],{"class":70,"line":1402},[68,4340,339],{"class":331},[68,4342,2179],{"class":74},[68,4344,2182],{"class":335},[68,4346,4347],{"class":70,"line":1408},[68,4348,1753],{"class":335},[68,4350,4351,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376,4378,4380,4382],{"class":70,"line":1422},[68,4352,4353],{"class":331},"   int",[68,4355,4168],{"class":335},[68,4357,652],{"class":82},[68,4359,1273],{"class":335},[68,4361,381],{"class":331},[68,4363,1229],{"class":335},[68,4365,551],{"class":82},[68,4367,711],{"class":335},[68,4369,412],{"class":82},[68,4371,711],{"class":335},[68,4373,406],{"class":82},[68,4375,711],{"class":335},[68,4377,626],{"class":82},[68,4379,711],{"class":335},[68,4381,652],{"class":82},[68,4383,4201],{"class":335},[68,4385,4386,4388,4391,4393,4395,4397],{"class":70,"line":1428},[68,4387,4353],{"class":331},[68,4389,4390],{"class":335}," start",[68,4392,381],{"class":331},[68,4394,525],{"class":82},[68,4396,390],{"class":335},[68,4398,4399],{"class":393},"\u002F\u002F起始下标\n",[68,4401,4402,4404,4407,4410,4413,4416,4418,4420,4423,4425,4427,4429],{"class":70,"line":1519},[68,4403,4353],{"class":331},[68,4405,4406],{"class":335}," end",[68,4408,4409],{"class":331},"=sizeof",[68,4411,4412],{"class":335},"(arr)",[68,4414,4415],{"class":331},"\u002Fsizeof",[68,4417,4057],{"class":335},[68,4419,525],{"class":82},[68,4421,4422],{"class":335},"])",[68,4424,865],{"class":331},[68,4426,551],{"class":82},[68,4428,390],{"class":335},[68,4430,4431],{"class":393},"\u002F\u002F结束下标\n",[68,4433,4434,4437,4440,4442],{"class":70,"line":1525},[68,4435,4436],{"class":331},"   while",[68,4438,4439],{"class":335}," (start",[68,4441,1243],{"class":331},[68,4443,4444],{"class":335},"end)\n",[68,4446,4447],{"class":70,"line":1537},[68,4448,4449],{"class":335},"   {\n",[68,4451,4452],{"class":70,"line":1819},[68,4453,4454],{"class":393},"    \u002F\u002F实现元素互换代码\n",[68,4456,4457,4459,4462,4464],{"class":70,"line":1824},[68,4458,2191],{"class":331},[68,4460,4461],{"class":335}," temp",[68,4463,381],{"class":331},[68,4465,4466],{"class":335},"arr[start];\n",[68,4468,4469,4472,4474],{"class":70,"line":1830},[68,4470,4471],{"class":335},"    arr[start]",[68,4473,381],{"class":331},[68,4475,4476],{"class":335},"arr[end];\n",[68,4478,4479,4482,4484],{"class":70,"line":1835},[68,4480,4481],{"class":335},"    arr[end]",[68,4483,381],{"class":331},[68,4485,4486],{"class":335},"temp;\n",[68,4488,4489],{"class":70,"line":1849},[68,4490,4491],{"class":393},"    \u002F\u002F下标更新\n",[68,4493,4494,4497,4499],{"class":70,"line":1854},[68,4495,4496],{"class":335},"    start",[68,4498,2498],{"class":331},[68,4500,1498],{"class":335},[68,4502,4503,4506,4509],{"class":70,"line":1860},[68,4504,4505],{"class":335},"    end",[68,4507,4508],{"class":331},"--",[68,4510,1498],{"class":335},[68,4512,4513],{"class":70,"line":1881},[68,4514,4515],{"class":335},"   }\n",[68,4517,4518],{"class":70,"line":1886},[68,4519,4520],{"class":393},"   \u002F\u002F输出逆置后的数组\n",[68,4522,4523,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546],{"class":70,"line":1900},[68,4524,4525],{"class":331},"   for",[68,4527,1865],{"class":335},[68,4529,339],{"class":331},[68,4531,3238],{"class":335},[68,4533,381],{"class":331},[68,4535,525],{"class":82},[68,4537,3245],{"class":335},[68,4539,1243],{"class":331},[68,4541,652],{"class":82},[68,4543,3245],{"class":335},[68,4545,2498],{"class":331},[68,4547,342],{"class":335},[68,4549,4550],{"class":70,"line":1905},[68,4551,4449],{"class":335},[68,4553,4554,4556,4558,4561,4563,4566],{"class":70,"line":1934},[68,4555,1758],{"class":335},[68,4557,1376],{"class":331},[68,4559,4560],{"class":335},"arr[i]",[68,4562,1376],{"class":331},[68,4564,4565],{"class":78},"\" \"",[68,4567,1498],{"class":335},[68,4569,4570],{"class":70,"line":1939},[68,4571,4515],{"class":335},[68,4573,4574,4577,4579,4581],{"class":70,"line":1956},[68,4575,4576],{"class":74},"   system",[68,4578,336],{"class":335},[68,4580,2514],{"class":78},[68,4582,2925],{"class":335},[68,4584,4585,4588,4590],{"class":70,"line":1961},[68,4586,4587],{"class":331},"   return",[68,4589,4299],{"class":82},[68,4591,1498],{"class":335},[68,4593,4594],{"class":70,"line":1966},[68,4595,1772],{"class":335},[42,4597,4598],{},[26,4599,4600],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[58,4602,4604],{"className":322,"code":4603,"language":324,"meta":63,"style":63},"\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",[65,4605,4606,4611,4617,4627,4635,4639,4691,4704,4730,4734,4748,4752,4757,4762,4792,4796,4801,4835,4839,4844,4864,4869,4881,4897,4912,4917,4921,4925,4938,4964,4968,4982,4986,4994],{"__ignoreMap":63},[68,4607,4608],{"class":70,"line":71},[68,4609,4610],{"class":393},"\u002F\u002F冒泡排序,升序\n",[68,4612,4613,4615],{"class":70,"line":92},[68,4614,2156],{"class":331},[68,4616,2159],{"class":78},[68,4618,4619,4621,4623,4625],{"class":70,"line":1387},[68,4620,2164],{"class":331},[68,4622,2167],{"class":331},[68,4624,2170],{"class":74},[68,4626,1498],{"class":335},[68,4628,4629,4631,4633],{"class":70,"line":1402},[68,4630,339],{"class":331},[68,4632,2179],{"class":74},[68,4634,2182],{"class":335},[68,4636,4637],{"class":70,"line":1408},[68,4638,1753],{"class":335},[68,4640,4641,4643,4645,4647,4650,4652,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689],{"class":70,"line":1422},[68,4642,2191],{"class":331},[68,4644,4168],{"class":335},[68,4646,753],{"class":82},[68,4648,4649],{"class":335},"] ",[68,4651,381],{"class":331},[68,4653,4654],{"class":335}," {",[68,4656,626],{"class":82},[68,4658,711],{"class":335},[68,4660,412],{"class":82},[68,4662,711],{"class":335},[68,4664,728],{"class":82},[68,4666,711],{"class":335},[68,4668,525],{"class":82},[68,4670,711],{"class":335},[68,4672,652],{"class":82},[68,4674,711],{"class":335},[68,4676,702],{"class":82},[68,4678,711],{"class":335},[68,4680,551],{"class":82},[68,4682,711],{"class":335},[68,4684,406],{"class":82},[68,4686,711],{"class":335},[68,4688,753],{"class":82},[68,4690,4201],{"class":335},[68,4692,4693,4695,4697,4700,4702],{"class":70,"line":1428},[68,4694,1758],{"class":335},[68,4696,1376],{"class":331},[68,4698,4699],{"class":78},"\"排序前：\"",[68,4701,1376],{"class":331},[68,4703,1399],{"class":335},[68,4705,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728],{"class":70,"line":1519},[68,4707,3407],{"class":331},[68,4709,1865],{"class":335},[68,4711,339],{"class":331},[68,4713,3238],{"class":335},[68,4715,381],{"class":331},[68,4717,525],{"class":82},[68,4719,3245],{"class":335},[68,4721,1243],{"class":331},[68,4723,753],{"class":82},[68,4725,3245],{"class":335},[68,4727,2498],{"class":331},[68,4729,342],{"class":335},[68,4731,4732],{"class":70,"line":1525},[68,4733,2236],{"class":335},[68,4735,4736,4738,4740,4742,4744,4746],{"class":70,"line":1537},[68,4737,3657],{"class":335},[68,4739,1376],{"class":331},[68,4741,4560],{"class":335},[68,4743,1376],{"class":331},[68,4745,4565],{"class":78},[68,4747,1498],{"class":335},[68,4749,4750],{"class":70,"line":1819},[68,4751,2393],{"class":335},[68,4753,4754],{"class":70,"line":1824},[68,4755,4756],{"class":393},"    \u002F\u002F开始冒泡排序\n",[68,4758,4759],{"class":70,"line":1830},[68,4760,4761],{"class":393},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[68,4763,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786,4788,4790],{"class":70,"line":1835},[68,4765,3407],{"class":331},[68,4767,1865],{"class":335},[68,4769,339],{"class":331},[68,4771,3238],{"class":335},[68,4773,381],{"class":331},[68,4775,525],{"class":82},[68,4777,3245],{"class":335},[68,4779,1243],{"class":331},[68,4781,753],{"class":82},[68,4783,865],{"class":331},[68,4785,551],{"class":82},[68,4787,3245],{"class":335},[68,4789,2498],{"class":331},[68,4791,342],{"class":335},[68,4793,4794],{"class":70,"line":1849},[68,4795,2236],{"class":335},[68,4797,4798],{"class":70,"line":1854},[68,4799,4800],{"class":393},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[68,4802,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":70,"line":1860},[68,4804,3609],{"class":331},[68,4806,1865],{"class":335},[68,4808,339],{"class":331},[68,4810,3616],{"class":335},[68,4812,381],{"class":331},[68,4814,525],{"class":82},[68,4816,3623],{"class":335},[68,4818,1243],{"class":331},[68,4820,753],{"class":82},[68,4822,865],{"class":331},[68,4824,774],{"class":335},[68,4826,865],{"class":331},[68,4828,551],{"class":82},[68,4830,3623],{"class":335},[68,4832,2498],{"class":331},[68,4834,342],{"class":335},[68,4836,4837],{"class":70,"line":1881},[68,4838,2716],{"class":335},[68,4840,4841],{"class":70,"line":1886},[68,4842,4843],{"class":393},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[68,4845,4846,4849,4852,4854,4857,4859,4861],{"class":70,"line":1900},[68,4847,4848],{"class":331},"            if",[68,4850,4851],{"class":335},"(arr[j]",[68,4853,1293],{"class":331},[68,4855,4856],{"class":335},"arr[j",[68,4858,814],{"class":331},[68,4860,551],{"class":82},[68,4862,4863],{"class":335},"])\n",[68,4865,4866],{"class":70,"line":1905},[68,4867,4868],{"class":335},"            {\n",[68,4870,4871,4874,4876,4878],{"class":70,"line":1934},[68,4872,4873],{"class":331},"                int",[68,4875,4461],{"class":335},[68,4877,381],{"class":331},[68,4879,4880],{"class":335},"arr[j];\n",[68,4882,4883,4886,4888,4890,4892,4894],{"class":70,"line":1939},[68,4884,4885],{"class":335},"                arr[j]",[68,4887,381],{"class":331},[68,4889,4856],{"class":335},[68,4891,814],{"class":331},[68,4893,551],{"class":82},[68,4895,4896],{"class":335},"];\n",[68,4898,4899,4902,4904,4906,4908,4910],{"class":70,"line":1956},[68,4900,4901],{"class":335},"                arr[j",[68,4903,814],{"class":331},[68,4905,551],{"class":82},[68,4907,1273],{"class":335},[68,4909,381],{"class":331},[68,4911,4486],{"class":335},[68,4913,4914],{"class":70,"line":1961},[68,4915,4916],{"class":335},"            }\n",[68,4918,4919],{"class":70,"line":1966},[68,4920,2735],{"class":335},[68,4922,4923],{"class":70,"line":1971},[68,4924,2393],{"class":335},[68,4926,4927,4929,4931,4934,4936],{"class":70,"line":1985},[68,4928,1758],{"class":335},[68,4930,1376],{"class":331},[68,4932,4933],{"class":78},"\"排序后：\"",[68,4935,1376],{"class":331},[68,4937,1399],{"class":335},[68,4939,4940,4942,4944,4946,4948,4950,4952,4954,4956,4958,4960,4962],{"class":70,"line":1990},[68,4941,3407],{"class":331},[68,4943,1865],{"class":335},[68,4945,339],{"class":331},[68,4947,3238],{"class":335},[68,4949,381],{"class":331},[68,4951,525],{"class":82},[68,4953,3245],{"class":335},[68,4955,1243],{"class":331},[68,4957,753],{"class":82},[68,4959,3245],{"class":335},[68,4961,2498],{"class":331},[68,4963,342],{"class":335},[68,4965,4966],{"class":70,"line":2783},[68,4967,2236],{"class":335},[68,4969,4970,4972,4974,4976,4978,4980],{"class":70,"line":2797},[68,4971,3657],{"class":335},[68,4973,1376],{"class":331},[68,4975,4560],{"class":335},[68,4977,1376],{"class":331},[68,4979,4565],{"class":78},[68,4981,1498],{"class":335},[68,4983,4984],{"class":70,"line":2805},[68,4985,2393],{"class":335},[68,4987,4988,4990,4992],{"class":70,"line":2810},[68,4989,4296],{"class":331},[68,4991,4299],{"class":82},[68,4993,1498],{"class":335},[68,4995,4996],{"class":70,"line":2816},[68,4997,1772],{"class":335},[301,4999,5001],{"id":5000},"_172二维数组","1.7.2二维数组",[23,5003,5004],{},[26,5005,5006],{},"二维数组的四种定义方式",[471,5008,5009,5018],{},[474,5010,5011],{},[477,5012,5013,5016],{},[480,5014,5015],{},"序号",[480,5017,3987],{},[518,5019,5020,5030,5039,5048,5057],{},[477,5021,5022,5024],{},[523,5023,551],{},[523,5025,5026,5027,390],{},"数据类型 数组名[行数]",[68,5028,5029],{},"列数",[477,5031,5032,5034],{},[523,5033,412],{},[523,5035,5026,5036,5038],{},[68,5037,5029],{},"={ {数据1,数据2}，{数据3，数据4}... }",[477,5040,5041,5043],{},[523,5042,406],{},[523,5044,5026,5045,5047],{},[68,5046,5029],{},"={数据1,数据2,数据3...}",[477,5049,5050,5052],{},[523,5051,626],{},[523,5053,5054,5055,5047],{},"数据类型 数组名[]",[68,5056,5029],{},[477,5058,5059,5062],{},[523,5060,5061],{},"注意：不能只省略列数",[523,5063],{},[23,5065,5066],{"start":92},[26,5067,5068],{},"二维数组数组名",[42,5070,5071,5074],{},[26,5072,5073],{},"1.查看二维数组所占内存空间",[26,5075,5076],{},"2.获取二维数组首地址",[19,5078,5079],{},"已知二维数组，求二维数组的行数与列数",[58,5081,5083],{"className":322,"code":5082,"language":324,"meta":63,"style":63},"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",[65,5084,5085,5093,5097,5115,5119,5137,5153,5158,5183,5216],{"__ignoreMap":63},[68,5086,5087,5089,5091],{"class":70,"line":71},[68,5088,339],{"class":331},[68,5090,2179],{"class":74},[68,5092,2182],{"class":335},[68,5094,5095],{"class":70,"line":92},[68,5096,1753],{"class":335},[68,5098,5099,5101,5103,5105,5108,5110,5112],{"class":70,"line":1387},[68,5100,2191],{"class":331},[68,5102,4168],{"class":335},[68,5104,412],{"class":82},[68,5106,5107],{"class":335},"][",[68,5109,406],{"class":82},[68,5111,1273],{"class":335},[68,5113,5114],{"class":331},"=\n",[68,5116,5117],{"class":70,"line":1402},[68,5118,2236],{"class":335},[68,5120,5121,5124,5126,5128,5130,5132,5134],{"class":70,"line":1408},[68,5122,5123],{"class":335},"        {",[68,5125,551],{"class":82},[68,5127,711],{"class":335},[68,5129,412],{"class":82},[68,5131,711],{"class":335},[68,5133,406],{"class":82},[68,5135,5136],{"class":335},"},\n",[68,5138,5139,5141,5143,5145,5147,5149,5151],{"class":70,"line":1422},[68,5140,5123],{"class":335},[68,5142,626],{"class":82},[68,5144,711],{"class":335},[68,5146,652],{"class":82},[68,5148,711],{"class":335},[68,5150,677],{"class":82},[68,5152,1772],{"class":335},[68,5154,5155],{"class":70,"line":1428},[68,5156,5157],{"class":335},"    };\n",[68,5159,5160,5162,5164,5167,5169,5171,5173,5175,5177,5179,5181],{"class":70,"line":1519},[68,5161,1758],{"class":335},[68,5163,1376],{"class":331},[68,5165,5166],{"class":78},"\"二维数组的行数\"",[68,5168,1580],{"class":331},[68,5170,4412],{"class":335},[68,5172,4415],{"class":331},[68,5174,4057],{"class":335},[68,5176,525],{"class":82},[68,5178,4422],{"class":335},[68,5180,1376],{"class":331},[68,5182,1399],{"class":335},[68,5184,5185,5187,5189,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212,5214],{"class":70,"line":1525},[68,5186,1758],{"class":335},[68,5188,1376],{"class":331},[68,5190,5191],{"class":78},"\"二维数组的列数\"",[68,5193,1580],{"class":331},[68,5195,4057],{"class":335},[68,5197,525],{"class":82},[68,5199,4422],{"class":335},[68,5201,4415],{"class":331},[68,5203,4057],{"class":335},[68,5205,525],{"class":82},[68,5207,5107],{"class":335},[68,5209,525],{"class":82},[68,5211,4422],{"class":335},[68,5213,1376],{"class":331},[68,5215,1399],{"class":335},[68,5217,5218],{"class":70,"line":1537},[68,5219,1772],{"class":335},[19,5221,5222],{},"查看二维数组首地址",[58,5224,5226],{"className":322,"code":5225,"language":324,"meta":63,"style":63},"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",[65,5227,5228,5245,5271,5296],{"__ignoreMap":63},[68,5229,5230,5232,5234,5237,5239,5241,5243],{"class":70,"line":71},[68,5231,1577],{"class":335},[68,5233,1376],{"class":331},[68,5235,5236],{"class":78},"\"二维数组首地址：\"",[68,5238,1376],{"class":331},[68,5240,4086],{"class":335},[68,5242,1376],{"class":331},[68,5244,1399],{"class":335},[68,5246,5247,5249,5251,5254,5256,5258,5260,5263,5265,5267,5269],{"class":70,"line":92},[68,5248,1577],{"class":335},[68,5250,1376],{"class":331},[68,5252,5253],{"class":78},"\"二维数组第一行的首地址：\"",[68,5255,1376],{"class":331},[68,5257,336],{"class":335},[68,5259,339],{"class":331},[68,5261,5262],{"class":335},")arr[",[68,5264,525],{"class":82},[68,5266,1273],{"class":335},[68,5268,1376],{"class":331},[68,5270,1399],{"class":335},[68,5272,5273,5275,5277,5280,5282,5284,5286,5288,5290,5292,5294],{"class":70,"line":1387},[68,5274,1577],{"class":335},[68,5276,1376],{"class":331},[68,5278,5279],{"class":78},"\"二维数组第二行的首地址：\"",[68,5281,1376],{"class":331},[68,5283,336],{"class":335},[68,5285,339],{"class":331},[68,5287,5262],{"class":335},[68,5289,551],{"class":82},[68,5291,1273],{"class":335},[68,5293,1376],{"class":331},[68,5295,1399],{"class":335},[68,5297,5298,5300,5302,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327,5329],{"class":70,"line":1402},[68,5299,1577],{"class":335},[68,5301,1376],{"class":331},[68,5303,5304],{"class":78},"\"二维数组第一个元素的首地址:\"",[68,5306,1376],{"class":331},[68,5308,336],{"class":335},[68,5310,339],{"class":331},[68,5312,762],{"class":335},[68,5314,686],{"class":331},[68,5316,4112],{"class":335},[68,5318,525],{"class":82},[68,5320,5107],{"class":335},[68,5322,525],{"class":82},[68,5324,1273],{"class":335},[68,5326,1376],{"class":331},[68,5328,1446],{"class":335},[68,5330,5331],{"class":393},"\u002F\u002F对于数，要加取址符\n",[250,5333,5334],{},"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":63,"searchDepth":92,"depth":92,"links":5336},[5337,5338,5339,5347,5348,5354,5359],{"id":276,"depth":92,"text":277},{"id":283,"depth":92,"text":284},{"id":298,"depth":92,"text":299,"children":5340},[5341,5342,5343,5344,5345,5346],{"id":303,"depth":1387,"text":304},{"id":352,"depth":1387,"text":353},{"id":420,"depth":1387,"text":421},{"id":1357,"depth":1387,"text":1358},{"id":1452,"depth":1387,"text":1453},{"id":1551,"depth":1387,"text":1552},{"id":1593,"depth":92,"text":1594},{"id":1661,"depth":92,"text":1662,"children":5349},[5350,5351,5352,5353],{"id":1665,"depth":1387,"text":1666},{"id":1686,"depth":1387,"text":1687},{"id":1695,"depth":1387,"text":1696},{"id":1704,"depth":1387,"text":1705},{"id":1713,"depth":92,"text":1714,"children":5355},[5356,5357,5358],{"id":1717,"depth":1387,"text":1718},{"id":2411,"depth":1387,"text":2412},{"id":3827,"depth":1387,"text":3828},{"id":3968,"depth":92,"text":3969,"children":5360},[5361,5362],{"id":3972,"depth":1387,"text":3973},{"id":5000,"depth":1387,"text":5001},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":268,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5369,"title":5370,"body":5371,"description":63,"extension":258,"meta":6470,"navigation":260,"path":6471,"seo":6472,"stem":6473,"__hash__":6474},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5372,"toc":6462},[5373,5376,5380,5388,5396,5399,5464,5468,5471,5547,5551,5554,5557,5560,5773,5777,5782,5846,5851,5918,5923,6014,6017,6122,6126,6129,6135,6279,6283,6286,6300,6303,6348,6351,6459],[10,5374,5370],{"id":5375},"_2函数",[14,5377,5379],{"id":5378},"_21函数概述","2.1函数概述",[23,5381,5382,5385],{},[26,5383,5384],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[26,5386,5387],{},"语法：",[58,5389,5394],{"className":5390,"code":5392,"language":5393,"meta":63},[5391],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[65,5395,5392],{"__ignoreMap":63},[19,5397,5398],{},"小案例",[58,5400,5402],{"className":322,"code":5401,"language":324,"meta":63,"style":63},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[65,5403,5404,5409,5432,5436,5453,5460],{"__ignoreMap":63},[68,5405,5406],{"class":70,"line":71},[68,5407,5408],{"class":393},"\u002F\u002Fnum1,num2形参\n",[68,5410,5411,5413,5415,5417,5419,5423,5425,5427,5430],{"class":70,"line":92},[68,5412,339],{"class":331},[68,5414,138],{"class":74},[68,5416,336],{"class":335},[68,5418,339],{"class":331},[68,5420,5422],{"class":5421},"s4XuR"," num1",[68,5424,711],{"class":335},[68,5426,339],{"class":331},[68,5428,5429],{"class":5421}," num2",[68,5431,342],{"class":335},[68,5433,5434],{"class":70,"line":1387},[68,5435,1753],{"class":335},[68,5437,5438,5440,5443,5445,5448,5450],{"class":70,"line":1402},[68,5439,2191],{"class":331},[68,5441,5442],{"class":335}," sum",[68,5444,381],{"class":331},[68,5446,5447],{"class":335},"num1",[68,5449,814],{"class":331},[68,5451,5452],{"class":335},"num2;\n",[68,5454,5455,5457],{"class":70,"line":1408},[68,5456,4296],{"class":331},[68,5458,5459],{"class":335}," sum;\n",[68,5461,5462],{"class":70,"line":1422},[68,5463,1772],{"class":335},[14,5465,5467],{"id":5466},"_22函数调用","2.2函数调用",[19,5469,5470],{},"调用刚刚写的求和函数",[58,5472,5474],{"className":322,"code":5473,"language":324,"meta":63,"style":63},"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",[65,5475,5476,5484,5488,5493,5505,5517,5526,5531,5543],{"__ignoreMap":63},[68,5477,5478,5480,5482],{"class":70,"line":71},[68,5479,339],{"class":331},[68,5481,2179],{"class":74},[68,5483,2182],{"class":335},[68,5485,5486],{"class":70,"line":92},[68,5487,1753],{"class":335},[68,5489,5490],{"class":70,"line":1387},[68,5491,5492],{"class":393},"    \u002F\u002Fa,b实参\n",[68,5494,5495,5497,5499,5501,5503],{"class":70,"line":1402},[68,5496,2191],{"class":331},[68,5498,1606],{"class":335},[68,5500,381],{"class":331},[68,5502,525],{"class":82},[68,5504,1498],{"class":335},[68,5506,5507,5509,5511,5513,5515],{"class":70,"line":1408},[68,5508,2191],{"class":331},[68,5510,3039],{"class":335},[68,5512,381],{"class":331},[68,5514,525],{"class":82},[68,5516,1498],{"class":335},[68,5518,5519,5521,5523],{"class":70,"line":1422},[68,5520,2218],{"class":335},[68,5522,1637],{"class":331},[68,5524,5525],{"class":335},"a,b;\n",[68,5527,5528],{"class":70,"line":1428},[68,5529,5530],{"class":393},"    \u002F\u002F调用函数时，实参值传给了形参\n",[68,5532,5533,5535,5537,5540],{"class":70,"line":1519},[68,5534,1758],{"class":335},[68,5536,1376],{"class":331},[68,5538,5539],{"class":74},"add",[68,5541,5542],{"class":335},"(a,b);\n",[68,5544,5545],{"class":70,"line":1525},[68,5546,1772],{"class":335},[14,5548,5550],{"id":5549},"_23值传递","2.3值传递",[19,5552,5553],{},"值传递就是函数调用时实参将数值传给形参",[19,5555,5556],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5558,5559],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[58,5561,5563],{"className":322,"code":5562,"language":324,"meta":63,"style":63},"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",[65,5564,5565,5587,5591,5604,5621,5639,5650,5659,5668,5681,5697,5713,5722,5726,5734,5738,5750,5762,5769],{"__ignoreMap":63},[68,5566,5567,5570,5573,5575,5577,5579,5581,5583,5585],{"class":70,"line":71},[68,5568,5569],{"class":331},"void",[68,5571,5572],{"class":74}," swap",[68,5574,336],{"class":335},[68,5576,339],{"class":331},[68,5578,5422],{"class":5421},[68,5580,711],{"class":335},[68,5582,339],{"class":331},[68,5584,5429],{"class":5421},[68,5586,342],{"class":335},[68,5588,5589],{"class":70,"line":92},[68,5590,1753],{"class":335},[68,5592,5593,5595,5597,5600,5602],{"class":70,"line":1387},[68,5594,1758],{"class":335},[68,5596,1376],{"class":331},[68,5598,5599],{"class":78},"\"交换前：\"",[68,5601,1376],{"class":331},[68,5603,1399],{"class":335},[68,5605,5606,5608,5610,5613,5615,5617,5619],{"class":70,"line":1402},[68,5607,1758],{"class":335},[68,5609,1376],{"class":331},[68,5611,5612],{"class":78},"\"num1=\"",[68,5614,1376],{"class":331},[68,5616,5447],{"class":335},[68,5618,1376],{"class":331},[68,5620,1399],{"class":335},[68,5622,5623,5625,5627,5630,5632,5635,5637],{"class":70,"line":1408},[68,5624,1758],{"class":335},[68,5626,1376],{"class":331},[68,5628,5629],{"class":78},"\"num2=\"",[68,5631,1376],{"class":331},[68,5633,5634],{"class":335},"num2",[68,5636,1376],{"class":331},[68,5638,1399],{"class":335},[68,5640,5641,5643,5645,5647],{"class":70,"line":1422},[68,5642,2191],{"class":331},[68,5644,4461],{"class":335},[68,5646,381],{"class":331},[68,5648,5649],{"class":335},"num1;\n",[68,5651,5652,5655,5657],{"class":70,"line":1428},[68,5653,5654],{"class":335},"    num1",[68,5656,381],{"class":331},[68,5658,5452],{"class":335},[68,5660,5661,5664,5666],{"class":70,"line":1519},[68,5662,5663],{"class":335},"    num2",[68,5665,381],{"class":331},[68,5667,4486],{"class":335},[68,5669,5670,5672,5674,5677,5679],{"class":70,"line":1525},[68,5671,1758],{"class":335},[68,5673,1376],{"class":331},[68,5675,5676],{"class":78},"\"交换后：\"",[68,5678,1376],{"class":331},[68,5680,1399],{"class":335},[68,5682,5683,5685,5687,5689,5691,5693,5695],{"class":70,"line":1537},[68,5684,1758],{"class":335},[68,5686,1376],{"class":331},[68,5688,5612],{"class":78},[68,5690,1376],{"class":331},[68,5692,5447],{"class":335},[68,5694,1376],{"class":331},[68,5696,1399],{"class":335},[68,5698,5699,5701,5703,5705,5707,5709,5711],{"class":70,"line":1819},[68,5700,1758],{"class":335},[68,5702,1376],{"class":331},[68,5704,5629],{"class":78},[68,5706,1376],{"class":331},[68,5708,5634],{"class":335},[68,5710,1376],{"class":331},[68,5712,1399],{"class":335},[68,5714,5715,5717,5719],{"class":70,"line":1824},[68,5716,4296],{"class":331},[68,5718,390],{"class":335},[68,5720,5721],{"class":393},"\u002F\u002F或者不写\n",[68,5723,5724],{"class":70,"line":1830},[68,5725,1772],{"class":335},[68,5727,5728,5730,5732],{"class":70,"line":1835},[68,5729,339],{"class":331},[68,5731,2179],{"class":74},[68,5733,2182],{"class":335},[68,5735,5736],{"class":70,"line":1849},[68,5737,1753],{"class":335},[68,5739,5740,5742,5744,5746,5748],{"class":70,"line":1854},[68,5741,2191],{"class":331},[68,5743,1606],{"class":335},[68,5745,381],{"class":331},[68,5747,779],{"class":82},[68,5749,1498],{"class":335},[68,5751,5752,5754,5756,5758,5760],{"class":70,"line":1860},[68,5753,2191],{"class":331},[68,5755,3039],{"class":335},[68,5757,381],{"class":331},[68,5759,1033],{"class":82},[68,5761,1498],{"class":335},[68,5763,5764,5767],{"class":70,"line":1881},[68,5765,5766],{"class":74},"    swap",[68,5768,5542],{"class":335},[68,5770,5771],{"class":70,"line":1886},[68,5772,1772],{"class":335},[14,5774,5776],{"id":5775},"_24函数的常见形式","2.4函数的常见形式",[23,5778,5779],{},[26,5780,5781],{},"无参无返",[58,5783,5785],{"className":322,"code":5784,"language":324,"meta":63,"style":63},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[65,5786,5787,5796,5800,5813,5817,5825,5829,5834,5842],{"__ignoreMap":63},[68,5788,5789,5791,5794],{"class":70,"line":71},[68,5790,5569],{"class":331},[68,5792,5793],{"class":74}," test01",[68,5795,2182],{"class":335},[68,5797,5798],{"class":70,"line":92},[68,5799,1753],{"class":335},[68,5801,5802,5804,5806,5809,5811],{"class":70,"line":1387},[68,5803,1758],{"class":335},[68,5805,1376],{"class":331},[68,5807,5808],{"class":78},"\"你好\"",[68,5810,1376],{"class":331},[68,5812,1399],{"class":335},[68,5814,5815],{"class":70,"line":1402},[68,5816,1772],{"class":335},[68,5818,5819,5821,5823],{"class":70,"line":1408},[68,5820,339],{"class":331},[68,5822,2179],{"class":74},[68,5824,2182],{"class":335},[68,5826,5827],{"class":70,"line":1422},[68,5828,1753],{"class":335},[68,5830,5831],{"class":70,"line":1428},[68,5832,5833],{"class":393},"    \u002F\u002F函数调用\n",[68,5835,5836,5839],{"class":70,"line":1519},[68,5837,5838],{"class":74},"    test01",[68,5840,5841],{"class":335},"();\n",[68,5843,5844],{"class":70,"line":1525},[68,5845,1772],{"class":335},[23,5847,5848],{"start":92},[26,5849,5850],{},"有参无返",[58,5852,5854],{"className":322,"code":5853,"language":324,"meta":63,"style":63},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[65,5855,5856,5871,5875,5887,5891,5899,5903,5914],{"__ignoreMap":63},[68,5857,5858,5860,5863,5865,5867,5869],{"class":70,"line":71},[68,5859,5569],{"class":331},[68,5861,5862],{"class":74}," test02",[68,5864,336],{"class":335},[68,5866,339],{"class":331},[68,5868,1606],{"class":5421},[68,5870,342],{"class":335},[68,5872,5873],{"class":70,"line":92},[68,5874,1753],{"class":335},[68,5876,5877,5879,5881,5883,5885],{"class":70,"line":1387},[68,5878,1758],{"class":335},[68,5880,1376],{"class":331},[68,5882,5808],{"class":78},[68,5884,1376],{"class":331},[68,5886,1399],{"class":335},[68,5888,5889],{"class":70,"line":1402},[68,5890,1772],{"class":335},[68,5892,5893,5895,5897],{"class":70,"line":1408},[68,5894,339],{"class":331},[68,5896,2179],{"class":74},[68,5898,2182],{"class":335},[68,5900,5901],{"class":70,"line":1422},[68,5902,1753],{"class":335},[68,5904,5905,5908,5910,5912],{"class":70,"line":1428},[68,5906,5907],{"class":74},"    test02",[68,5909,336],{"class":335},[68,5911,644],{"class":82},[68,5913,2925],{"class":335},[68,5915,5916],{"class":70,"line":1519},[68,5917,1772],{"class":335},[23,5919,5920],{"start":1387},[26,5921,5922],{},"无参有返",[58,5924,5926],{"className":322,"code":5925,"language":324,"meta":63,"style":63},"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",[65,5927,5928,5937,5941,5953,5962,5966,5974,5978,5991,6010],{"__ignoreMap":63},[68,5929,5930,5932,5935],{"class":70,"line":71},[68,5931,339],{"class":331},[68,5933,5934],{"class":74}," test03",[68,5936,2182],{"class":335},[68,5938,5939],{"class":70,"line":92},[68,5940,1753],{"class":335},[68,5942,5943,5945,5947,5949,5951],{"class":70,"line":1387},[68,5944,1758],{"class":335},[68,5946,1376],{"class":331},[68,5948,5808],{"class":78},[68,5950,1376],{"class":331},[68,5952,1399],{"class":335},[68,5954,5955,5957,5960],{"class":70,"line":1402},[68,5956,4296],{"class":331},[68,5958,5959],{"class":82}," 100",[68,5961,1498],{"class":335},[68,5963,5964],{"class":70,"line":1408},[68,5965,1772],{"class":335},[68,5967,5968,5970,5972],{"class":70,"line":1422},[68,5969,339],{"class":331},[68,5971,2179],{"class":74},[68,5973,2182],{"class":335},[68,5975,5976],{"class":70,"line":1428},[68,5977,1753],{"class":335},[68,5979,5980,5982,5984,5986,5989],{"class":70,"line":1519},[68,5981,2191],{"class":331},[68,5983,5422],{"class":335},[68,5985,381],{"class":331},[68,5987,5988],{"class":74},"test03",[68,5990,5841],{"class":335},[68,5992,5993,5995,5997,5999,6001,6003,6005,6007],{"class":70,"line":1525},[68,5994,1758],{"class":335},[68,5996,1376],{"class":331},[68,5998,5612],{"class":78},[68,6000,1376],{"class":331},[68,6002,5447],{"class":335},[68,6004,1376],{"class":331},[68,6006,1446],{"class":335},[68,6008,6009],{"class":393}," \u002F\u002F100\n",[68,6011,6012],{"class":70,"line":1537},[68,6013,1772],{"class":335},[19,6015,6016],{},"4.有参有返",[58,6018,6020],{"className":322,"code":6019,"language":324,"meta":63,"style":63},"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",[65,6021,6022,6037,6041,6054,6060,6064,6073,6077,6089,6103,6118],{"__ignoreMap":63},[68,6023,6024,6026,6029,6031,6033,6035],{"class":70,"line":71},[68,6025,339],{"class":331},[68,6027,6028],{"class":74}," test04",[68,6030,336],{"class":335},[68,6032,339],{"class":331},[68,6034,1606],{"class":5421},[68,6036,342],{"class":335},[68,6038,6039],{"class":70,"line":92},[68,6040,1753],{"class":335},[68,6042,6043,6045,6047,6050,6052],{"class":70,"line":1387},[68,6044,1758],{"class":335},[68,6046,1376],{"class":331},[68,6048,6049],{"class":78},"\"hello\"",[68,6051,1376],{"class":331},[68,6053,1399],{"class":335},[68,6055,6056,6058],{"class":70,"line":1402},[68,6057,4296],{"class":331},[68,6059,1640],{"class":335},[68,6061,6062],{"class":70,"line":1408},[68,6063,1772],{"class":335},[68,6065,6066,6068,6071],{"class":70,"line":1422},[68,6067,339],{"class":331},[68,6069,6070],{"class":74}," mian",[68,6072,2182],{"class":335},[68,6074,6075],{"class":70,"line":1428},[68,6076,1753],{"class":335},[68,6078,6079,6081,6083,6085,6087],{"class":70,"line":1519},[68,6080,2191],{"class":331},[68,6082,3039],{"class":335},[68,6084,381],{"class":331},[68,6086,551],{"class":82},[68,6088,1498],{"class":335},[68,6090,6091,6093,6095,6097,6100],{"class":70,"line":1525},[68,6092,2191],{"class":331},[68,6094,3055],{"class":335},[68,6096,381],{"class":331},[68,6098,6099],{"class":74},"test04",[68,6101,6102],{"class":335},"(b);\n",[68,6104,6105,6107,6109,6111,6113,6115],{"class":70,"line":1537},[68,6106,1758],{"class":335},[68,6108,1376],{"class":331},[68,6110,621],{"class":335},[68,6112,1376],{"class":331},[68,6114,1446],{"class":335},[68,6116,6117],{"class":393}," \u002F\u002F1\n",[68,6119,6120],{"class":70,"line":1819},[68,6121,1772],{"class":335},[14,6123,6125],{"id":6124},"_25函数的声明","2.5函数的声明",[19,6127,6128],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6130,6131,6132],{},"函数的",[483,6133,6134],{},"声明可以多次，但是函数的定义只能有一次",[58,6136,6138],{"className":322,"code":6137,"language":324,"meta":63,"style":63},"\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",[65,6139,6140,6145,6150,6175,6184,6188,6200,6212,6228,6232,6252,6256,6275],{"__ignoreMap":63},[68,6141,6142],{"class":70,"line":71},[68,6143,6144],{"class":393},"\u002F\u002F函数声明\n",[68,6146,6147],{"class":70,"line":92},[68,6148,6149],{"class":393},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[68,6151,6152,6154,6157,6159,6161,6163,6165,6167,6169,6172],{"class":70,"line":1387},[68,6153,339],{"class":331},[68,6155,6156],{"class":74}," max",[68,6158,336],{"class":335},[68,6160,339],{"class":331},[68,6162,1606],{"class":5421},[68,6164,711],{"class":335},[68,6166,339],{"class":331},[68,6168,3039],{"class":5421},[68,6170,6171],{"class":335},");",[68,6173,6174],{"class":393},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[68,6176,6177,6179,6181],{"class":70,"line":1402},[68,6178,339],{"class":331},[68,6180,2179],{"class":74},[68,6182,6183],{"class":335},"() \n",[68,6185,6186],{"class":70,"line":1408},[68,6187,1753],{"class":335},[68,6189,6190,6192,6194,6196,6198],{"class":70,"line":1422},[68,6191,2191],{"class":331},[68,6193,1606],{"class":335},[68,6195,381],{"class":331},[68,6197,779],{"class":82},[68,6199,1498],{"class":335},[68,6201,6202,6204,6206,6208,6210],{"class":70,"line":1428},[68,6203,2191],{"class":331},[68,6205,3039],{"class":335},[68,6207,381],{"class":331},[68,6209,1033],{"class":82},[68,6211,1498],{"class":335},[68,6213,6214,6216,6218,6221,6224,6226],{"class":70,"line":1519},[68,6215,1758],{"class":335},[68,6217,1376],{"class":331},[68,6219,6220],{"class":74},"max",[68,6222,6223],{"class":335},"(a,b)",[68,6225,1376],{"class":331},[68,6227,1399],{"class":335},[68,6229,6230],{"class":70,"line":1525},[68,6231,1772],{"class":335},[68,6233,6234,6236,6238,6240,6242,6244,6246,6248,6250],{"class":70,"line":1537},[68,6235,339],{"class":331},[68,6237,6156],{"class":74},[68,6239,336],{"class":335},[68,6241,339],{"class":331},[68,6243,1606],{"class":5421},[68,6245,711],{"class":335},[68,6247,339],{"class":331},[68,6249,3039],{"class":5421},[68,6251,342],{"class":335},[68,6253,6254],{"class":70,"line":1819},[68,6255,1753],{"class":335},[68,6257,6258,6260,6262,6264,6266,6268,6270,6272],{"class":70,"line":1824},[68,6259,4296],{"class":331},[68,6261,1606],{"class":335},[68,6263,1293],{"class":331},[68,6265,596],{"class":335},[68,6267,1319],{"class":331},[68,6269,30],{"class":335},[68,6271,1192],{"class":331},[68,6273,6274],{"class":335},"b;\n",[68,6276,6277],{"class":70,"line":1830},[68,6278,1772],{"class":335},[14,6280,6282],{"id":6281},"_26函数的分文件编写","2.6函数的分文件编写",[19,6284,6285],{},"4个步骤：",[42,6287,6288,6291,6294,6297],{},[26,6289,6290],{},"1.创建后缀名为.h的头文件",[26,6292,6293],{},"2.创建后缀名为.cpp的源文件",[26,6295,6296],{},"3.在头文件中写函数的定义",[26,6298,6299],{},"4.在源文件中写函数的定义\n示例：",[19,6301,6302],{},"头文件：swap.h",[58,6304,6306],{"className":322,"code":6305,"language":324,"meta":63,"style":63},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[65,6307,6308,6314,6324,6328],{"__ignoreMap":63},[68,6309,6310,6312],{"class":70,"line":71},[68,6311,2156],{"class":331},[68,6313,2159],{"class":78},[68,6315,6316,6318,6320,6322],{"class":70,"line":92},[68,6317,2164],{"class":331},[68,6319,2167],{"class":331},[68,6321,2170],{"class":74},[68,6323,1498],{"class":335},[68,6325,6326],{"class":70,"line":1387},[68,6327,6144],{"class":393},[68,6329,6330,6332,6334,6336,6338,6340,6342,6344,6346],{"class":70,"line":1402},[68,6331,5569],{"class":331},[68,6333,5572],{"class":74},[68,6335,336],{"class":335},[68,6337,339],{"class":331},[68,6339,1606],{"class":5421},[68,6341,711],{"class":335},[68,6343,339],{"class":331},[68,6345,3039],{"class":5421},[68,6347,2925],{"class":335},[19,6349,6350],{},"源文件：swap.cpp",[58,6352,6354],{"className":322,"code":6353,"language":324,"meta":63,"style":63},"#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",[65,6355,6356,6363,6368,6388,6392,6403,6412,6421,6438,6455],{"__ignoreMap":63},[68,6357,6358,6360],{"class":70,"line":71},[68,6359,2156],{"class":331},[68,6361,6362],{"class":78}," \"swap.h\"\n",[68,6364,6365],{"class":70,"line":92},[68,6366,6367],{"class":393},"\u002F\u002F函数的定义\n",[68,6369,6370,6372,6374,6376,6378,6380,6382,6384,6386],{"class":70,"line":1387},[68,6371,5569],{"class":331},[68,6373,5572],{"class":74},[68,6375,336],{"class":335},[68,6377,339],{"class":331},[68,6379,1606],{"class":5421},[68,6381,711],{"class":335},[68,6383,339],{"class":331},[68,6385,3039],{"class":5421},[68,6387,342],{"class":335},[68,6389,6390],{"class":70,"line":1402},[68,6391,1753],{"class":335},[68,6393,6394,6396,6398,6400],{"class":70,"line":1408},[68,6395,2191],{"class":331},[68,6397,4461],{"class":335},[68,6399,381],{"class":331},[68,6401,6402],{"class":335},"a;\n",[68,6404,6405,6408,6410],{"class":70,"line":1422},[68,6406,6407],{"class":335},"    a",[68,6409,381],{"class":331},[68,6411,6274],{"class":335},[68,6413,6414,6417,6419],{"class":70,"line":1428},[68,6415,6416],{"class":335},"    b",[68,6418,381],{"class":331},[68,6420,4486],{"class":335},[68,6422,6423,6425,6427,6430,6432,6434,6436],{"class":70,"line":1519},[68,6424,1758],{"class":335},[68,6426,1376],{"class":331},[68,6428,6429],{"class":78},"\"a=\"",[68,6431,1376],{"class":331},[68,6433,30],{"class":335},[68,6435,1376],{"class":331},[68,6437,1399],{"class":335},[68,6439,6440,6442,6444,6447,6449,6451,6453],{"class":70,"line":1525},[68,6441,1758],{"class":335},[68,6443,1376],{"class":331},[68,6445,6446],{"class":78},"\"b=\"",[68,6448,1376],{"class":331},[68,6450,596],{"class":335},[68,6452,1376],{"class":331},[68,6454,1399],{"class":335},[68,6456,6457],{"class":70,"line":1537},[68,6458,1772],{"class":335},[250,6460,6461],{},"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":63,"searchDepth":92,"depth":92,"links":6463},[6464,6465,6466,6467,6468,6469],{"id":5378,"depth":92,"text":5379},{"id":5466,"depth":92,"text":5467},{"id":5549,"depth":92,"text":5550},{"id":5775,"depth":92,"text":5776},{"id":6124,"depth":92,"text":6125},{"id":6281,"depth":92,"text":6282},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5370,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6476,"title":6477,"body":6478,"description":6485,"extension":258,"meta":7890,"navigation":260,"path":7891,"seo":7892,"stem":7893,"__hash__":7894},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6479,"toc":7880},[6480,6483,6486,6490,6652,6656,6659,6662,6665,6668,6808,6812,6815,6818,6821,6886,6890,6895,6962,6965,6969,6972,6983,6988,7008,7011,7016,7035,7038,7042,7061,7064,7068,7303,7307,7310,7313,7316,7478,7481,7485,7488,7494,7877],[10,6481,6477],{"id":6482},"_3指针",[19,6484,6485],{},"通过指针保存一个地址，指针就是个地址",[14,6487,6489],{"id":6488},"_31定义指针","3.1定义指针",[58,6491,6493],{"className":322,"code":6492,"language":324,"meta":63,"style":63},"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",[65,6494,6495,6503,6507,6512,6524,6529,6537,6547,6565,6585,6589,6594,6599,6604,6618,6634,6648],{"__ignoreMap":63},[68,6496,6497,6499,6501],{"class":70,"line":71},[68,6498,339],{"class":331},[68,6500,2179],{"class":74},[68,6502,2182],{"class":335},[68,6504,6505],{"class":70,"line":92},[68,6506,1753],{"class":335},[68,6508,6509],{"class":70,"line":1387},[68,6510,6511],{"class":393},"    \u002F\u002F1.定义指针\n",[68,6513,6514,6516,6518,6520,6522],{"class":70,"line":1402},[68,6515,2191],{"class":331},[68,6517,1606],{"class":335},[68,6519,381],{"class":331},[68,6521,779],{"class":82},[68,6523,1498],{"class":335},[68,6525,6526],{"class":70,"line":1408},[68,6527,6528],{"class":393},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[68,6530,6531,6534],{"class":70,"line":1422},[68,6532,6533],{"class":331},"    int*",[68,6535,6536],{"class":335},"p;\n",[68,6538,6539,6542,6545],{"class":70,"line":1428},[68,6540,6541],{"class":335},"    p",[68,6543,6544],{"class":331},"=&",[68,6546,6402],{"class":335},[68,6548,6549,6551,6553,6556,6559,6561,6563],{"class":70,"line":1519},[68,6550,1758],{"class":335},[68,6552,1376],{"class":331},[68,6554,6555],{"class":78},"\"a的地址为：\"",[68,6557,6558],{"class":331},"\u003C\u003C&",[68,6560,30],{"class":335},[68,6562,1376],{"class":331},[68,6564,1399],{"class":335},[68,6566,6567,6569,6571,6574,6576,6578,6580,6582],{"class":70,"line":1525},[68,6568,1758],{"class":335},[68,6570,1376],{"class":331},[68,6572,6573],{"class":78},"\"指针p为：\"",[68,6575,1376],{"class":331},[68,6577,19],{"class":335},[68,6579,1376],{"class":331},[68,6581,1446],{"class":335},[68,6583,6584],{"class":393},"\u002F\u002F指针p表示的就是a的地址\n",[68,6586,6587],{"class":70,"line":1537},[68,6588,2606],{"emptyLinePlaceholder":260},[68,6590,6591],{"class":70,"line":1819},[68,6592,6593],{"class":393},"    \u002F\u002F2.使用指针\n",[68,6595,6596],{"class":70,"line":1824},[68,6597,6598],{"class":393},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[68,6600,6601],{"class":70,"line":1830},[68,6602,6603],{"class":393},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[68,6605,6606,6609,6611,6613,6616],{"class":70,"line":1835},[68,6607,6608],{"class":331},"    *",[68,6610,19],{"class":335},[68,6612,381],{"class":331},[68,6614,6615],{"class":82},"1000",[68,6617,1498],{"class":335},[68,6619,6620,6622,6625,6627,6629,6631],{"class":70,"line":1849},[68,6621,1758],{"class":335},[68,6623,6624],{"class":331},"\u003C\u003C*",[68,6626,19],{"class":335},[68,6628,1376],{"class":331},[68,6630,1446],{"class":335},[68,6632,6633],{"class":393},"\u002F\u002F1000\n",[68,6635,6636,6638,6640,6642,6644,6646],{"class":70,"line":1854},[68,6637,1758],{"class":335},[68,6639,1376],{"class":331},[68,6641,30],{"class":335},[68,6643,1376],{"class":331},[68,6645,1446],{"class":335},[68,6647,6633],{"class":393},[68,6649,6650],{"class":70,"line":1860},[68,6651,1772],{"class":335},[14,6653,6655],{"id":6654},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6657,6658],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6660,6661],{},"在32位操作系统下：占用4个字节空间",[19,6663,6664],{},"在64位操作系统下：占用8个字节空间",[19,6666,6667],{},"上方是不管啥数据类型的",[58,6669,6671],{"className":322,"code":6670,"language":324,"meta":63,"style":63},"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",[65,6672,6673,6681,6685,6690,6702,6707,6712,6717,6730,6752,6778,6804],{"__ignoreMap":63},[68,6674,6675,6677,6679],{"class":70,"line":71},[68,6676,339],{"class":331},[68,6678,2179],{"class":74},[68,6680,2182],{"class":335},[68,6682,6683],{"class":70,"line":92},[68,6684,1753],{"class":335},[68,6686,6687],{"class":70,"line":1387},[68,6688,6689],{"class":393},"    \u002F\u002F指针所占内存空间\n",[68,6691,6692,6694,6696,6698,6700],{"class":70,"line":1402},[68,6693,2191],{"class":331},[68,6695,1606],{"class":335},[68,6697,381],{"class":331},[68,6699,779],{"class":82},[68,6701,1498],{"class":335},[68,6703,6704],{"class":70,"line":1408},[68,6705,6706],{"class":393},"    \u002F\u002Fint *p;\n",[68,6708,6709],{"class":70,"line":1422},[68,6710,6711],{"class":393},"    \u002F\u002Fp=&a;\n",[68,6713,6714],{"class":70,"line":1428},[68,6715,6716],{"class":393},"    \u002F\u002F上述可以写为以下：\n",[68,6718,6719,6721,6724,6726,6728],{"class":70,"line":1519},[68,6720,2191],{"class":331},[68,6722,6723],{"class":331}," *",[68,6725,19],{"class":335},[68,6727,6544],{"class":331},[68,6729,6402],{"class":335},[68,6731,6732,6735,6737,6740,6742,6745,6747,6749],{"class":70,"line":1525},[68,6733,6734],{"class":335},"    cout ",[68,6736,1376],{"class":331},[68,6738,6739],{"class":78},"\"sizeof(int *)\"",[68,6741,1580],{"class":331},[68,6743,6744],{"class":335},"(p)",[68,6746,1376],{"class":331},[68,6748,1446],{"class":335},[68,6750,6751],{"class":393},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[68,6753,6754,6756,6758,6760,6762,6764,6766,6768,6770,6772,6775],{"class":70,"line":1537},[68,6755,6734],{"class":335},[68,6757,1376],{"class":331},[68,6759,6739],{"class":78},[68,6761,1580],{"class":331},[68,6763,336],{"class":335},[68,6765,339],{"class":331},[68,6767,6723],{"class":331},[68,6769,762],{"class":335},[68,6771,1376],{"class":331},[68,6773,6774],{"class":335},"endl",[68,6776,6777],{"class":393},"  \u002F\u002F4字节(32位的话)\n",[68,6779,6780,6782,6784,6787,6789,6791,6793,6795,6797,6799,6801],{"class":70,"line":1819},[68,6781,6734],{"class":335},[68,6783,1376],{"class":331},[68,6785,6786],{"class":78},"\"sizeof(char *)\"",[68,6788,1580],{"class":331},[68,6790,336],{"class":335},[68,6792,431],{"class":331},[68,6794,6723],{"class":331},[68,6796,762],{"class":335},[68,6798,1376],{"class":331},[68,6800,1446],{"class":335},[68,6802,6803],{"class":393}," \u002F\u002F4字节(32位的话)\n",[68,6805,6806],{"class":70,"line":1824},[68,6807,1772],{"class":335},[14,6809,6811],{"id":6810},"_33空指针","3.3空指针",[19,6813,6814],{},"空指针：指针变量指向内存中编号为0的空间",[19,6816,6817],{},"用途：初始化指针变量",[19,6819,6820],{},"注意：空指针指向的内存是不可以访问的",[58,6822,6824],{"className":322,"code":6823,"language":324,"meta":63,"style":63},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[65,6825,6826,6834,6838,6843,6857,6862,6877,6882],{"__ignoreMap":63},[68,6827,6828,6830,6832],{"class":70,"line":71},[68,6829,339],{"class":331},[68,6831,2179],{"class":74},[68,6833,2182],{"class":335},[68,6835,6836],{"class":70,"line":92},[68,6837,1753],{"class":335},[68,6839,6840],{"class":70,"line":1387},[68,6841,6842],{"class":393},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[68,6844,6845,6847,6849,6851,6853,6855],{"class":70,"line":1402},[68,6846,2191],{"class":331},[68,6848,6723],{"class":331},[68,6850,19],{"class":335},[68,6852,381],{"class":331},[68,6854,2598],{"class":82},[68,6856,1498],{"class":335},[68,6858,6859],{"class":70,"line":1408},[68,6860,6861],{"class":393},"    \u002F\u002F2.空指针不能进行访问\n",[68,6863,6864,6866,6868,6870,6872,6874],{"class":70,"line":1422},[68,6865,6608],{"class":331},[68,6867,19],{"class":335},[68,6869,381],{"class":331},[68,6871,644],{"class":82},[68,6873,390],{"class":335},[68,6875,6876],{"class":393},"\u002F\u002F直接报错，压根不能访问\n",[68,6878,6879],{"class":70,"line":1428},[68,6880,6881],{"class":393},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[68,6883,6884],{"class":70,"line":1519},[68,6885,1772],{"class":335},[14,6887,6889],{"id":6888},"_34野指针","3.4野指针",[19,6891,6892],{},[483,6893,6894],{},"指针变量指向非法的内存空间",[58,6896,6898],{"className":322,"code":6897,"language":324,"meta":63,"style":63},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[65,6899,6900,6908,6912,6941,6946,6958],{"__ignoreMap":63},[68,6901,6902,6904,6906],{"class":70,"line":71},[68,6903,339],{"class":331},[68,6905,2179],{"class":74},[68,6907,2182],{"class":335},[68,6909,6910],{"class":70,"line":92},[68,6911,1753],{"class":335},[68,6913,6914,6916,6918,6920,6922,6924,6926,6928,6930,6933,6936,6938],{"class":70,"line":1387},[68,6915,2191],{"class":331},[68,6917,6723],{"class":331},[68,6919,19],{"class":335},[68,6921,381],{"class":331},[68,6923,336],{"class":335},[68,6925,339],{"class":331},[68,6927,6723],{"class":331},[68,6929,762],{"class":335},[68,6931,6932],{"class":331},"0x",[68,6934,6935],{"class":82},"1100",[68,6937,390],{"class":335},[68,6939,6940],{"class":393}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[68,6942,6943],{"class":70,"line":1402},[68,6944,6945],{"class":393},"    \u002F\u002F访问野指针报错\n",[68,6947,6948,6950,6952,6954,6956],{"class":70,"line":1408},[68,6949,1758],{"class":335},[68,6951,6624],{"class":331},[68,6953,19],{"class":335},[68,6955,1376],{"class":331},[68,6957,1399],{"class":335},[68,6959,6960],{"class":70,"line":1422},[68,6961,1772],{"class":335},[19,6963,6964],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6966,6968],{"id":6967},"_35const修饰指针","3.5const修饰指针",[19,6970,6971],{},"三种情况：",[42,6973,6974,6977,6980],{},[26,6975,6976],{},"const修饰指针 常量指针",[26,6978,6979],{},"const修饰常量 指针常量",[26,6981,6982],{},"const即修饰指针，又修饰常量",[23,6984,6985],{},[26,6986,6987],{},"常量指针",[58,6989,6991],{"className":322,"code":6990,"language":324,"meta":63,"style":63},"const int *p=&a;\n",[65,6992,6993],{"__ignoreMap":63},[68,6994,6995,6998,7000,7002,7004,7006],{"class":70,"line":71},[68,6996,6997],{"class":331},"const",[68,6999,2588],{"class":331},[68,7001,6723],{"class":331},[68,7003,19],{"class":335},[68,7005,6544],{"class":331},[68,7007,6402],{"class":335},[19,7009,7010],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[23,7012,7013],{"start":92},[26,7014,7015],{},"指针常量",[58,7017,7019],{"className":322,"code":7018,"language":324,"meta":63,"style":63},"int *const p=&a;\n",[65,7020,7021],{"__ignoreMap":63},[68,7022,7023,7025,7028,7031,7033],{"class":70,"line":71},[68,7024,339],{"class":331},[68,7026,7027],{"class":331}," *const",[68,7029,7030],{"class":335}," p",[68,7032,6544],{"class":331},[68,7034,6402],{"class":335},[19,7036,7037],{},"指针的指向不可以改，指针指向的值可以改",[23,7039,7040],{"start":1387},[26,7041,6982],{},[58,7043,7045],{"className":322,"code":7044,"language":324,"meta":63,"style":63},"const int *const p=&a;\n",[65,7046,7047],{"__ignoreMap":63},[68,7048,7049,7051,7053,7055,7057,7059],{"class":70,"line":71},[68,7050,6997],{"class":331},[68,7052,2588],{"class":331},[68,7054,7027],{"class":331},[68,7056,7030],{"class":335},[68,7058,6544],{"class":331},[68,7060,6402],{"class":335},[19,7062,7063],{},"指针的指向和指针指向的值都不可以改变",[14,7065,7067],{"id":7066},"_36指针和数组","3.6指针和数组",[58,7069,7071],{"className":322,"code":7070,"language":324,"meta":63,"style":63},"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",[65,7072,7073,7081,7085,7090,7144,7165,7181,7197,7208,7225,7230,7244,7270,7274,7286,7295,7299],{"__ignoreMap":63},[68,7074,7075,7077,7079],{"class":70,"line":71},[68,7076,339],{"class":331},[68,7078,2179],{"class":74},[68,7080,2182],{"class":335},[68,7082,7083],{"class":70,"line":92},[68,7084,1753],{"class":335},[68,7086,7087],{"class":70,"line":1387},[68,7088,7089],{"class":393},"    \u002F\u002F利用指针访问数组中的元素\n",[68,7091,7092,7094,7096,7098,7100,7102,7104,7106,7108,7110,7112,7114,7116,7118,7120,7122,7124,7126,7128,7130,7132,7134,7136,7138,7140,7142],{"class":70,"line":1402},[68,7093,2191],{"class":331},[68,7095,4168],{"class":335},[68,7097,779],{"class":82},[68,7099,1273],{"class":335},[68,7101,381],{"class":331},[68,7103,1229],{"class":335},[68,7105,551],{"class":82},[68,7107,711],{"class":335},[68,7109,412],{"class":82},[68,7111,711],{"class":335},[68,7113,406],{"class":82},[68,7115,711],{"class":335},[68,7117,626],{"class":82},[68,7119,711],{"class":335},[68,7121,652],{"class":82},[68,7123,711],{"class":335},[68,7125,677],{"class":82},[68,7127,711],{"class":335},[68,7129,702],{"class":82},[68,7131,711],{"class":335},[68,7133,728],{"class":82},[68,7135,711],{"class":335},[68,7137,753],{"class":82},[68,7139,711],{"class":335},[68,7141,779],{"class":82},[68,7143,4201],{"class":335},[68,7145,7146,7148,7150,7153,7155,7157,7159,7161,7163],{"class":70,"line":1408},[68,7147,1758],{"class":335},[68,7149,1376],{"class":331},[68,7151,7152],{"class":78},"\"数组的第一个元素为：\"",[68,7154,1376],{"class":331},[68,7156,4112],{"class":335},[68,7158,525],{"class":82},[68,7160,1273],{"class":335},[68,7162,1376],{"class":331},[68,7164,1399],{"class":335},[68,7166,7167,7169,7171,7173,7175,7178],{"class":70,"line":1422},[68,7168,2191],{"class":331},[68,7170,6723],{"class":331},[68,7172,19],{"class":335},[68,7174,381],{"class":331},[68,7176,7177],{"class":335},"arr;",[68,7179,7180],{"class":393},"\u002F\u002F注意数才要加取地址符号&\n",[68,7182,7183,7185,7187,7189,7191,7193,7195],{"class":70,"line":1428},[68,7184,1758],{"class":335},[68,7186,1376],{"class":331},[68,7188,7152],{"class":78},[68,7190,6624],{"class":331},[68,7192,19],{"class":335},[68,7194,1376],{"class":331},[68,7196,1399],{"class":335},[68,7198,7199,7201,7203,7205],{"class":70,"line":1519},[68,7200,6541],{"class":335},[68,7202,2498],{"class":331},[68,7204,390],{"class":335},[68,7206,7207],{"class":393}," \u002F\u002F让指针向后偏移4个字节\n",[68,7209,7210,7212,7214,7217,7219,7221,7223],{"class":70,"line":1525},[68,7211,1758],{"class":335},[68,7213,1376],{"class":331},[68,7215,7216],{"class":78},"\"数组的第二个元素为：\"",[68,7218,6624],{"class":331},[68,7220,19],{"class":335},[68,7222,1376],{"class":331},[68,7224,1399],{"class":335},[68,7226,7227],{"class":70,"line":1537},[68,7228,7229],{"class":393},"    \u002F\u002F利用指针遍历数组\n",[68,7231,7232,7234,7236,7239,7241],{"class":70,"line":1819},[68,7233,2191],{"class":331},[68,7235,6723],{"class":331},[68,7237,7238],{"class":335},"p2",[68,7240,381],{"class":331},[68,7242,7243],{"class":335},"arr;\n",[68,7245,7246,7248,7250,7252,7254,7256,7258,7260,7262,7264,7266,7268],{"class":70,"line":1824},[68,7247,3407],{"class":331},[68,7249,1865],{"class":335},[68,7251,339],{"class":331},[68,7253,3238],{"class":335},[68,7255,381],{"class":331},[68,7257,525],{"class":82},[68,7259,3245],{"class":335},[68,7261,1243],{"class":331},[68,7263,779],{"class":82},[68,7265,3245],{"class":335},[68,7267,2498],{"class":331},[68,7269,342],{"class":335},[68,7271,7272],{"class":70,"line":1830},[68,7273,2236],{"class":335},[68,7275,7276,7278,7280,7282,7284],{"class":70,"line":1835},[68,7277,3657],{"class":335},[68,7279,6624],{"class":331},[68,7281,7238],{"class":335},[68,7283,1376],{"class":331},[68,7285,1399],{"class":335},[68,7287,7288,7291,7293],{"class":70,"line":1849},[68,7289,7290],{"class":335},"        p2",[68,7292,2498],{"class":331},[68,7294,1498],{"class":335},[68,7296,7297],{"class":70,"line":1854},[68,7298,2393],{"class":335},[68,7300,7301],{"class":70,"line":1860},[68,7302,1772],{"class":335},[14,7304,7306],{"id":7305},"_37指针和函数","3.7指针和函数",[19,7308,7309],{},"利用指针做函数参数，可以修改实参的值",[19,7311,7312],{},"值传递：只改变形参，不改变实参",[19,7314,7315],{},"地址传递：",[58,7317,7319],{"className":322,"code":7318,"language":324,"meta":63,"style":63},"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",[65,7320,7321,7346,7350,7362,7373,7383,7387,7395,7399,7411,7423,7428,7444,7459,7474],{"__ignoreMap":63},[68,7322,7323,7325,7327,7329,7331,7333,7336,7338,7340,7342,7344],{"class":70,"line":71},[68,7324,5569],{"class":331},[68,7326,5572],{"class":74},[68,7328,336],{"class":335},[68,7330,339],{"class":331},[68,7332,6723],{"class":331},[68,7334,7335],{"class":5421},"p1",[68,7337,711],{"class":335},[68,7339,339],{"class":331},[68,7341,6723],{"class":331},[68,7343,7238],{"class":5421},[68,7345,342],{"class":335},[68,7347,7348],{"class":70,"line":92},[68,7349,1753],{"class":335},[68,7351,7352,7354,7356,7359],{"class":70,"line":1387},[68,7353,2191],{"class":331},[68,7355,4461],{"class":335},[68,7357,7358],{"class":331},"=*",[68,7360,7361],{"class":335},"p1;\n",[68,7363,7364,7366,7368,7370],{"class":70,"line":1402},[68,7365,6608],{"class":331},[68,7367,7335],{"class":335},[68,7369,7358],{"class":331},[68,7371,7372],{"class":335},"p2;\n",[68,7374,7375,7377,7379,7381],{"class":70,"line":1408},[68,7376,6608],{"class":331},[68,7378,7238],{"class":335},[68,7380,381],{"class":331},[68,7382,4486],{"class":335},[68,7384,7385],{"class":70,"line":1422},[68,7386,1772],{"class":335},[68,7388,7389,7391,7393],{"class":70,"line":1428},[68,7390,339],{"class":331},[68,7392,2179],{"class":74},[68,7394,2182],{"class":335},[68,7396,7397],{"class":70,"line":1519},[68,7398,1753],{"class":335},[68,7400,7401,7403,7405,7407,7409],{"class":70,"line":1525},[68,7402,2191],{"class":331},[68,7404,1606],{"class":335},[68,7406,381],{"class":331},[68,7408,779],{"class":82},[68,7410,1498],{"class":335},[68,7412,7413,7415,7417,7419,7421],{"class":70,"line":1537},[68,7414,2191],{"class":331},[68,7416,3039],{"class":335},[68,7418,381],{"class":331},[68,7420,1033],{"class":82},[68,7422,1498],{"class":335},[68,7424,7425],{"class":70,"line":1819},[68,7426,7427],{"class":393},"    \u002F\u002F地址传递\n",[68,7429,7430,7432,7434,7436,7439,7441],{"class":70,"line":1824},[68,7431,5766],{"class":74},[68,7433,336],{"class":335},[68,7435,686],{"class":331},[68,7437,7438],{"class":335},"a,",[68,7440,686],{"class":331},[68,7442,7443],{"class":335},"b);\n",[68,7445,7446,7448,7450,7452,7454,7456],{"class":70,"line":1830},[68,7447,1758],{"class":335},[68,7449,1376],{"class":331},[68,7451,30],{"class":335},[68,7453,1376],{"class":331},[68,7455,1446],{"class":335},[68,7457,7458],{"class":393},"\u002F\u002F20\n",[68,7460,7461,7463,7465,7467,7469,7471],{"class":70,"line":1835},[68,7462,1758],{"class":335},[68,7464,1376],{"class":331},[68,7466,596],{"class":335},[68,7468,1376],{"class":331},[68,7470,1446],{"class":335},[68,7472,7473],{"class":393},"\u002F\u002F10\n",[68,7475,7476],{"class":70,"line":1849},[68,7477,1772],{"class":335},[19,7479,7480],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7482,7484],{"id":7483},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7486,7487],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7489,7490,7491,7493],{},"例如数组：int arr",[68,7492,779],{},"={4,3,6,9,1,2,10,8,7,5}",[58,7495,7497],{"className":322,"code":7496,"language":324,"meta":63,"style":63},"#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",[65,7498,7499,7505,7515,7539,7543,7574,7578,7612,7616,7634,7638,7649,7664,7679,7683,7687,7691,7695,7699,7707,7711,7716,7770,7782,7794,7799,7807,7811,7816,7841,7845,7860,7869,7873],{"__ignoreMap":63},[68,7500,7501,7503],{"class":70,"line":71},[68,7502,2156],{"class":331},[68,7504,2159],{"class":78},[68,7506,7507,7509,7511,7513],{"class":70,"line":92},[68,7508,2164],{"class":331},[68,7510,2167],{"class":331},[68,7512,2170],{"class":74},[68,7514,1498],{"class":335},[68,7516,7517,7519,7522,7524,7526,7528,7530,7532,7534,7537],{"class":70,"line":1387},[68,7518,5569],{"class":331},[68,7520,7521],{"class":74}," bubbleSort",[68,7523,336],{"class":335},[68,7525,339],{"class":331},[68,7527,6723],{"class":331},[68,7529,19],{"class":5421},[68,7531,711],{"class":335},[68,7533,339],{"class":331},[68,7535,7536],{"class":5421}," len",[68,7538,342],{"class":335},[68,7540,7541],{"class":70,"line":1402},[68,7542,1753],{"class":335},[68,7544,7545,7547,7549,7551,7553,7555,7557,7559,7561,7564,7566,7568,7570,7572],{"class":70,"line":1408},[68,7546,3407],{"class":331},[68,7548,336],{"class":335},[68,7550,339],{"class":331},[68,7552,3238],{"class":335},[68,7554,381],{"class":331},[68,7556,525],{"class":82},[68,7558,3245],{"class":335},[68,7560,1243],{"class":331},[68,7562,7563],{"class":335},"len",[68,7565,865],{"class":331},[68,7567,551],{"class":82},[68,7569,3245],{"class":335},[68,7571,2498],{"class":331},[68,7573,342],{"class":335},[68,7575,7576],{"class":70,"line":1422},[68,7577,2236],{"class":335},[68,7579,7580,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610],{"class":70,"line":1428},[68,7581,3609],{"class":331},[68,7583,336],{"class":335},[68,7585,339],{"class":331},[68,7587,3616],{"class":335},[68,7589,381],{"class":331},[68,7591,525],{"class":82},[68,7593,3623],{"class":335},[68,7595,1243],{"class":331},[68,7597,7563],{"class":335},[68,7599,865],{"class":331},[68,7601,774],{"class":335},[68,7603,865],{"class":331},[68,7605,551],{"class":82},[68,7607,3623],{"class":335},[68,7609,2498],{"class":331},[68,7611,342],{"class":335},[68,7613,7614],{"class":70,"line":1519},[68,7615,2716],{"class":335},[68,7617,7618,7620,7623,7625,7628,7630,7632],{"class":70,"line":1525},[68,7619,4848],{"class":331},[68,7621,7622],{"class":335},"(p[j]",[68,7624,1293],{"class":331},[68,7626,7627],{"class":335},"p[j",[68,7629,814],{"class":331},[68,7631,551],{"class":82},[68,7633,4863],{"class":335},[68,7635,7636],{"class":70,"line":1537},[68,7637,4868],{"class":335},[68,7639,7640,7642,7644,7646],{"class":70,"line":1819},[68,7641,4873],{"class":331},[68,7643,4461],{"class":335},[68,7645,381],{"class":331},[68,7647,7648],{"class":335},"p[j];\n",[68,7650,7651,7654,7656,7658,7660,7662],{"class":70,"line":1824},[68,7652,7653],{"class":335},"                p[j]",[68,7655,381],{"class":331},[68,7657,7627],{"class":335},[68,7659,814],{"class":331},[68,7661,551],{"class":82},[68,7663,4896],{"class":335},[68,7665,7666,7669,7671,7673,7675,7677],{"class":70,"line":1830},[68,7667,7668],{"class":335},"                p[j",[68,7670,814],{"class":331},[68,7672,551],{"class":82},[68,7674,1273],{"class":335},[68,7676,381],{"class":331},[68,7678,4486],{"class":335},[68,7680,7681],{"class":70,"line":1835},[68,7682,4916],{"class":335},[68,7684,7685],{"class":70,"line":1849},[68,7686,2735],{"class":335},[68,7688,7689],{"class":70,"line":1854},[68,7690,2393],{"class":335},[68,7692,7693],{"class":70,"line":1860},[68,7694,1772],{"class":335},[68,7696,7697],{"class":70,"line":1881},[68,7698,2606],{"emptyLinePlaceholder":260},[68,7700,7701,7703,7705],{"class":70,"line":1886},[68,7702,339],{"class":331},[68,7704,2179],{"class":74},[68,7706,2182],{"class":335},[68,7708,7709],{"class":70,"line":1900},[68,7710,1753],{"class":335},[68,7712,7713],{"class":70,"line":1905},[68,7714,7715],{"class":393},"    \u002F\u002F 1.创建数组\n",[68,7717,7718,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738,7740,7742,7744,7746,7748,7750,7752,7754,7756,7758,7760,7762,7764,7766,7768],{"class":70,"line":1934},[68,7719,2191],{"class":331},[68,7721,4168],{"class":335},[68,7723,779],{"class":82},[68,7725,1273],{"class":335},[68,7727,381],{"class":331},[68,7729,1229],{"class":335},[68,7731,626],{"class":82},[68,7733,711],{"class":335},[68,7735,406],{"class":82},[68,7737,711],{"class":335},[68,7739,677],{"class":82},[68,7741,711],{"class":335},[68,7743,753],{"class":82},[68,7745,711],{"class":335},[68,7747,551],{"class":82},[68,7749,711],{"class":335},[68,7751,412],{"class":82},[68,7753,711],{"class":335},[68,7755,779],{"class":82},[68,7757,711],{"class":335},[68,7759,728],{"class":82},[68,7761,711],{"class":335},[68,7763,702],{"class":82},[68,7765,711],{"class":335},[68,7767,652],{"class":82},[68,7769,4201],{"class":335},[68,7771,7772,7774,7776,7778,7780],{"class":70,"line":1939},[68,7773,2191],{"class":331},[68,7775,7536],{"class":335},[68,7777,381],{"class":331},[68,7779,779],{"class":82},[68,7781,1498],{"class":335},[68,7783,7784,7786,7788,7790,7792],{"class":70,"line":1956},[68,7785,2191],{"class":331},[68,7787,6723],{"class":331},[68,7789,19],{"class":335},[68,7791,381],{"class":331},[68,7793,7243],{"class":335},[68,7795,7796],{"class":70,"line":1961},[68,7797,7798],{"class":393},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[68,7800,7801,7804],{"class":70,"line":1966},[68,7802,7803],{"class":74},"    bubbleSort",[68,7805,7806],{"class":335},"(p,len);\n",[68,7808,7809],{"class":70,"line":1971},[68,7810,2606],{"emptyLinePlaceholder":260},[68,7812,7813],{"class":70,"line":1985},[68,7814,7815],{"class":393},"    \u002F\u002F 3.打印排序后的数组\n",[68,7817,7818,7820,7822,7824,7826,7828,7830,7832,7834,7837,7839],{"class":70,"line":1990},[68,7819,3407],{"class":331},[68,7821,1865],{"class":335},[68,7823,339],{"class":331},[68,7825,3238],{"class":335},[68,7827,381],{"class":331},[68,7829,525],{"class":82},[68,7831,3420],{"class":335},[68,7833,1243],{"class":331},[68,7835,7836],{"class":335},"len; i",[68,7838,2498],{"class":331},[68,7840,342],{"class":335},[68,7842,7843],{"class":70,"line":2783},[68,7844,2236],{"class":335},[68,7846,7847,7849,7851,7853,7855,7858],{"class":70,"line":2797},[68,7848,3657],{"class":335},[68,7850,6624],{"class":331},[68,7852,19],{"class":335},[68,7854,1376],{"class":331},[68,7856,7857],{"class":78},"\"\"",[68,7859,1498],{"class":335},[68,7861,7862,7865,7867],{"class":70,"line":2805},[68,7863,7864],{"class":335},"        p",[68,7866,2498],{"class":331},[68,7868,1498],{"class":335},[68,7870,7871],{"class":70,"line":2810},[68,7872,2393],{"class":335},[68,7874,7875],{"class":70,"line":2816},[68,7876,1772],{"class":335},[250,7878,7879],{},"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":63,"searchDepth":92,"depth":92,"links":7881},[7882,7883,7884,7885,7886,7887,7888,7889],{"id":6488,"depth":92,"text":6489},{"id":6654,"depth":92,"text":6655},{"id":6810,"depth":92,"text":6811},{"id":6888,"depth":92,"text":6889},{"id":6967,"depth":92,"text":6968},{"id":7066,"depth":92,"text":7067},{"id":7305,"depth":92,"text":7306},{"id":7483,"depth":92,"text":7484},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6477,"description":6485},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7896,"title":7897,"body":7898,"description":7905,"extension":258,"meta":10879,"navigation":260,"path":10880,"seo":10881,"stem":10882,"__hash__":10883},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7899,"toc":10870},[7900,7903,7906,7910,7913,7916,7927,8265,8268,8272,8275,8282,8537,8541,8544,8547,8702,8706,8709,8712,8918,8922,8925,9228,9231,9239,9243,9246,9397,9399,9410,9467,9471,9476,10133,10141,10144,10238,10241,10861,10867],[10,7901,7897],{"id":7902},"_4结构体",[19,7904,7905],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7907,7909],{"id":7908},"_41结构体定义与使用","4.1结构体定义与使用",[19,7911,7912],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7914,7915],{},"通过结构体创建变量的方式：",[42,7917,7918,7921,7924],{},[26,7919,7920],{},"struct 结构体名 变量名",[26,7922,7923],{},"struct 结构体名 变量名={成员1值，成员2值...}",[26,7925,7926],{},"定义结构体时顺便创建变量",[58,7928,7930],{"className":322,"code":7929,"language":324,"meta":63,"style":63},"#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",[65,7931,7932,7938,7948,7955,7960,7968,7972,7977,7981,7986,7991,7996,8003,8008,8015,8019,8026,8030,8034,8038,8042,8046,8050,8056,8060,8066,8074,8082,8086,8091,8096,8107,8112,8124,8135,8146,8151,8175,8180,8186,8213,8218,8224,8236,8248,8260],{"__ignoreMap":63},[68,7933,7934,7936],{"class":70,"line":71},[68,7935,2156],{"class":331},[68,7937,2159],{"class":78},[68,7939,7940,7942,7944,7946],{"class":70,"line":92},[68,7941,2164],{"class":331},[68,7943,2167],{"class":331},[68,7945,2170],{"class":74},[68,7947,1498],{"class":335},[68,7949,7950,7952],{"class":70,"line":1387},[68,7951,2156],{"class":331},[68,7953,7954],{"class":78},"\u003Cstring>\n",[68,7956,7957],{"class":70,"line":1402},[68,7958,7959],{"class":393},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[68,7961,7962,7965],{"class":70,"line":1408},[68,7963,7964],{"class":331},"struct",[68,7966,7967],{"class":74}," Student\n",[68,7969,7970],{"class":70,"line":1422},[68,7971,1753],{"class":335},[68,7973,7974],{"class":70,"line":1428},[68,7975,7976],{"class":393},"    \u002F\u002F成员列表\n",[68,7978,7979],{"class":70,"line":1519},[68,7980,2606],{"emptyLinePlaceholder":260},[68,7982,7983],{"class":70,"line":1525},[68,7984,7985],{"class":393},"    \u002F\u002F姓名\n",[68,7987,7988],{"class":70,"line":1537},[68,7989,7990],{"class":335},"    string name;\n",[68,7992,7993],{"class":70,"line":1819},[68,7994,7995],{"class":393},"    \u002F\u002F年龄\n",[68,7997,7998,8000],{"class":70,"line":1824},[68,7999,2191],{"class":331},[68,8001,8002],{"class":335}," age;\n",[68,8004,8005],{"class":70,"line":1830},[68,8006,8007],{"class":393},"    \u002F\u002F分数\n",[68,8009,8010,8012],{"class":70,"line":1835},[68,8011,2191],{"class":331},[68,8013,8014],{"class":335}," score;\n",[68,8016,8017],{"class":70,"line":1849},[68,8018,4201],{"class":335},[68,8020,8021,8023],{"class":70,"line":1854},[68,8022,7964],{"class":331},[68,8024,8025],{"class":74}," School\n",[68,8027,8028],{"class":70,"line":1860},[68,8029,1753],{"class":335},[68,8031,8032],{"class":70,"line":1881},[68,8033,7976],{"class":393},[68,8035,8036],{"class":70,"line":1886},[68,8037,2606],{"emptyLinePlaceholder":260},[68,8039,8040],{"class":70,"line":1900},[68,8041,7985],{"class":393},[68,8043,8044],{"class":70,"line":1905},[68,8045,7990],{"class":335},[68,8047,8048],{"class":70,"line":1934},[68,8049,7995],{"class":393},[68,8051,8052,8054],{"class":70,"line":1939},[68,8053,2191],{"class":331},[68,8055,8002],{"class":335},[68,8057,8058],{"class":70,"line":1956},[68,8059,8007],{"class":393},[68,8061,8062,8064],{"class":70,"line":1961},[68,8063,2191],{"class":331},[68,8065,8014],{"class":335},[68,8067,8068,8071],{"class":70,"line":1966},[68,8069,8070],{"class":335},"} s3;",[68,8072,8073],{"class":393}," \u002F\u002F创建结构体时就创建了变量\n",[68,8075,8076,8078,8080],{"class":70,"line":1971},[68,8077,339],{"class":331},[68,8079,2179],{"class":74},[68,8081,2182],{"class":335},[68,8083,8084],{"class":70,"line":1985},[68,8085,1753],{"class":335},[68,8087,8088],{"class":70,"line":1990},[68,8089,8090],{"class":393},"    \u002F\u002F2.通过学生类型创建具体学生\n",[68,8092,8093],{"class":70,"line":2783},[68,8094,8095],{"class":393},"    \u002F\u002F2.1 struct Student s1;\n",[68,8097,8098,8101,8104],{"class":70,"line":2797},[68,8099,8100],{"class":331},"    struct",[68,8102,8103],{"class":74}," Student",[68,8105,8106],{"class":335}," s1;\n",[68,8108,8109],{"class":70,"line":2805},[68,8110,8111],{"class":393},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[68,8113,8114,8117,8119,8122],{"class":70,"line":2810},[68,8115,8116],{"class":335},"    s1.name",[68,8118,381],{"class":331},[68,8120,8121],{"class":78},"\"张三\"",[68,8123,1498],{"class":335},[68,8125,8126,8129,8131,8133],{"class":70,"line":2816},[68,8127,8128],{"class":335},"    s1.age",[68,8130,381],{"class":331},[68,8132,983],{"class":82},[68,8134,1498],{"class":335},[68,8136,8137,8140,8142,8144],{"class":70,"line":2822},[68,8138,8139],{"class":335},"    s1.score",[68,8141,381],{"class":331},[68,8143,587],{"class":82},[68,8145,1498],{"class":335},[68,8147,8148],{"class":70,"line":2827},[68,8149,8150],{"class":393},"    \u002F\u002F输出结果\n",[68,8152,8154,8156,8158,8161,8163,8166,8168,8171,8173],{"class":70,"line":8153},37,[68,8155,1758],{"class":335},[68,8157,1376],{"class":331},[68,8159,8160],{"class":335},"s1.name",[68,8162,1376],{"class":331},[68,8164,8165],{"class":335},"s1.age",[68,8167,1376],{"class":331},[68,8169,8170],{"class":335},"s1.score",[68,8172,1376],{"class":331},[68,8174,1399],{"class":335},[68,8176,8178],{"class":70,"line":8177},38,[68,8179,2606],{"emptyLinePlaceholder":260},[68,8181,8183],{"class":70,"line":8182},39,[68,8184,8185],{"class":393},"    \u002F\u002F2.2 struct Student s2={...}\n",[68,8187,8189,8191,8193,8196,8198,8200,8203,8205,8207,8209,8211],{"class":70,"line":8188},40,[68,8190,8100],{"class":331},[68,8192,8103],{"class":74},[68,8194,8195],{"class":335}," s2",[68,8197,381],{"class":331},[68,8199,1229],{"class":335},[68,8201,8202],{"class":78},"\"王五\"",[68,8204,711],{"class":335},[68,8206,983],{"class":82},[68,8208,711],{"class":335},[68,8210,587],{"class":82},[68,8212,4201],{"class":335},[68,8214,8216],{"class":70,"line":8215},41,[68,8217,2606],{"emptyLinePlaceholder":260},[68,8219,8221],{"class":70,"line":8220},42,[68,8222,8223],{"class":393},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[68,8225,8227,8230,8232,8234],{"class":70,"line":8226},43,[68,8228,8229],{"class":335},"    s3.name",[68,8231,381],{"class":331},[68,8233,3884],{"class":78},[68,8235,1498],{"class":335},[68,8237,8239,8242,8244,8246],{"class":70,"line":8238},44,[68,8240,8241],{"class":335},"    s3.age",[68,8243,381],{"class":331},[68,8245,983],{"class":82},[68,8247,1498],{"class":335},[68,8249,8251,8254,8256,8258],{"class":70,"line":8250},45,[68,8252,8253],{"class":335},"    s3.score",[68,8255,381],{"class":331},[68,8257,1033],{"class":82},[68,8259,1498],{"class":335},[68,8261,8263],{"class":70,"line":8262},46,[68,8264,1772],{"class":335},[19,8266,8267],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8269,8271],{"id":8270},"_42结构体数组","4.2结构体数组",[19,8273,8274],{},"将自定义的结构体放入到数组中方便维护",[19,8276,8277,8278,8281],{},"语法：struct 结构体名 数组名",[68,8279,8280],{},"元素个数","={ {}，{},...{} };",[58,8283,8285],{"className":322,"code":8284,"language":324,"meta":63,"style":63},"#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",[65,8286,8287,8293,8303,8309,8314,8320,8324,8328,8334,8340,8344,8348,8356,8360,8365,8380,8384,8400,8416,8420,8425,8441,8456,8471,8476,8502,8506,8529,8533],{"__ignoreMap":63},[68,8288,8289,8291],{"class":70,"line":71},[68,8290,2156],{"class":331},[68,8292,2159],{"class":78},[68,8294,8295,8297,8299,8301],{"class":70,"line":92},[68,8296,2164],{"class":331},[68,8298,2167],{"class":331},[68,8300,2170],{"class":74},[68,8302,1498],{"class":335},[68,8304,8305,8307],{"class":70,"line":1387},[68,8306,2156],{"class":331},[68,8308,7954],{"class":78},[68,8310,8311],{"class":70,"line":1402},[68,8312,8313],{"class":393},"\u002F\u002F1.定义结构体\n",[68,8315,8316,8318],{"class":70,"line":1408},[68,8317,7964],{"class":331},[68,8319,7967],{"class":74},[68,8321,8322],{"class":70,"line":1422},[68,8323,1753],{"class":335},[68,8325,8326],{"class":70,"line":1428},[68,8327,7990],{"class":335},[68,8329,8330,8332],{"class":70,"line":1519},[68,8331,2191],{"class":331},[68,8333,8002],{"class":335},[68,8335,8336,8338],{"class":70,"line":1525},[68,8337,2191],{"class":331},[68,8339,8014],{"class":335},[68,8341,8342],{"class":70,"line":1537},[68,8343,2606],{"emptyLinePlaceholder":260},[68,8345,8346],{"class":70,"line":1819},[68,8347,4201],{"class":335},[68,8349,8350,8352,8354],{"class":70,"line":1824},[68,8351,339],{"class":331},[68,8353,2179],{"class":74},[68,8355,2182],{"class":335},[68,8357,8358],{"class":70,"line":1830},[68,8359,1753],{"class":335},[68,8361,8362],{"class":70,"line":1835},[68,8363,8364],{"class":393},"    \u002F\u002F2.创建结构体数组\n",[68,8366,8367,8369,8371,8374,8376,8378],{"class":70,"line":1849},[68,8368,8100],{"class":331},[68,8370,8103],{"class":74},[68,8372,8373],{"class":335}," stuArray[",[68,8375,412],{"class":82},[68,8377,1273],{"class":335},[68,8379,5114],{"class":331},[68,8381,8382],{"class":70,"line":1854},[68,8383,2236],{"class":335},[68,8385,8386,8388,8390,8392,8394,8396,8398],{"class":70,"line":1860},[68,8387,5123],{"class":335},[68,8389,8121],{"class":78},[68,8391,711],{"class":335},[68,8393,983],{"class":82},[68,8395,711],{"class":335},[68,8397,644],{"class":82},[68,8399,5136],{"class":335},[68,8401,8402,8404,8406,8408,8410,8412,8414],{"class":70,"line":1881},[68,8403,5123],{"class":335},[68,8405,3884],{"class":78},[68,8407,711],{"class":335},[68,8409,908],{"class":82},[68,8411,711],{"class":335},[68,8413,908],{"class":82},[68,8415,1772],{"class":335},[68,8417,8418],{"class":70,"line":1886},[68,8419,2393],{"class":335},[68,8421,8422],{"class":70,"line":1900},[68,8423,8424],{"class":393},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[68,8426,8427,8430,8432,8435,8437,8439],{"class":70,"line":1905},[68,8428,8429],{"class":335},"    stuArray[",[68,8431,551],{"class":82},[68,8433,8434],{"class":335},"].name",[68,8436,381],{"class":331},[68,8438,3907],{"class":78},[68,8440,1498],{"class":335},[68,8442,8443,8445,8447,8450,8452,8454],{"class":70,"line":1934},[68,8444,8429],{"class":335},[68,8446,551],{"class":82},[68,8448,8449],{"class":335},"].age",[68,8451,381],{"class":331},[68,8453,412],{"class":82},[68,8455,1498],{"class":335},[68,8457,8458,8460,8462,8465,8467,8469],{"class":70,"line":1939},[68,8459,8429],{"class":335},[68,8461,551],{"class":82},[68,8463,8464],{"class":335},"].score",[68,8466,381],{"class":331},[68,8468,412],{"class":82},[68,8470,1498],{"class":335},[68,8472,8473],{"class":70,"line":1956},[68,8474,8475],{"class":393},"    \u002F\u002F4.遍历结构体数组\n",[68,8477,8478,8480,8482,8484,8486,8488,8490,8492,8494,8496,8498,8500],{"class":70,"line":1961},[68,8479,3407],{"class":331},[68,8481,1865],{"class":335},[68,8483,339],{"class":331},[68,8485,3238],{"class":335},[68,8487,381],{"class":331},[68,8489,525],{"class":82},[68,8491,3245],{"class":335},[68,8493,1243],{"class":331},[68,8495,412],{"class":82},[68,8497,3245],{"class":335},[68,8499,2498],{"class":331},[68,8501,342],{"class":335},[68,8503,8504],{"class":70,"line":1966},[68,8505,2236],{"class":335},[68,8507,8508,8510,8512,8515,8517,8520,8522,8525,8527],{"class":70,"line":1971},[68,8509,3657],{"class":335},[68,8511,1376],{"class":331},[68,8513,8514],{"class":335},"stuArray[i].name",[68,8516,1376],{"class":331},[68,8518,8519],{"class":335},"stuArray[i].age",[68,8521,1376],{"class":331},[68,8523,8524],{"class":335},"stuArray[i].score",[68,8526,1376],{"class":331},[68,8528,1399],{"class":335},[68,8530,8531],{"class":70,"line":1985},[68,8532,2393],{"class":335},[68,8534,8535],{"class":70,"line":1990},[68,8536,1772],{"class":335},[14,8538,8540],{"id":8539},"_43结构体指针","4.3结构体指针",[19,8542,8543],{},"作用：通过指针访问结构体中的成员",[19,8545,8546],{},"利用操作符->可以通过结构体指针访问结构体属性",[58,8548,8550],{"className":322,"code":8549,"language":324,"meta":63,"style":63},"#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",[65,8551,8552,8558,8568,8574,8578,8584,8588,8592,8598,8604,8608,8616,8620,8625,8650,8655,8670,8675,8698],{"__ignoreMap":63},[68,8553,8554,8556],{"class":70,"line":71},[68,8555,2156],{"class":331},[68,8557,2159],{"class":78},[68,8559,8560,8562,8564,8566],{"class":70,"line":92},[68,8561,2164],{"class":331},[68,8563,2167],{"class":331},[68,8565,2170],{"class":74},[68,8567,1498],{"class":335},[68,8569,8570,8572],{"class":70,"line":1387},[68,8571,2156],{"class":331},[68,8573,7954],{"class":78},[68,8575,8576],{"class":70,"line":1402},[68,8577,8313],{"class":393},[68,8579,8580,8582],{"class":70,"line":1408},[68,8581,7964],{"class":331},[68,8583,7967],{"class":74},[68,8585,8586],{"class":70,"line":1422},[68,8587,1753],{"class":335},[68,8589,8590],{"class":70,"line":1428},[68,8591,7990],{"class":335},[68,8593,8594,8596],{"class":70,"line":1519},[68,8595,2191],{"class":331},[68,8597,8002],{"class":335},[68,8599,8600,8602],{"class":70,"line":1525},[68,8601,2191],{"class":331},[68,8603,8014],{"class":335},[68,8605,8606],{"class":70,"line":1537},[68,8607,4201],{"class":335},[68,8609,8610,8612,8614],{"class":70,"line":1819},[68,8611,339],{"class":331},[68,8613,2179],{"class":74},[68,8615,2182],{"class":335},[68,8617,8618],{"class":70,"line":1824},[68,8619,1753],{"class":335},[68,8621,8622],{"class":70,"line":1830},[68,8623,8624],{"class":393},"    \u002F\u002F创建学生结构体变量\n",[68,8626,8627,8629,8631,8634,8636,8638,8640,8642,8644,8646,8648],{"class":70,"line":1835},[68,8628,8100],{"class":331},[68,8630,8103],{"class":74},[68,8632,8633],{"class":335}," s",[68,8635,381],{"class":331},[68,8637,1229],{"class":335},[68,8639,8121],{"class":78},[68,8641,711],{"class":335},[68,8643,983],{"class":82},[68,8645,711],{"class":335},[68,8647,1929],{"class":82},[68,8649,4201],{"class":335},[68,8651,8652],{"class":70,"line":1849},[68,8653,8654],{"class":393},"    \u002F\u002F通过指针指向结构体变量\n",[68,8656,8657,8659,8661,8663,8665,8667],{"class":70,"line":1854},[68,8658,8100],{"class":331},[68,8660,8103],{"class":74},[68,8662,6723],{"class":331},[68,8664,19],{"class":335},[68,8666,6544],{"class":331},[68,8668,8669],{"class":335},"s\n",[68,8671,8672],{"class":70,"line":1860},[68,8673,8674],{"class":393},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[68,8676,8677,8679,8681,8684,8686,8689,8691,8694,8696],{"class":70,"line":1881},[68,8678,1758],{"class":335},[68,8680,1376],{"class":331},[68,8682,8683],{"class":335},"p->name",[68,8685,1376],{"class":331},[68,8687,8688],{"class":335},"p->age",[68,8690,1376],{"class":331},[68,8692,8693],{"class":335},"p->score",[68,8695,1376],{"class":331},[68,8697,1399],{"class":335},[68,8699,8700],{"class":70,"line":1886},[68,8701,1772],{"class":335},[14,8703,8705],{"id":8704},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8707,8708],{},"作用：结构体中的成员可以是另一个结构体",[19,8710,8711],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[58,8713,8715],{"className":322,"code":8714,"language":324,"meta":63,"style":63},"#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",[65,8716,8717,8723,8733,8739,8744,8752,8756,8760,8766,8772,8776,8781,8788,8792,8799,8803,8809,8814,8818,8826,8830,8835,8840,8845,8856,8868,8879,8892,8903,8914],{"__ignoreMap":63},[68,8718,8719,8721],{"class":70,"line":71},[68,8720,2156],{"class":331},[68,8722,2159],{"class":78},[68,8724,8725,8727,8729,8731],{"class":70,"line":92},[68,8726,2164],{"class":331},[68,8728,2167],{"class":331},[68,8730,2170],{"class":74},[68,8732,1498],{"class":335},[68,8734,8735,8737],{"class":70,"line":1387},[68,8736,2156],{"class":331},[68,8738,7954],{"class":78},[68,8740,8741],{"class":70,"line":1402},[68,8742,8743],{"class":393},"\u002F\u002F定义学生结构体\n",[68,8745,8746,8748,8750],{"class":70,"line":1408},[68,8747,7964],{"class":331},[68,8749,8103],{"class":74},[68,8751,2880],{"class":335},[68,8753,8754],{"class":70,"line":1422},[68,8755,1753],{"class":335},[68,8757,8758],{"class":70,"line":1428},[68,8759,7990],{"class":335},[68,8761,8762,8764],{"class":70,"line":1519},[68,8763,2191],{"class":331},[68,8765,8002],{"class":335},[68,8767,8768,8770],{"class":70,"line":1525},[68,8769,2191],{"class":331},[68,8771,8014],{"class":335},[68,8773,8774],{"class":70,"line":1537},[68,8775,1772],{"class":335},[68,8777,8778],{"class":70,"line":1819},[68,8779,8780],{"class":393},"\u002F\u002F定义老师结构体\n",[68,8782,8783,8785],{"class":70,"line":1824},[68,8784,7964],{"class":331},[68,8786,8787],{"class":74}," Teacher\n",[68,8789,8790],{"class":70,"line":1830},[68,8791,1753],{"class":335},[68,8793,8794,8796],{"class":70,"line":1835},[68,8795,2191],{"class":331},[68,8797,8798],{"class":335}," id;\n",[68,8800,8801],{"class":70,"line":1849},[68,8802,7990],{"class":335},[68,8804,8805,8807],{"class":70,"line":1854},[68,8806,2191],{"class":331},[68,8808,8002],{"class":335},[68,8810,8811],{"class":70,"line":1860},[68,8812,8813],{"class":335},"    Student stu;\n",[68,8815,8816],{"class":70,"line":1881},[68,8817,1772],{"class":335},[68,8819,8820,8822,8824],{"class":70,"line":1886},[68,8821,339],{"class":331},[68,8823,2179],{"class":74},[68,8825,6183],{"class":335},[68,8827,8828],{"class":70,"line":1900},[68,8829,1753],{"class":335},[68,8831,8832],{"class":70,"line":1905},[68,8833,8834],{"class":393},"    \u002F\u002F结构体嵌套结构体\n",[68,8836,8837],{"class":70,"line":1934},[68,8838,8839],{"class":393},"    \u002F\u002F创建老师\n",[68,8841,8842],{"class":70,"line":1939},[68,8843,8844],{"class":335},"    Teacher t;\n",[68,8846,8847,8850,8852,8854],{"class":70,"line":1956},[68,8848,8849],{"class":335},"    t.id",[68,8851,381],{"class":331},[68,8853,644],{"class":82},[68,8855,1498],{"class":335},[68,8857,8858,8861,8863,8866],{"class":70,"line":1961},[68,8859,8860],{"class":335},"    t.name",[68,8862,381],{"class":331},[68,8864,8865],{"class":78},"\"老王\"",[68,8867,1498],{"class":335},[68,8869,8870,8873,8875,8877],{"class":70,"line":1966},[68,8871,8872],{"class":335},"    t.age",[68,8874,381],{"class":331},[68,8876,983],{"class":82},[68,8878,1498],{"class":335},[68,8880,8881,8884,8886,8889],{"class":70,"line":1971},[68,8882,8883],{"class":335},"    t.stu.name",[68,8885,381],{"class":331},[68,8887,8888],{"class":78},"\"小王\"",[68,8890,8891],{"class":335},"；\n",[68,8893,8894,8897,8899,8901],{"class":70,"line":1985},[68,8895,8896],{"class":335},"    t.stu.age",[68,8898,381],{"class":331},[68,8900,1033],{"class":82},[68,8902,1498],{"class":335},[68,8904,8905,8908,8910,8912],{"class":70,"line":1990},[68,8906,8907],{"class":335},"    t.stu.score",[68,8909,381],{"class":331},[68,8911,677],{"class":82},[68,8913,1498],{"class":335},[68,8915,8916],{"class":70,"line":2783},[68,8917,1772],{"class":335},[14,8919,8921],{"id":8920},"_45结构体做函数参数","4.5结构体做函数参数",[19,8923,8924],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[58,8926,8928],{"className":322,"code":8927,"language":324,"meta":63,"style":63},"#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",[65,8929,8930,8936,8946,8952,8958,8962,8966,8972,8978,8982,8987,8992,9009,9013,9046,9050,9055,9074,9078,9109,9113,9121,9125,9134,9146,9158,9170,9183,9191,9204,9216,9224],{"__ignoreMap":63},[68,8931,8932,8934],{"class":70,"line":71},[68,8933,2156],{"class":331},[68,8935,2159],{"class":78},[68,8937,8938,8940,8942,8944],{"class":70,"line":92},[68,8939,2164],{"class":331},[68,8941,2167],{"class":331},[68,8943,2170],{"class":74},[68,8945,1498],{"class":335},[68,8947,8948,8950],{"class":70,"line":1387},[68,8949,2156],{"class":331},[68,8951,7954],{"class":78},[68,8953,8954,8956],{"class":70,"line":1402},[68,8955,7964],{"class":331},[68,8957,7967],{"class":74},[68,8959,8960],{"class":70,"line":1408},[68,8961,1753],{"class":335},[68,8963,8964],{"class":70,"line":1422},[68,8965,7990],{"class":335},[68,8967,8968,8970],{"class":70,"line":1428},[68,8969,2191],{"class":331},[68,8971,8002],{"class":335},[68,8973,8974,8976],{"class":70,"line":1519},[68,8975,2191],{"class":331},[68,8977,8014],{"class":335},[68,8979,8980],{"class":70,"line":1525},[68,8981,4201],{"class":335},[68,8983,8984],{"class":70,"line":1537},[68,8985,8986],{"class":393},"\u002F\u002F打印学生信息的函数\n",[68,8988,8989],{"class":70,"line":1819},[68,8990,8991],{"class":393},"\u002F\u002F值传递\n",[68,8993,8994,8996,8999,9001,9003,9005,9007],{"class":70,"line":1824},[68,8995,5569],{"class":331},[68,8997,8998],{"class":74}," printStudent1",[68,9000,336],{"class":335},[68,9002,7964],{"class":331},[68,9004,8103],{"class":74},[68,9006,8633],{"class":5421},[68,9008,342],{"class":335},[68,9010,9011],{"class":70,"line":1830},[68,9012,1753],{"class":335},[68,9014,9015,9017,9019,9022,9024,9027,9029,9032,9034,9036,9038,9041,9043],{"class":70,"line":1835},[68,9016,6734],{"class":335},[68,9018,1376],{"class":331},[68,9020,9021],{"class":335}," s.name ",[68,9023,1376],{"class":331},[68,9025,9026],{"class":78}," \" \"",[68,9028,1652],{"class":331},[68,9030,9031],{"class":335}," s.age ",[68,9033,1376],{"class":331},[68,9035,9026],{"class":78},[68,9037,1652],{"class":331},[68,9039,9040],{"class":335}," s.score ",[68,9042,1376],{"class":331},[68,9044,9045],{"class":335}," endl;\n",[68,9047,9048],{"class":70,"line":1849},[68,9049,1772],{"class":335},[68,9051,9052],{"class":70,"line":1854},[68,9053,9054],{"class":393},"\u002F\u002F地址传递\n",[68,9056,9057,9059,9062,9064,9066,9068,9070,9072],{"class":70,"line":1860},[68,9058,5569],{"class":331},[68,9060,9061],{"class":74}," printStudent2",[68,9063,336],{"class":335},[68,9065,7964],{"class":331},[68,9067,8103],{"class":74},[68,9069,6723],{"class":331},[68,9071,1028],{"class":5421},[68,9073,342],{"class":335},[68,9075,9076],{"class":70,"line":1881},[68,9077,1753],{"class":335},[68,9079,9080,9082,9084,9087,9089,9091,9093,9096,9098,9100,9102,9105,9107],{"class":70,"line":1886},[68,9081,6734],{"class":335},[68,9083,1376],{"class":331},[68,9085,9086],{"class":335}," s->name ",[68,9088,1376],{"class":331},[68,9090,9026],{"class":78},[68,9092,1652],{"class":331},[68,9094,9095],{"class":335}," s->age ",[68,9097,1376],{"class":331},[68,9099,9026],{"class":78},[68,9101,1652],{"class":331},[68,9103,9104],{"class":335}," s->score ",[68,9106,1376],{"class":331},[68,9108,9045],{"class":335},[68,9110,9111],{"class":70,"line":1900},[68,9112,1772],{"class":335},[68,9114,9115,9117,9119],{"class":70,"line":1905},[68,9116,339],{"class":331},[68,9118,2179],{"class":74},[68,9120,2182],{"class":335},[68,9122,9123],{"class":70,"line":1934},[68,9124,1753],{"class":335},[68,9126,9127,9129,9131],{"class":70,"line":1939},[68,9128,8100],{"class":331},[68,9130,8103],{"class":74},[68,9132,9133],{"class":335}," s;\n",[68,9135,9136,9139,9141,9144],{"class":70,"line":1956},[68,9137,9138],{"class":335},"    s.name ",[68,9140,381],{"class":331},[68,9142,9143],{"class":78}," \"张三\"",[68,9145,1498],{"class":335},[68,9147,9148,9151,9153,9156],{"class":70,"line":1961},[68,9149,9150],{"class":335},"    s.age ",[68,9152,381],{"class":331},[68,9154,9155],{"class":82}," 20",[68,9157,1498],{"class":335},[68,9159,9160,9163,9165,9168],{"class":70,"line":1966},[68,9161,9162],{"class":335},"    s.score ",[68,9164,381],{"class":331},[68,9166,9167],{"class":82}," 85",[68,9169,1498],{"class":335},[68,9171,9172,9174,9176,9179,9181],{"class":70,"line":1971},[68,9173,1758],{"class":335},[68,9175,1376],{"class":331},[68,9177,9178],{"class":78},"\"值传递:\"",[68,9180,1376],{"class":331},[68,9182,1399],{"class":335},[68,9184,9185,9188],{"class":70,"line":1985},[68,9186,9187],{"class":74},"    printStudent1",[68,9189,9190],{"class":335},"(s);\n",[68,9192,9193,9195,9197,9200,9202],{"class":70,"line":1990},[68,9194,1758],{"class":335},[68,9196,1376],{"class":331},[68,9198,9199],{"class":78},"\"地址传递:\"",[68,9201,1376],{"class":331},[68,9203,1399],{"class":335},[68,9205,9206,9209,9211,9213],{"class":70,"line":2783},[68,9207,9208],{"class":74},"    printStudent2",[68,9210,336],{"class":335},[68,9212,686],{"class":331},[68,9214,9215],{"class":335},"s); \n",[68,9217,9218,9220,9222],{"class":70,"line":2797},[68,9219,4296],{"class":331},[68,9221,4299],{"class":82},[68,9223,1498],{"class":335},[68,9225,9226],{"class":70,"line":2805},[68,9227,1772],{"class":335},[19,9229,9230],{},"注意：",[42,9232,9233,9236],{},[26,9234,9235],{},"1.先定义结构体，不要在函数中写结构体的定义",[26,9237,9238],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9240,9242],{"id":9241},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9244,9245],{},"用const防止误操作",[58,9247,9249],{"className":322,"code":9248,"language":324,"meta":63,"style":63},"#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",[65,9250,9251,9257,9267,9273,9278,9282,9286,9292,9298,9302,9318,9322,9345,9349,9357,9361,9382,9389,9393],{"__ignoreMap":63},[68,9252,9253,9255],{"class":70,"line":71},[68,9254,2156],{"class":331},[68,9256,2159],{"class":78},[68,9258,9259,9261,9263,9265],{"class":70,"line":92},[68,9260,2164],{"class":331},[68,9262,2167],{"class":331},[68,9264,2170],{"class":74},[68,9266,1498],{"class":335},[68,9268,9269,9271],{"class":70,"line":1387},[68,9270,2156],{"class":331},[68,9272,7954],{"class":78},[68,9274,9275],{"class":70,"line":1402},[68,9276,9277],{"class":335},"sctuct Student\n",[68,9279,9280],{"class":70,"line":1408},[68,9281,1753],{"class":335},[68,9283,9284],{"class":70,"line":1422},[68,9285,7990],{"class":335},[68,9287,9288,9290],{"class":70,"line":1428},[68,9289,2191],{"class":331},[68,9291,8002],{"class":335},[68,9293,9294,9296],{"class":70,"line":1519},[68,9295,2191],{"class":331},[68,9297,8014],{"class":335},[68,9299,9300],{"class":70,"line":1525},[68,9301,4201],{"class":335},[68,9303,9304,9306,9309,9311,9314,9316],{"class":70,"line":1537},[68,9305,5569],{"class":331},[68,9307,9308],{"class":74}," printStudents",[68,9310,336],{"class":335},[68,9312,9313],{"class":74},"student",[68,9315,8633],{"class":5421},[68,9317,342],{"class":335},[68,9319,9320],{"class":70,"line":1819},[68,9321,1753],{"class":335},[68,9323,9324,9326,9328,9331,9333,9336,9338,9341,9343],{"class":70,"line":1824},[68,9325,1758],{"class":335},[68,9327,1376],{"class":331},[68,9329,9330],{"class":335},"s.name",[68,9332,1376],{"class":331},[68,9334,9335],{"class":335},"s.age",[68,9337,1376],{"class":331},[68,9339,9340],{"class":335},"s.score",[68,9342,1376],{"class":331},[68,9344,1399],{"class":335},[68,9346,9347],{"class":70,"line":1830},[68,9348,1772],{"class":335},[68,9350,9351,9353,9355],{"class":70,"line":1835},[68,9352,339],{"class":331},[68,9354,2179],{"class":74},[68,9356,6183],{"class":335},[68,9358,9359],{"class":70,"line":1849},[68,9360,1753],{"class":335},[68,9362,9363,9366,9368,9370,9372,9374,9376,9378,9380],{"class":70,"line":1854},[68,9364,9365],{"class":335},"    Student s",[68,9367,381],{"class":331},[68,9369,1229],{"class":335},[68,9371,8121],{"class":78},[68,9373,711],{"class":335},[68,9375,983],{"class":82},[68,9377,711],{"class":335},[68,9379,983],{"class":82},[68,9381,4201],{"class":335},[68,9383,9384,9387],{"class":70,"line":1860},[68,9385,9386],{"class":74},"    printStudent",[68,9388,9190],{"class":335},[68,9390,9391],{"class":70,"line":1881},[68,9392,2606],{"emptyLinePlaceholder":260},[68,9394,9395],{"class":70,"line":1886},[68,9396,1772],{"class":335},[19,9398,9230],{},[42,9400,9401,9404,9407],{},[26,9402,9403],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[26,9405,9406],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[26,9408,9409],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[58,9411,9413],{"className":322,"code":9412,"language":324,"meta":63,"style":63},"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",[65,9414,9415,9434,9438,9443,9463],{"__ignoreMap":63},[68,9416,9417,9419,9421,9423,9425,9428,9430,9432],{"class":70,"line":71},[68,9418,5569],{"class":331},[68,9420,9308],{"class":74},[68,9422,336],{"class":335},[68,9424,6997],{"class":331},[68,9426,9427],{"class":74}," student",[68,9429,6723],{"class":331},[68,9431,1028],{"class":5421},[68,9433,342],{"class":335},[68,9435,9436],{"class":70,"line":92},[68,9437,1753],{"class":335},[68,9439,9440],{"class":70,"line":1387},[68,9441,9442],{"class":393},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[68,9444,9445,9447,9449,9451,9453,9455,9457,9459,9461],{"class":70,"line":1402},[68,9446,1758],{"class":335},[68,9448,1376],{"class":331},[68,9450,9330],{"class":335},[68,9452,1376],{"class":331},[68,9454,9335],{"class":335},[68,9456,1376],{"class":331},[68,9458,9340],{"class":335},[68,9460,1376],{"class":331},[68,9462,1399],{"class":335},[68,9464,9465],{"class":70,"line":1408},[68,9466,1772],{"class":335},[14,9468,9470],{"id":9469},"_47案例","4.7案例",[23,9472,9473],{},[26,9474,9475],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[58,9477,9479],{"className":322,"code":9478,"language":324,"meta":63,"style":63},"#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",[65,9480,9481,9487,9497,9503,9510,9514,9520,9524,9529,9535,9541,9545,9549,9555,9559,9564,9569,9582,9586,9591,9617,9621,9633,9660,9664,9676,9686,9690,9695,9724,9728,9740,9749,9776,9787,9797,9801,9805,9809,9814,9838,9842,9866,9870,9889,9915,9919,9944,9967,9991,9996,10001,10006,10015,10020,10026,10047,10053,10067,10073,10100,10109,10115,10123,10128],{"__ignoreMap":63},[68,9482,9483,9485],{"class":70,"line":71},[68,9484,2156],{"class":331},[68,9486,2159],{"class":78},[68,9488,9489,9491,9493,9495],{"class":70,"line":92},[68,9490,2164],{"class":331},[68,9492,2167],{"class":331},[68,9494,2170],{"class":74},[68,9496,1498],{"class":335},[68,9498,9499,9501],{"class":70,"line":1387},[68,9500,2156],{"class":331},[68,9502,7954],{"class":78},[68,9504,9505,9507],{"class":70,"line":1402},[68,9506,2156],{"class":331},[68,9508,9509],{"class":78},"\u003Cctime>\n",[68,9511,9512],{"class":70,"line":1408},[68,9513,8743],{"class":393},[68,9515,9516,9518],{"class":70,"line":1422},[68,9517,7964],{"class":331},[68,9519,7967],{"class":74},[68,9521,9522],{"class":70,"line":1428},[68,9523,1753],{"class":335},[68,9525,9526],{"class":70,"line":1519},[68,9527,9528],{"class":335},"    string sName;\n",[68,9530,9531,9533],{"class":70,"line":1525},[68,9532,2191],{"class":331},[68,9534,8002],{"class":335},[68,9536,9537,9539],{"class":70,"line":1537},[68,9538,2191],{"class":331},[68,9540,8014],{"class":335},[68,9542,9543],{"class":70,"line":1819},[68,9544,4201],{"class":335},[68,9546,9547],{"class":70,"line":1824},[68,9548,8780],{"class":393},[68,9550,9551,9553],{"class":70,"line":1830},[68,9552,7964],{"class":331},[68,9554,8787],{"class":74},[68,9556,9557],{"class":70,"line":1835},[68,9558,1753],{"class":335},[68,9560,9561],{"class":70,"line":1849},[68,9562,9563],{"class":335},"    string tName;\n",[68,9565,9566],{"class":70,"line":1854},[68,9567,9568],{"class":393},"    \u002F\u002F学生数组\n",[68,9570,9571,9573,9575,9578,9580],{"class":70,"line":1860},[68,9572,8100],{"class":331},[68,9574,8103],{"class":74},[68,9576,9577],{"class":335}," sArray[",[68,9579,652],{"class":82},[68,9581,4896],{"class":335},[68,9583,9584],{"class":70,"line":1881},[68,9585,4201],{"class":335},[68,9587,9588],{"class":70,"line":1886},[68,9589,9590],{"class":393},"\u002F\u002F给老师和学生赋值的函数\n",[68,9592,9593,9595,9598,9600,9602,9605,9608,9611,9613,9615],{"class":70,"line":1900},[68,9594,5569],{"class":331},[68,9596,9597],{"class":74}," allocateSpace",[68,9599,336],{"class":335},[68,9601,7964],{"class":331},[68,9603,9604],{"class":74}," Teacher",[68,9606,9607],{"class":5421}," tArray",[68,9609,9610],{"class":335},"[],",[68,9612,339],{"class":331},[68,9614,7536],{"class":5421},[68,9616,342],{"class":335},[68,9618,9619],{"class":70,"line":1905},[68,9620,1753],{"class":335},[68,9622,9623,9626,9628,9631],{"class":70,"line":1934},[68,9624,9625],{"class":335},"    string nameSeed",[68,9627,381],{"class":331},[68,9629,9630],{"class":78},"\"ABCDE\"",[68,9632,1498],{"class":335},[68,9634,9635,9637,9639,9641,9644,9646,9648,9651,9653,9656,9658],{"class":70,"line":1939},[68,9636,3407],{"class":331},[68,9638,1865],{"class":335},[68,9640,339],{"class":331},[68,9642,9643],{"class":335}," i ",[68,9645,381],{"class":331},[68,9647,4299],{"class":82},[68,9649,9650],{"class":335},"; i ",[68,9652,1243],{"class":331},[68,9654,9655],{"class":335}," len; i",[68,9657,2498],{"class":331},[68,9659,342],{"class":335},[68,9661,9662],{"class":70,"line":1956},[68,9663,2236],{"class":335},[68,9665,9666,9669,9671,9674],{"class":70,"line":1961},[68,9667,9668],{"class":335},"        tArray[i].tName ",[68,9670,381],{"class":331},[68,9672,9673],{"class":78}," \"Teacher_\"",[68,9675,1498],{"class":335},[68,9677,9678,9680,9683],{"class":70,"line":1966},[68,9679,9668],{"class":335},[68,9681,9682],{"class":331},"+=",[68,9684,9685],{"class":335},"nameSeed[i];\n",[68,9687,9688],{"class":70,"line":1971},[68,9689,2606],{"emptyLinePlaceholder":260},[68,9691,9692],{"class":70,"line":1985},[68,9693,9694],{"class":393},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[68,9696,9697,9699,9701,9703,9706,9708,9710,9713,9715,9717,9720,9722],{"class":70,"line":1990},[68,9698,3609],{"class":331},[68,9700,1865],{"class":335},[68,9702,339],{"class":331},[68,9704,9705],{"class":335}," j ",[68,9707,381],{"class":331},[68,9709,4299],{"class":82},[68,9711,9712],{"class":335},"; j ",[68,9714,1243],{"class":331},[68,9716,2354],{"class":82},[68,9718,9719],{"class":335},"; j",[68,9721,2498],{"class":331},[68,9723,342],{"class":335},[68,9725,9726],{"class":70,"line":2783},[68,9727,2716],{"class":335},[68,9729,9730,9733,9735,9738],{"class":70,"line":2797},[68,9731,9732],{"class":335},"            tArray[i].sArray[j].sName ",[68,9734,381],{"class":331},[68,9736,9737],{"class":78}," \"Student_\"",[68,9739,1498],{"class":335},[68,9741,9742,9744,9746],{"class":70,"line":2805},[68,9743,9732],{"class":335},[68,9745,9682],{"class":331},[68,9747,9748],{"class":335}," nameSeed[j];\n",[68,9750,9751,9754,9757,9759,9761,9763,9765,9767,9769,9771,9773],{"class":70,"line":2810},[68,9752,9753],{"class":331},"            int",[68,9755,9756],{"class":335}," random",[68,9758,381],{"class":331},[68,9760,2630],{"class":74},[68,9762,2633],{"class":335},[68,9764,661],{"class":331},[68,9766,1240],{"class":82},[68,9768,814],{"class":331},[68,9770,734],{"class":82},[68,9772,390],{"class":335},[68,9774,9775],{"class":393},"\u002F\u002F40~99\n",[68,9777,9778,9781,9783,9785],{"class":70,"line":2816},[68,9779,9780],{"class":335},"            tArray[i].sArray[j].age ",[68,9782,381],{"class":331},[68,9784,9155],{"class":82},[68,9786,1498],{"class":335},[68,9788,9789,9792,9794],{"class":70,"line":2822},[68,9790,9791],{"class":335},"            tArray[i].sArray[j].score ",[68,9793,381],{"class":331},[68,9795,9796],{"class":335}," random;\n",[68,9798,9799],{"class":70,"line":2827},[68,9800,2735],{"class":335},[68,9802,9803],{"class":70,"line":8153},[68,9804,2393],{"class":335},[68,9806,9807],{"class":70,"line":8177},[68,9808,1772],{"class":335},[68,9810,9811],{"class":70,"line":8182},[68,9812,9813],{"class":393},"\u002F\u002F打印所有信息的函数\n",[68,9815,9816,9818,9821,9823,9825,9827,9829,9832,9834,9836],{"class":70,"line":8188},[68,9817,5569],{"class":331},[68,9819,9820],{"class":74}," printInfo",[68,9822,336],{"class":335},[68,9824,7964],{"class":331},[68,9826,9604],{"class":74},[68,9828,9607],{"class":5421},[68,9830,9831],{"class":335},"[], ",[68,9833,339],{"class":331},[68,9835,7536],{"class":5421},[68,9837,342],{"class":335},[68,9839,9840],{"class":70,"line":8215},[68,9841,1753],{"class":335},[68,9843,9844,9846,9848,9850,9852,9854,9856,9858,9860,9862,9864],{"class":70,"line":8220},[68,9845,3407],{"class":331},[68,9847,1865],{"class":335},[68,9849,339],{"class":331},[68,9851,9643],{"class":335},[68,9853,381],{"class":331},[68,9855,4299],{"class":82},[68,9857,9650],{"class":335},[68,9859,1243],{"class":331},[68,9861,9655],{"class":335},[68,9863,2498],{"class":331},[68,9865,342],{"class":335},[68,9867,9868],{"class":70,"line":8226},[68,9869,2236],{"class":335},[68,9871,9872,9875,9877,9880,9882,9885,9887],{"class":70,"line":8238},[68,9873,9874],{"class":335},"        cout ",[68,9876,1376],{"class":331},[68,9878,9879],{"class":78}," \"Teacher: \"",[68,9881,1652],{"class":331},[68,9883,9884],{"class":335}," tArray[i].tName ",[68,9886,1376],{"class":331},[68,9888,9045],{"class":335},[68,9890,9891,9893,9895,9897,9899,9901,9903,9905,9907,9909,9911,9913],{"class":70,"line":8250},[68,9892,3609],{"class":331},[68,9894,1865],{"class":335},[68,9896,339],{"class":331},[68,9898,9705],{"class":335},[68,9900,381],{"class":331},[68,9902,4299],{"class":82},[68,9904,9712],{"class":335},[68,9906,1243],{"class":331},[68,9908,2354],{"class":82},[68,9910,9719],{"class":335},[68,9912,2498],{"class":331},[68,9914,342],{"class":335},[68,9916,9917],{"class":70,"line":8262},[68,9918,2716],{"class":335},[68,9920,9922,9925,9927,9930,9932,9935,9937,9940,9942],{"class":70,"line":9921},47,[68,9923,9924],{"class":335},"            cout ",[68,9926,1376],{"class":331},[68,9928,9929],{"class":78}," \"",[68,9931,1438],{"class":82},[68,9933,9934],{"class":78},"Student: \"",[68,9936,1652],{"class":331},[68,9938,9939],{"class":335}," tArray[i].sArray[j].sName",[68,9941,1376],{"class":331},[68,9943,1399],{"class":335},[68,9945,9947,9949,9951,9953,9955,9958,9960,9963,9965],{"class":70,"line":9946},48,[68,9948,9924],{"class":335},[68,9950,1376],{"class":331},[68,9952,9929],{"class":78},[68,9954,1438],{"class":82},[68,9956,9957],{"class":78},"Age: \"",[68,9959,1652],{"class":331},[68,9961,9962],{"class":335}," tArray[i].sArray[j].age ",[68,9964,1376],{"class":331},[68,9966,9045],{"class":335},[68,9968,9970,9972,9974,9976,9978,9981,9983,9986,9988],{"class":70,"line":9969},49,[68,9971,9924],{"class":335},[68,9973,1376],{"class":331},[68,9975,9929],{"class":78},[68,9977,1438],{"class":82},[68,9979,9980],{"class":78},"Score: \"",[68,9982,1652],{"class":331},[68,9984,9985],{"class":335}," tArray[i].sArray[j].score ",[68,9987,1376],{"class":331},[68,9989,9990],{"class":335}," endl;   \n",[68,9992,9994],{"class":70,"line":9993},50,[68,9995,2735],{"class":335},[68,9997,9999],{"class":70,"line":9998},51,[68,10000,2393],{"class":335},[68,10002,10004],{"class":70,"line":10003},52,[68,10005,1772],{"class":335},[68,10007,10009,10011,10013],{"class":70,"line":10008},53,[68,10010,339],{"class":331},[68,10012,2179],{"class":74},[68,10014,2182],{"class":335},[68,10016,10018],{"class":70,"line":10017},54,[68,10019,1753],{"class":335},[68,10021,10023],{"class":70,"line":10022},55,[68,10024,10025],{"class":393},"    \u002F\u002F随机数种子\n",[68,10027,10029,10031,10033,10035,10037,10039,10041,10043,10045],{"class":70,"line":10028},56,[68,10030,2579],{"class":74},[68,10032,2582],{"class":335},[68,10034,2585],{"class":331},[68,10036,2588],{"class":331},[68,10038,762],{"class":335},[68,10040,2593],{"class":74},[68,10042,336],{"class":335},[68,10044,2598],{"class":82},[68,10046,2601],{"class":335},[68,10048,10050],{"class":70,"line":10049},57,[68,10051,10052],{"class":393},"    \u002F\u002F1.创建3名老师的数组\n",[68,10054,10056,10058,10060,10063,10065],{"class":70,"line":10055},58,[68,10057,8100],{"class":331},[68,10059,9604],{"class":74},[68,10061,10062],{"class":335}," tArray[",[68,10064,406],{"class":82},[68,10066,4896],{"class":335},[68,10068,10070],{"class":70,"line":10069},59,[68,10071,10072],{"class":393},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[68,10074,10076,10078,10081,10083,10086,10089,10091,10093,10096,10098],{"class":70,"line":10075},60,[68,10077,2191],{"class":331},[68,10079,10080],{"class":335}," len ",[68,10082,381],{"class":331},[68,10084,10085],{"class":331}," sizeof",[68,10087,10088],{"class":335},"(tArray) ",[68,10090,917],{"class":331},[68,10092,10085],{"class":331},[68,10094,10095],{"class":335},"(tArray[",[68,10097,525],{"class":82},[68,10099,4062],{"class":335},[68,10101,10103,10106],{"class":70,"line":10102},61,[68,10104,10105],{"class":74},"    allocateSpace",[68,10107,10108],{"class":335},"(tArray, len);\n",[68,10110,10112],{"class":70,"line":10111},62,[68,10113,10114],{"class":393},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[68,10116,10118,10121],{"class":70,"line":10117},63,[68,10119,10120],{"class":74},"    printInfo",[68,10122,10108],{"class":335},[68,10124,10126],{"class":70,"line":10125},64,[68,10127,2606],{"emptyLinePlaceholder":260},[68,10129,10131],{"class":70,"line":10130},65,[68,10132,1772],{"class":335},[23,10134,10135],{"start":92},[26,10136,10137,10140],{},[483,10138,10139],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10142,10143],{},"五名英雄信息如下：",[58,10145,10149],{"className":10146,"code":10147,"language":10148,"meta":63,"style":63},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[65,10150,10151,10169,10186,10203,10220],{"__ignoreMap":63},[68,10152,10153,10155,10158,10160,10162,10164,10167],{"class":70,"line":71},[68,10154,5123],{"class":335},[68,10156,10157],{"class":78},"\"刘备\"",[68,10159,711],{"class":335},[68,10161,1108],{"class":82},[68,10163,711],{"class":335},[68,10165,10166],{"class":78},"\"男\"",[68,10168,5136],{"class":335},[68,10170,10171,10173,10176,10178,10180,10182,10184],{"class":70,"line":92},[68,10172,5123],{"class":335},[68,10174,10175],{"class":78},"\"关羽\"",[68,10177,711],{"class":335},[68,10179,1083],{"class":82},[68,10181,711],{"class":335},[68,10183,10166],{"class":78},[68,10185,5136],{"class":335},[68,10187,10188,10190,10193,10195,10197,10199,10201],{"class":70,"line":1387},[68,10189,5123],{"class":335},[68,10191,10192],{"class":78},"\"张飞\"",[68,10194,711],{"class":335},[68,10196,1033],{"class":82},[68,10198,711],{"class":335},[68,10200,10166],{"class":78},[68,10202,5136],{"class":335},[68,10204,10205,10207,10210,10212,10214,10216,10218],{"class":70,"line":1402},[68,10206,5123],{"class":335},[68,10208,10209],{"class":78},"\"赵云\"",[68,10211,711],{"class":335},[68,10213,1058],{"class":82},[68,10215,711],{"class":335},[68,10217,10166],{"class":78},[68,10219,5136],{"class":335},[68,10221,10222,10224,10227,10229,10231,10233,10236],{"class":70,"line":1408},[68,10223,5123],{"class":335},[68,10225,10226],{"class":78},"\"貂蝉\"",[68,10228,711],{"class":335},[68,10230,1008],{"class":82},[68,10232,711],{"class":335},[68,10234,10235],{"class":78},"\"女\"",[68,10237,5136],{"class":335},[19,10239,10240],{},"代码：",[58,10242,10244],{"className":322,"code":10243,"language":324,"meta":63,"style":63},"#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",[65,10245,10246,10252,10262,10268,10275,10279,10283,10289,10294,10298,10303,10326,10330,10355,10359,10392,10397,10426,10431,10446,10472,10492,10497,10502,10506,10510,10515,10537,10541,10565,10569,10631,10635,10639,10647,10651,10656,10667,10671,10687,10703,10719,10735,10751,10755,10775,10797,10802,10815,10822,10827,10833,10838,10851,10857],{"__ignoreMap":63},[68,10247,10248,10250],{"class":70,"line":71},[68,10249,2156],{"class":331},[68,10251,2159],{"class":78},[68,10253,10254,10256,10258,10260],{"class":70,"line":92},[68,10255,2164],{"class":331},[68,10257,2167],{"class":331},[68,10259,2170],{"class":74},[68,10261,1498],{"class":335},[68,10263,10264,10266],{"class":70,"line":1387},[68,10265,2156],{"class":331},[68,10267,7954],{"class":78},[68,10269,10270,10272],{"class":70,"line":1402},[68,10271,7964],{"class":331},[68,10273,10274],{"class":74}," Sanguo\n",[68,10276,10277],{"class":70,"line":1408},[68,10278,1753],{"class":335},[68,10280,10281],{"class":70,"line":1422},[68,10282,7990],{"class":335},[68,10284,10285,10287],{"class":70,"line":1428},[68,10286,2191],{"class":331},[68,10288,8002],{"class":335},[68,10290,10291],{"class":70,"line":1519},[68,10292,10293],{"class":335},"    string gender;\n",[68,10295,10296],{"class":70,"line":1525},[68,10297,4201],{"class":335},[68,10299,10300],{"class":70,"line":1537},[68,10301,10302],{"class":393},"\u002F\u002F定义排序函数\n",[68,10304,10305,10307,10309,10311,10314,10316,10318,10320,10322,10324],{"class":70,"line":1819},[68,10306,5569],{"class":331},[68,10308,7521],{"class":74},[68,10310,336],{"class":335},[68,10312,10313],{"class":74},"Sanguo",[68,10315,6723],{"class":331},[68,10317,1028],{"class":5421},[68,10319,711],{"class":335},[68,10321,339],{"class":331},[68,10323,7536],{"class":5421},[68,10325,342],{"class":335},[68,10327,10328],{"class":70,"line":1824},[68,10329,1753],{"class":335},[68,10331,10332,10334,10336,10338,10340,10342,10344,10346,10348,10351,10353],{"class":70,"line":1830},[68,10333,3407],{"class":331},[68,10335,336],{"class":335},[68,10337,339],{"class":331},[68,10339,3238],{"class":335},[68,10341,381],{"class":331},[68,10343,525],{"class":82},[68,10345,3245],{"class":335},[68,10347,1243],{"class":331},[68,10349,10350],{"class":335},"len;i",[68,10352,2498],{"class":331},[68,10354,342],{"class":335},[68,10356,10357],{"class":70,"line":1835},[68,10358,2236],{"class":335},[68,10360,10361,10364,10366,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388,10390],{"class":70,"line":1849},[68,10362,10363],{"class":331},"     for",[68,10365,1865],{"class":335},[68,10367,339],{"class":331},[68,10369,3616],{"class":335},[68,10371,381],{"class":331},[68,10373,525],{"class":82},[68,10375,3623],{"class":335},[68,10377,1243],{"class":331},[68,10379,7563],{"class":335},[68,10381,865],{"class":331},[68,10383,551],{"class":82},[68,10385,865],{"class":331},[68,10387,3756],{"class":335},[68,10389,2498],{"class":331},[68,10391,342],{"class":335},[68,10393,10394],{"class":70,"line":1854},[68,10395,10396],{"class":335},"     {\n",[68,10398,10399,10402,10405,10407,10410,10412,10415,10417,10419,10421,10423],{"class":70,"line":1860},[68,10400,10401],{"class":331},"         if",[68,10403,10404],{"class":335}," ((s",[68,10406,814],{"class":331},[68,10408,10409],{"class":335},"j)->age ",[68,10411,1293],{"class":331},[68,10413,10414],{"class":335}," (s",[68,10416,814],{"class":331},[68,10418,800],{"class":335},[68,10420,814],{"class":331},[68,10422,551],{"class":82},[68,10424,10425],{"class":335},")->age)\n",[68,10427,10428],{"class":70,"line":1881},[68,10429,10430],{"class":335},"         {\n",[68,10432,10433,10436,10438,10441,10443],{"class":70,"line":1886},[68,10434,10435],{"class":335},"             Sanguo temp",[68,10437,7358],{"class":331},[68,10439,10440],{"class":335},"(s",[68,10442,814],{"class":331},[68,10444,10445],{"class":335},"j);\n",[68,10447,10448,10451,10453,10455,10458,10460,10462,10464,10466,10468,10470],{"class":70,"line":1900},[68,10449,10450],{"class":331},"             *",[68,10452,10440],{"class":335},[68,10454,814],{"class":331},[68,10456,10457],{"class":335},"j)",[68,10459,7358],{"class":331},[68,10461,10440],{"class":335},[68,10463,814],{"class":331},[68,10465,800],{"class":335},[68,10467,814],{"class":331},[68,10469,551],{"class":82},[68,10471,2925],{"class":335},[68,10473,10474,10476,10478,10480,10482,10484,10486,10488,10490],{"class":70,"line":1905},[68,10475,10450],{"class":331},[68,10477,10440],{"class":335},[68,10479,814],{"class":331},[68,10481,800],{"class":335},[68,10483,814],{"class":331},[68,10485,551],{"class":82},[68,10487,762],{"class":335},[68,10489,381],{"class":331},[68,10491,4486],{"class":335},[68,10493,10494],{"class":70,"line":1934},[68,10495,10496],{"class":335},"         }\n",[68,10498,10499],{"class":70,"line":1939},[68,10500,10501],{"class":335},"     }\n",[68,10503,10504],{"class":70,"line":1956},[68,10505,2393],{"class":335},[68,10507,10508],{"class":70,"line":1961},[68,10509,1772],{"class":335},[68,10511,10512],{"class":70,"line":1966},[68,10513,10514],{"class":393},"\u002F\u002F定义打印函数\n",[68,10516,10517,10519,10521,10523,10525,10527,10529,10531,10533,10535],{"class":70,"line":1971},[68,10518,5569],{"class":331},[68,10520,9820],{"class":74},[68,10522,336],{"class":335},[68,10524,10313],{"class":74},[68,10526,6723],{"class":331},[68,10528,1028],{"class":5421},[68,10530,711],{"class":335},[68,10532,339],{"class":331},[68,10534,7536],{"class":5421},[68,10536,342],{"class":335},[68,10538,10539],{"class":70,"line":1985},[68,10540,1753],{"class":335},[68,10542,10543,10545,10547,10549,10551,10553,10555,10557,10559,10561,10563],{"class":70,"line":1990},[68,10544,3407],{"class":331},[68,10546,1865],{"class":335},[68,10548,339],{"class":331},[68,10550,3238],{"class":335},[68,10552,381],{"class":331},[68,10554,525],{"class":82},[68,10556,3245],{"class":335},[68,10558,1243],{"class":331},[68,10560,10350],{"class":335},[68,10562,2498],{"class":331},[68,10564,342],{"class":335},[68,10566,10567],{"class":70,"line":2783},[68,10568,2236],{"class":335},[68,10570,10571,10573,10575,10577,10579,10582,10584,10586,10588,10591,10593,10595,10597,10600,10602,10604,10606,10609,10611,10613,10615,10618,10620,10622,10624,10627,10629],{"class":70,"line":2797},[68,10572,3657],{"class":335},[68,10574,1376],{"class":331},[68,10576,584],{"class":78},[68,10578,1438],{"class":82},[68,10580,10581],{"class":78},"姓名：\"",[68,10583,1376],{"class":331},[68,10585,10440],{"class":335},[68,10587,814],{"class":331},[68,10589,10590],{"class":335},"i)->name",[68,10592,1376],{"class":331},[68,10594,584],{"class":78},[68,10596,1438],{"class":82},[68,10598,10599],{"class":78},"年龄：\"",[68,10601,1376],{"class":331},[68,10603,10440],{"class":335},[68,10605,814],{"class":331},[68,10607,10608],{"class":335},"i)->age",[68,10610,1376],{"class":331},[68,10612,584],{"class":78},[68,10614,1438],{"class":82},[68,10616,10617],{"class":78},"性别：\"",[68,10619,1376],{"class":331},[68,10621,10440],{"class":335},[68,10623,814],{"class":331},[68,10625,10626],{"class":335},"i)->gender",[68,10628,1376],{"class":331},[68,10630,1399],{"class":335},[68,10632,10633],{"class":70,"line":2805},[68,10634,2393],{"class":335},[68,10636,10637],{"class":70,"line":2810},[68,10638,1772],{"class":335},[68,10640,10641,10643,10645],{"class":70,"line":2816},[68,10642,339],{"class":331},[68,10644,2179],{"class":74},[68,10646,2182],{"class":335},[68,10648,10649],{"class":70,"line":2822},[68,10650,1753],{"class":335},[68,10652,10653],{"class":70,"line":2827},[68,10654,10655],{"class":393},"    \u002F\u002F定义结构体变量\n",[68,10657,10658,10661,10663,10665],{"class":70,"line":8153},[68,10659,10660],{"class":335},"    Sanguo s1[",[68,10662,652],{"class":82},[68,10664,1273],{"class":335},[68,10666,5114],{"class":331},[68,10668,10669],{"class":70,"line":8177},[68,10670,2236],{"class":335},[68,10672,10673,10675,10677,10679,10681,10683,10685],{"class":70,"line":8182},[68,10674,5123],{"class":335},[68,10676,10157],{"class":78},[68,10678,711],{"class":335},[68,10680,1108],{"class":82},[68,10682,711],{"class":335},[68,10684,10166],{"class":78},[68,10686,5136],{"class":335},[68,10688,10689,10691,10693,10695,10697,10699,10701],{"class":70,"line":8188},[68,10690,5123],{"class":335},[68,10692,10175],{"class":78},[68,10694,711],{"class":335},[68,10696,1083],{"class":82},[68,10698,711],{"class":335},[68,10700,10166],{"class":78},[68,10702,5136],{"class":335},[68,10704,10705,10707,10709,10711,10713,10715,10717],{"class":70,"line":8215},[68,10706,5123],{"class":335},[68,10708,10192],{"class":78},[68,10710,711],{"class":335},[68,10712,1033],{"class":82},[68,10714,711],{"class":335},[68,10716,10166],{"class":78},[68,10718,5136],{"class":335},[68,10720,10721,10723,10725,10727,10729,10731,10733],{"class":70,"line":8220},[68,10722,5123],{"class":335},[68,10724,10209],{"class":78},[68,10726,711],{"class":335},[68,10728,1058],{"class":82},[68,10730,711],{"class":335},[68,10732,10166],{"class":78},[68,10734,5136],{"class":335},[68,10736,10737,10739,10741,10743,10745,10747,10749],{"class":70,"line":8226},[68,10738,5123],{"class":335},[68,10740,10226],{"class":78},[68,10742,711],{"class":335},[68,10744,1008],{"class":82},[68,10746,711],{"class":335},[68,10748,10235],{"class":78},[68,10750,5136],{"class":335},[68,10752,10753],{"class":70,"line":8238},[68,10754,5157],{"class":335},[68,10756,10757,10759,10761,10763,10766,10768,10771,10773],{"class":70,"line":8250},[68,10758,2191],{"class":331},[68,10760,7536],{"class":335},[68,10762,4409],{"class":331},[68,10764,10765],{"class":335},"(s1)",[68,10767,4415],{"class":331},[68,10769,10770],{"class":335},"(s1[",[68,10772,525],{"class":82},[68,10774,4062],{"class":335},[68,10776,10777,10780,10782,10785,10787,10790,10793,10795],{"class":70,"line":8262},[68,10778,10779],{"class":335},"    Sanguo ",[68,10781,788],{"class":331},[68,10783,10784],{"class":335},"s ",[68,10786,381],{"class":331},[68,10788,10789],{"class":331}," &",[68,10791,10792],{"class":335},"s1[",[68,10794,525],{"class":82},[68,10796,4896],{"class":335},[68,10798,10799],{"class":70,"line":9921},[68,10800,10801],{"class":393},"    \u002F\u002F排序前：\n",[68,10803,10804,10806,10808,10811,10813],{"class":70,"line":9946},[68,10805,6734],{"class":335},[68,10807,1376],{"class":331},[68,10809,10810],{"class":78}," \"排序前：\"",[68,10812,1652],{"class":331},[68,10814,9045],{"class":335},[68,10816,10817,10819],{"class":70,"line":9969},[68,10818,10120],{"class":74},[68,10820,10821],{"class":335},"(s,len);\n",[68,10823,10824],{"class":70,"line":9993},[68,10825,10826],{"class":393},"    \u002F\u002F调用排序函数\n",[68,10828,10829,10831],{"class":70,"line":9998},[68,10830,7803],{"class":74},[68,10832,10821],{"class":335},[68,10834,10835],{"class":70,"line":10003},[68,10836,10837],{"class":393},"    \u002F\u002F排序后\n",[68,10839,10840,10842,10844,10847,10849],{"class":70,"line":10008},[68,10841,6734],{"class":335},[68,10843,1376],{"class":331},[68,10845,10846],{"class":78}," \"排序后：\"",[68,10848,1652],{"class":331},[68,10850,9045],{"class":335},[68,10852,10853,10855],{"class":70,"line":10017},[68,10854,10120],{"class":74},[68,10856,10821],{"class":335},[68,10858,10859],{"class":70,"line":10022},[68,10860,1772],{"class":335},[19,10862,10863,10864,10866],{},"注意：使用指针时直接用传首地址**&s",[68,10865,525],{},"**",[250,10868,10869],{},"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":63,"searchDepth":92,"depth":92,"links":10871},[10872,10873,10874,10875,10876,10877,10878],{"id":7908,"depth":92,"text":7909},{"id":8270,"depth":92,"text":8271},{"id":8539,"depth":92,"text":8540},{"id":8704,"depth":92,"text":8705},{"id":8920,"depth":92,"text":8921},{"id":9241,"depth":92,"text":9242},{"id":9469,"depth":92,"text":9470},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7897,"description":7905},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10885,"title":10886,"body":10887,"description":63,"extension":258,"meta":12230,"navigation":260,"path":12231,"seo":12232,"stem":12233,"__hash__":12234},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10888,"toc":12224},[10889,10892,10896,10902,10916,10921,10924,10928,10935,10941,10944,10951,10957,10962,10965,10968,10971,11535,11538,11552,11556,11561,11577,11717,11720,11726,11729,11734,11742,11850,11853,11858,11861,11866,11869,11875,11878,12221],[10,10890,10886],{"id":10891},"_5程序内存模型",[14,10893,10895],{"id":10894},"_51内存分区模型","5.1内存分区模型",[19,10897,10898,10899],{},"C++程序在执行时，将内存大方向划分为",[483,10900,10901],{},"4个区域",[42,10903,10904,10907,10910,10913],{},[26,10905,10906],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[26,10908,10909],{},"全局区：存放全局变量和静态变量以及常量",[26,10911,10912],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[26,10914,10915],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10917,10918],{},[483,10919,10920],{},"内存四区意义：",[19,10922,10923],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[301,10925,10927],{"id":10926},"_511程序运行前","5.1.1程序运行前",[19,10929,10930,10931,10934],{},"​\t在程序编译后，生成了exe可执行程序，",[483,10932,10933],{},"未执行该程序前","分为两个区域",[19,10936,10937,10938],{},"​\t",[483,10939,10940],{},"代码区：",[19,10942,10943],{},"​\t\t存放 CPU 执行的机器指令",[19,10945,10946,10947,10950],{},"​\t\t代码区是",[483,10948,10949],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10952,10946,10953,10956],{},[483,10954,10955],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10958,10937,10959],{},[483,10960,10961],{},"全局区：",[19,10963,10964],{},"​\t\t全局变量和静态变量存放在此.",[19,10966,10967],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10969,10970],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[58,10972,10974],{"className":322,"code":10973,"language":324,"meta":63,"style":63},"\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",[65,10975,10976,10981,10994,11007,11011,11016,11031,11046,11050,11059,11063,11068,11081,11094,11098,11103,11129,11155,11159,11186,11212,11216,11221,11237,11252,11256,11282,11308,11312,11337,11362,11366,11392,11418,11422,11438,11453,11479,11505,11509,11519,11523,11531],{"__ignoreMap":63},[68,10977,10978],{"class":70,"line":71},[68,10979,10980],{"class":393},"\u002F\u002F全局变量\n",[68,10982,10983,10985,10988,10990,10992],{"class":70,"line":92},[68,10984,339],{"class":331},[68,10986,10987],{"class":335}," g_a ",[68,10989,381],{"class":331},[68,10991,2244],{"class":82},[68,10993,1498],{"class":335},[68,10995,10996,10998,11001,11003,11005],{"class":70,"line":1387},[68,10997,339],{"class":331},[68,10999,11000],{"class":335}," g_b ",[68,11002,381],{"class":331},[68,11004,2244],{"class":82},[68,11006,1498],{"class":335},[68,11008,11009],{"class":70,"line":1402},[68,11010,2606],{"emptyLinePlaceholder":260},[68,11012,11013],{"class":70,"line":1408},[68,11014,11015],{"class":393},"\u002F\u002F全局常量\n",[68,11017,11018,11020,11022,11025,11027,11029],{"class":70,"line":1422},[68,11019,6997],{"class":331},[68,11021,2588],{"class":331},[68,11023,11024],{"class":335}," c_g_a ",[68,11026,381],{"class":331},[68,11028,2244],{"class":82},[68,11030,1498],{"class":335},[68,11032,11033,11035,11037,11040,11042,11044],{"class":70,"line":1428},[68,11034,6997],{"class":331},[68,11036,2588],{"class":331},[68,11038,11039],{"class":335}," c_g_b ",[68,11041,381],{"class":331},[68,11043,2244],{"class":82},[68,11045,1498],{"class":335},[68,11047,11048],{"class":70,"line":1519},[68,11049,2606],{"emptyLinePlaceholder":260},[68,11051,11052,11054,11056],{"class":70,"line":1525},[68,11053,339],{"class":331},[68,11055,2179],{"class":74},[68,11057,11058],{"class":335},"() {\n",[68,11060,11061],{"class":70,"line":1537},[68,11062,2606],{"emptyLinePlaceholder":260},[68,11064,11065],{"class":70,"line":1819},[68,11066,11067],{"class":393},"    \u002F\u002F局部变量\n",[68,11069,11070,11072,11075,11077,11079],{"class":70,"line":1824},[68,11071,2191],{"class":331},[68,11073,11074],{"class":335}," a ",[68,11076,381],{"class":331},[68,11078,2244],{"class":82},[68,11080,1498],{"class":335},[68,11082,11083,11085,11088,11090,11092],{"class":70,"line":1830},[68,11084,2191],{"class":331},[68,11086,11087],{"class":335}," b ",[68,11089,381],{"class":331},[68,11091,2244],{"class":82},[68,11093,1498],{"class":335},[68,11095,11096],{"class":70,"line":1835},[68,11097,2606],{"emptyLinePlaceholder":260},[68,11099,11100],{"class":70,"line":1849},[68,11101,11102],{"class":393},"    \u002F\u002F打印地址\n",[68,11104,11105,11107,11109,11112,11114,11116,11118,11120,11122,11125,11127],{"class":70,"line":1854},[68,11106,6734],{"class":335},[68,11108,1376],{"class":331},[68,11110,11111],{"class":78}," \"局部变量a地址为： \"",[68,11113,1652],{"class":331},[68,11115,1865],{"class":335},[68,11117,339],{"class":331},[68,11119,762],{"class":335},[68,11121,686],{"class":331},[68,11123,11124],{"class":335},"a ",[68,11126,1376],{"class":331},[68,11128,9045],{"class":335},[68,11130,11131,11133,11135,11138,11140,11142,11144,11146,11148,11151,11153],{"class":70,"line":1860},[68,11132,6734],{"class":335},[68,11134,1376],{"class":331},[68,11136,11137],{"class":78}," \"局部变量b地址为： \"",[68,11139,1652],{"class":331},[68,11141,1865],{"class":335},[68,11143,339],{"class":331},[68,11145,762],{"class":335},[68,11147,686],{"class":331},[68,11149,11150],{"class":335},"b ",[68,11152,1376],{"class":331},[68,11154,9045],{"class":335},[68,11156,11157],{"class":70,"line":1881},[68,11158,2606],{"emptyLinePlaceholder":260},[68,11160,11161,11163,11165,11168,11170,11173,11175,11177,11179,11182,11184],{"class":70,"line":1886},[68,11162,6734],{"class":335},[68,11164,1376],{"class":331},[68,11166,11167],{"class":78}," \"全局变量g_a地址为： \"",[68,11169,1652],{"class":331},[68,11171,11172],{"class":335},"  (",[68,11174,339],{"class":331},[68,11176,762],{"class":335},[68,11178,686],{"class":331},[68,11180,11181],{"class":335},"g_a ",[68,11183,1376],{"class":331},[68,11185,9045],{"class":335},[68,11187,11188,11190,11192,11195,11197,11199,11201,11203,11205,11208,11210],{"class":70,"line":1900},[68,11189,6734],{"class":335},[68,11191,1376],{"class":331},[68,11193,11194],{"class":78}," \"全局变量g_b地址为： \"",[68,11196,1652],{"class":331},[68,11198,11172],{"class":335},[68,11200,339],{"class":331},[68,11202,762],{"class":335},[68,11204,686],{"class":331},[68,11206,11207],{"class":335},"g_b ",[68,11209,1376],{"class":331},[68,11211,9045],{"class":335},[68,11213,11214],{"class":70,"line":1905},[68,11215,2606],{"emptyLinePlaceholder":260},[68,11217,11218],{"class":70,"line":1934},[68,11219,11220],{"class":393},"    \u002F\u002F静态变量\n",[68,11222,11223,11226,11228,11231,11233,11235],{"class":70,"line":1939},[68,11224,11225],{"class":331},"    static",[68,11227,2588],{"class":331},[68,11229,11230],{"class":335}," s_a ",[68,11232,381],{"class":331},[68,11234,2244],{"class":82},[68,11236,1498],{"class":335},[68,11238,11239,11241,11243,11246,11248,11250],{"class":70,"line":1956},[68,11240,11225],{"class":331},[68,11242,2588],{"class":331},[68,11244,11245],{"class":335}," s_b ",[68,11247,381],{"class":331},[68,11249,2244],{"class":82},[68,11251,1498],{"class":335},[68,11253,11254],{"class":70,"line":1961},[68,11255,2606],{"emptyLinePlaceholder":260},[68,11257,11258,11260,11262,11265,11267,11269,11271,11273,11275,11278,11280],{"class":70,"line":1966},[68,11259,6734],{"class":335},[68,11261,1376],{"class":331},[68,11263,11264],{"class":78}," \"静态变量s_a地址为： \"",[68,11266,1652],{"class":331},[68,11268,1865],{"class":335},[68,11270,339],{"class":331},[68,11272,762],{"class":335},[68,11274,686],{"class":331},[68,11276,11277],{"class":335},"s_a ",[68,11279,1376],{"class":331},[68,11281,9045],{"class":335},[68,11283,11284,11286,11288,11291,11293,11295,11297,11299,11301,11304,11306],{"class":70,"line":1971},[68,11285,6734],{"class":335},[68,11287,1376],{"class":331},[68,11289,11290],{"class":78}," \"静态变量s_b地址为： \"",[68,11292,1652],{"class":331},[68,11294,1865],{"class":335},[68,11296,339],{"class":331},[68,11298,762],{"class":335},[68,11300,686],{"class":331},[68,11302,11303],{"class":335},"s_b ",[68,11305,1376],{"class":331},[68,11307,9045],{"class":335},[68,11309,11310],{"class":70,"line":1985},[68,11311,2606],{"emptyLinePlaceholder":260},[68,11313,11314,11316,11318,11321,11323,11325,11327,11329,11331,11333,11335],{"class":70,"line":1990},[68,11315,6734],{"class":335},[68,11317,1376],{"class":331},[68,11319,11320],{"class":78}," \"字符串常量地址为： \"",[68,11322,1652],{"class":331},[68,11324,1865],{"class":335},[68,11326,339],{"class":331},[68,11328,762],{"class":335},[68,11330,686],{"class":331},[68,11332,1394],{"class":78},[68,11334,1652],{"class":331},[68,11336,9045],{"class":335},[68,11338,11339,11341,11343,11345,11347,11349,11351,11353,11355,11358,11360],{"class":70,"line":2783},[68,11340,6734],{"class":335},[68,11342,1376],{"class":331},[68,11344,11320],{"class":78},[68,11346,1652],{"class":331},[68,11348,1865],{"class":335},[68,11350,339],{"class":331},[68,11352,762],{"class":335},[68,11354,686],{"class":331},[68,11356,11357],{"class":78},"\"hello world1\"",[68,11359,1652],{"class":331},[68,11361,9045],{"class":335},[68,11363,11364],{"class":70,"line":2797},[68,11365,2606],{"emptyLinePlaceholder":260},[68,11367,11368,11370,11372,11375,11377,11379,11381,11383,11385,11388,11390],{"class":70,"line":2805},[68,11369,6734],{"class":335},[68,11371,1376],{"class":331},[68,11373,11374],{"class":78}," \"全局常量c_g_a地址为： \"",[68,11376,1652],{"class":331},[68,11378,1865],{"class":335},[68,11380,339],{"class":331},[68,11382,762],{"class":335},[68,11384,686],{"class":331},[68,11386,11387],{"class":335},"c_g_a ",[68,11389,1376],{"class":331},[68,11391,9045],{"class":335},[68,11393,11394,11396,11398,11401,11403,11405,11407,11409,11411,11414,11416],{"class":70,"line":2810},[68,11395,6734],{"class":335},[68,11397,1376],{"class":331},[68,11399,11400],{"class":78}," \"全局常量c_g_b地址为： \"",[68,11402,1652],{"class":331},[68,11404,1865],{"class":335},[68,11406,339],{"class":331},[68,11408,762],{"class":335},[68,11410,686],{"class":331},[68,11412,11413],{"class":335},"c_g_b ",[68,11415,1376],{"class":331},[68,11417,9045],{"class":335},[68,11419,11420],{"class":70,"line":2816},[68,11421,2606],{"emptyLinePlaceholder":260},[68,11423,11424,11427,11429,11432,11434,11436],{"class":70,"line":2822},[68,11425,11426],{"class":331},"    const",[68,11428,2588],{"class":331},[68,11430,11431],{"class":335}," c_l_a ",[68,11433,381],{"class":331},[68,11435,2244],{"class":82},[68,11437,1498],{"class":335},[68,11439,11440,11442,11444,11447,11449,11451],{"class":70,"line":2827},[68,11441,11426],{"class":331},[68,11443,2588],{"class":331},[68,11445,11446],{"class":335}," c_l_b ",[68,11448,381],{"class":331},[68,11450,2244],{"class":82},[68,11452,1498],{"class":335},[68,11454,11455,11457,11459,11462,11464,11466,11468,11470,11472,11475,11477],{"class":70,"line":8153},[68,11456,6734],{"class":335},[68,11458,1376],{"class":331},[68,11460,11461],{"class":78}," \"局部常量c_l_a地址为： \"",[68,11463,1652],{"class":331},[68,11465,1865],{"class":335},[68,11467,339],{"class":331},[68,11469,762],{"class":335},[68,11471,686],{"class":331},[68,11473,11474],{"class":335},"c_l_a ",[68,11476,1376],{"class":331},[68,11478,9045],{"class":335},[68,11480,11481,11483,11485,11488,11490,11492,11494,11496,11498,11501,11503],{"class":70,"line":8177},[68,11482,6734],{"class":335},[68,11484,1376],{"class":331},[68,11486,11487],{"class":78}," \"局部常量c_l_b地址为： \"",[68,11489,1652],{"class":331},[68,11491,1865],{"class":335},[68,11493,339],{"class":331},[68,11495,762],{"class":335},[68,11497,686],{"class":331},[68,11499,11500],{"class":335},"c_l_b ",[68,11502,1376],{"class":331},[68,11504,9045],{"class":335},[68,11506,11507],{"class":70,"line":8182},[68,11508,2606],{"emptyLinePlaceholder":260},[68,11510,11511,11513,11515,11517],{"class":70,"line":8188},[68,11512,2509],{"class":74},[68,11514,336],{"class":335},[68,11516,2514],{"class":78},[68,11518,2925],{"class":335},[68,11520,11521],{"class":70,"line":8215},[68,11522,2606],{"emptyLinePlaceholder":260},[68,11524,11525,11527,11529],{"class":70,"line":8220},[68,11526,4296],{"class":331},[68,11528,4299],{"class":82},[68,11530,1498],{"class":335},[68,11532,11533],{"class":70,"line":8226},[68,11534,1772],{"class":335},[19,11536,11537],{},"总结：",[42,11539,11540,11543,11546,11549],{},[26,11541,11542],{},"c++中程序运行前分为全局区和代码区",[26,11544,11545],{},"代码区特点是共享和只读",[26,11547,11548],{},"全局区中存放全局变量、静态变量、常量",[26,11550,11551],{},"常量区中存放const修饰的全局常量和字符串常量",[301,11553,11555],{"id":11554},"_512程序运行后","5.1.2程序运行后",[23,11557,11558],{},[26,11559,11560],{},"栈区：",[42,11562,11563,11570],{},[26,11564,11565,11566,11569],{},"由编译器自动分配释放, 存放",[483,11567,11568],{},"函数的参数值,局部变量","等",[26,11571,11572,11573,11576],{},"注意事项：",[483,11574,11575],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[58,11578,11580],{"className":322,"code":11579,"language":324,"meta":63,"style":63},"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",[65,11581,11582,11593,11597,11612,11624,11628,11632,11640,11645,11660,11678,11695,11705,11713],{"__ignoreMap":63},[68,11583,11584,11586,11588,11591],{"class":70,"line":71},[68,11585,339],{"class":331},[68,11587,6723],{"class":331},[68,11589,11590],{"class":74}," func",[68,11592,2182],{"class":335},[68,11594,11595],{"class":70,"line":92},[68,11596,1753],{"class":335},[68,11598,11599,11601,11603,11605,11607,11609],{"class":70,"line":1387},[68,11600,2191],{"class":331},[68,11602,11074],{"class":335},[68,11604,381],{"class":331},[68,11606,2244],{"class":82},[68,11608,390],{"class":335},[68,11610,11611],{"class":393}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[68,11613,11614,11616,11618,11621],{"class":70,"line":1402},[68,11615,4296],{"class":331},[68,11617,10789],{"class":331},[68,11619,11620],{"class":335},"a;",[68,11622,11623],{"class":393}," \u002F\u002F放回局部变量的地址\n",[68,11625,11626],{"class":70,"line":1408},[68,11627,1772],{"class":335},[68,11629,11630],{"class":70,"line":1422},[68,11631,2606],{"emptyLinePlaceholder":260},[68,11633,11634,11636,11638],{"class":70,"line":1428},[68,11635,339],{"class":331},[68,11637,2179],{"class":74},[68,11639,11058],{"class":335},[68,11641,11642],{"class":70,"line":1519},[68,11643,11644],{"class":393},"    \u002F\u002F接受func的返回值\n",[68,11646,11647,11649,11651,11654,11656,11658],{"class":70,"line":1525},[68,11648,2191],{"class":331},[68,11650,6723],{"class":331},[68,11652,11653],{"class":335},"p ",[68,11655,381],{"class":331},[68,11657,11590],{"class":74},[68,11659,5841],{"class":335},[68,11661,11662,11664,11666,11668,11670,11672,11675],{"class":70,"line":1537},[68,11663,6734],{"class":335},[68,11665,1376],{"class":331},[68,11667,6723],{"class":331},[68,11669,11653],{"class":335},[68,11671,1376],{"class":331},[68,11673,11674],{"class":335}," endl;",[68,11676,11677],{"class":393}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[68,11679,11680,11682,11684,11686,11688,11690,11692],{"class":70,"line":1819},[68,11681,6734],{"class":335},[68,11683,1376],{"class":331},[68,11685,6723],{"class":331},[68,11687,11653],{"class":335},[68,11689,1376],{"class":331},[68,11691,11674],{"class":335},[68,11693,11694],{"class":393}," \u002F\u002F第二次这个数据不再保留\n",[68,11696,11697,11699,11701,11703],{"class":70,"line":1824},[68,11698,2509],{"class":74},[68,11700,336],{"class":335},[68,11702,2514],{"class":78},[68,11704,2925],{"class":335},[68,11706,11707,11709,11711],{"class":70,"line":1830},[68,11708,4296],{"class":331},[68,11710,4299],{"class":82},[68,11712,1498],{"class":335},[68,11714,11715],{"class":70,"line":1835},[68,11716,1772],{"class":335},[19,11718,11719],{},"输出结果：",[19,11721,11722],{},[48,11723],{"alt":11724,"src":11725},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11727,11728],{},"总结：不要返回局部变量的地址",[23,11730,11731],{"start":92},[26,11732,11733],{},"堆区",[42,11735,11736,11739],{},[26,11737,11738],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[26,11740,11741],{},"在c++中主要利用new在堆区开辟内存",[58,11743,11745],{"className":322,"code":11744,"language":324,"meta":63,"style":63},"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",[65,11746,11747,11762,11766,11771,11792,11799,11803,11811,11815,11820,11834,11846],{"__ignoreMap":63},[68,11748,11749,11751,11754,11757,11759],{"class":70,"line":71},[68,11750,339],{"class":331},[68,11752,11753],{"class":331},"  *",[68,11755,11756],{"class":74},"func",[68,11758,2633],{"class":335},[68,11760,11761],{"class":393},"  \u002F\u002F函数返回指针\n",[68,11763,11764],{"class":70,"line":92},[68,11765,1753],{"class":335},[68,11767,11768],{"class":70,"line":1387},[68,11769,11770],{"class":393},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[68,11772,11773,11775,11777,11779,11781,11784,11786,11788,11790],{"class":70,"line":1402},[68,11774,4353],{"class":331},[68,11776,6723],{"class":331},[68,11778,19],{"class":335},[68,11780,381],{"class":331},[68,11782,11783],{"class":331}," new",[68,11785,2588],{"class":331},[68,11787,336],{"class":335},[68,11789,779],{"class":82},[68,11791,2925],{"class":335},[68,11793,11794,11796],{"class":70,"line":1408},[68,11795,4587],{"class":331},[68,11797,11798],{"class":335}," p;\n",[68,11800,11801],{"class":70,"line":1422},[68,11802,1772],{"class":335},[68,11804,11805,11807,11809],{"class":70,"line":1428},[68,11806,339],{"class":331},[68,11808,2179],{"class":74},[68,11810,2182],{"class":335},[68,11812,11813],{"class":70,"line":1519},[68,11814,1753],{"class":335},[68,11816,11817],{"class":70,"line":1525},[68,11818,11819],{"class":393},"    \u002F\u002F在堆区开辟数据\n",[68,11821,11822,11824,11826,11828,11830,11832],{"class":70,"line":1537},[68,11823,2191],{"class":331},[68,11825,6723],{"class":331},[68,11827,19],{"class":335},[68,11829,381],{"class":331},[68,11831,11756],{"class":74},[68,11833,5841],{"class":335},[68,11835,11836,11838,11840,11842,11844],{"class":70,"line":1819},[68,11837,1758],{"class":335},[68,11839,6624],{"class":331},[68,11841,19],{"class":335},[68,11843,1376],{"class":331},[68,11845,1399],{"class":335},[68,11847,11848],{"class":70,"line":1824},[68,11849,1772],{"class":335},[19,11851,11852],{},"图片展示：",[19,11854,11855],{},[48,11856],{"alt":11724,"src":11857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11859,11860],{},"堆区内存由程序员管生死！！！",[23,11862,11863],{"start":1387},[26,11864,11865],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11867,11868],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11870,11871,11872],{},"​语法：",[65,11873,11874],{}," new 数据类型",[19,11876,11877],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[58,11879,11881],{"className":322,"code":11880,"language":324,"meta":63,"style":63},"\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",[65,11882,11883,11888,11898,11902,11907,11912,11934,11938,11946,11950,11964,11976,11988,12000,12005,12010,12021,12025,12030,12038,12042,12047,12069,12095,12099,12117,12121,12147,12151,12163,12167,12172,12177,12185,12189,12193,12201,12205,12211,12217],{"__ignoreMap":63},[68,11884,11885],{"class":70,"line":71},[68,11886,11887],{"class":393},"\u002F\u002F1.new的基本语法\n",[68,11889,11890,11892,11894,11896],{"class":70,"line":92},[68,11891,339],{"class":331},[68,11893,6723],{"class":331},[68,11895,11756],{"class":74},[68,11897,2182],{"class":335},[68,11899,11900],{"class":70,"line":1387},[68,11901,1753],{"class":335},[68,11903,11904],{"class":70,"line":1402},[68,11905,11906],{"class":393},"    \u002F\u002F在堆区创建整型数据\n",[68,11908,11909],{"class":70,"line":1408},[68,11910,11911],{"class":393},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[68,11913,11914,11916,11918,11920,11923,11925,11927,11929,11931],{"class":70,"line":1422},[68,11915,2191],{"class":331},[68,11917,6723],{"class":331},[68,11919,19],{"class":335},[68,11921,11922],{"class":331},"=new",[68,11924,2588],{"class":331},[68,11926,336],{"class":335},[68,11928,779],{"class":82},[68,11930,6171],{"class":335},[68,11932,11933],{"class":393},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[68,11935,11936],{"class":70,"line":1428},[68,11937,1772],{"class":335},[68,11939,11940,11942,11944],{"class":70,"line":1519},[68,11941,5569],{"class":331},[68,11943,5793],{"class":74},[68,11945,2182],{"class":335},[68,11947,11948],{"class":70,"line":1525},[68,11949,1753],{"class":335},[68,11951,11952,11954,11956,11958,11960,11962],{"class":70,"line":1537},[68,11953,2191],{"class":331},[68,11955,6723],{"class":331},[68,11957,19],{"class":335},[68,11959,381],{"class":331},[68,11961,11756],{"class":74},[68,11963,5841],{"class":335},[68,11965,11966,11968,11970,11972,11974],{"class":70,"line":1819},[68,11967,1758],{"class":335},[68,11969,6624],{"class":331},[68,11971,19],{"class":335},[68,11973,1376],{"class":331},[68,11975,1399],{"class":335},[68,11977,11978,11980,11982,11984,11986],{"class":70,"line":1824},[68,11979,1758],{"class":335},[68,11981,6624],{"class":331},[68,11983,19],{"class":335},[68,11985,1376],{"class":331},[68,11987,1399],{"class":335},[68,11989,11990,11992,11994,11996,11998],{"class":70,"line":1830},[68,11991,1758],{"class":335},[68,11993,6624],{"class":331},[68,11995,19],{"class":335},[68,11997,1376],{"class":331},[68,11999,1399],{"class":335},[68,12001,12002],{"class":70,"line":1835},[68,12003,12004],{"class":393},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[68,12006,12007],{"class":70,"line":1849},[68,12008,12009],{"class":393},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[68,12011,12012,12015,12018],{"class":70,"line":1854},[68,12013,12014],{"class":331},"    delete",[68,12016,12017],{"class":335}," p;",[68,12019,12020],{"class":393},"\u002F\u002F删除这块地址\n",[68,12022,12023],{"class":70,"line":1860},[68,12024,1772],{"class":335},[68,12026,12027],{"class":70,"line":1881},[68,12028,12029],{"class":393},"\u002F\u002F2.在堆区利用new开辟数组\n",[68,12031,12032,12034,12036],{"class":70,"line":1886},[68,12033,5569],{"class":331},[68,12035,5862],{"class":74},[68,12037,2182],{"class":335},[68,12039,12040],{"class":70,"line":1900},[68,12041,1753],{"class":335},[68,12043,12044],{"class":70,"line":1905},[68,12045,12046],{"class":393},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[68,12048,12049,12051,12053,12055,12057,12059,12061,12063,12066],{"class":70,"line":1934},[68,12050,2191],{"class":331},[68,12052,6723],{"class":331},[68,12054,4086],{"class":335},[68,12056,11922],{"class":331},[68,12058,2588],{"class":331},[68,12060,1223],{"class":335},[68,12062,779],{"class":82},[68,12064,12065],{"class":335},"];",[68,12067,12068],{"class":393},"\u002F\u002F10代表数组有10个元素\n",[68,12070,12071,12073,12075,12077,12079,12081,12083,12085,12087,12089,12091,12093],{"class":70,"line":1939},[68,12072,3407],{"class":331},[68,12074,1865],{"class":335},[68,12076,339],{"class":331},[68,12078,3238],{"class":335},[68,12080,381],{"class":331},[68,12082,525],{"class":82},[68,12084,3245],{"class":335},[68,12086,1243],{"class":331},[68,12088,779],{"class":82},[68,12090,3245],{"class":335},[68,12092,2498],{"class":331},[68,12094,342],{"class":335},[68,12096,12097],{"class":70,"line":1956},[68,12098,2236],{"class":335},[68,12100,12101,12104,12106,12108,12110,12112,12114],{"class":70,"line":1961},[68,12102,12103],{"class":335},"        arr[i]",[68,12105,381],{"class":331},[68,12107,774],{"class":335},[68,12109,814],{"class":331},[68,12111,644],{"class":82},[68,12113,390],{"class":335},[68,12115,12116],{"class":393},"\u002F\u002F给10个元素赋值100～109\n",[68,12118,12119],{"class":70,"line":1966},[68,12120,2393],{"class":335},[68,12122,12123,12125,12127,12129,12131,12133,12135,12137,12139,12141,12143,12145],{"class":70,"line":1971},[68,12124,3407],{"class":331},[68,12126,1865],{"class":335},[68,12128,339],{"class":331},[68,12130,3238],{"class":335},[68,12132,381],{"class":331},[68,12134,525],{"class":82},[68,12136,3245],{"class":335},[68,12138,1243],{"class":331},[68,12140,779],{"class":82},[68,12142,3245],{"class":335},[68,12144,2498],{"class":331},[68,12146,342],{"class":335},[68,12148,12149],{"class":70,"line":1985},[68,12150,2236],{"class":335},[68,12152,12153,12155,12157,12159,12161],{"class":70,"line":1990},[68,12154,3657],{"class":335},[68,12156,1376],{"class":331},[68,12158,4560],{"class":335},[68,12160,1376],{"class":331},[68,12162,1399],{"class":335},[68,12164,12165],{"class":70,"line":2783},[68,12166,2393],{"class":335},[68,12168,12169],{"class":70,"line":2797},[68,12170,12171],{"class":393},"    \u002F\u002F释放堆区数组\n",[68,12173,12174],{"class":70,"line":2805},[68,12175,12176],{"class":393},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[68,12178,12179,12182],{"class":70,"line":2810},[68,12180,12181],{"class":331},"    delete[]",[68,12183,12184],{"class":335}," arr;\n",[68,12186,12187],{"class":70,"line":2816},[68,12188,1772],{"class":335},[68,12190,12191],{"class":70,"line":2822},[68,12192,2606],{"emptyLinePlaceholder":260},[68,12194,12195,12197,12199],{"class":70,"line":2827},[68,12196,339],{"class":331},[68,12198,2179],{"class":74},[68,12200,2182],{"class":335},[68,12202,12203],{"class":70,"line":8153},[68,12204,1753],{"class":335},[68,12206,12207,12209],{"class":70,"line":8177},[68,12208,5838],{"class":74},[68,12210,5841],{"class":335},[68,12212,12213,12215],{"class":70,"line":8182},[68,12214,5907],{"class":74},[68,12216,5841],{"class":335},[68,12218,12219],{"class":70,"line":8188},[68,12220,1772],{"class":335},[250,12222,12223],{},"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":63,"searchDepth":92,"depth":92,"links":12225},[12226],{"id":10894,"depth":92,"text":10895,"children":12227},[12228,12229],{"id":10926,"depth":1387,"text":10927},{"id":11554,"depth":1387,"text":11555},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10886,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12236,"title":12237,"body":12238,"description":63,"extension":258,"meta":13719,"navigation":260,"path":13720,"seo":13721,"stem":13722,"__hash__":13723},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12239,"toc":13711},[12240,12243,12247,12250,12253,12422,12426,12431,12448,12453,12605,12609,12612,12615,13009,13013,13016,13021,13024,13336,13340,13346,13506,13508,13516,13520,13523,13530,13708],[10,12241,12237],{"id":12242},"_6引用",[14,12244,12246],{"id":12245},"_61引用基本用法","6.1引用基本用法",[19,12248,12249],{},"引用的本质：给变量起别名",[19,12251,12252],{},"语法：数据类型 &别名=原名",[58,12254,12256],{"className":322,"code":12255,"language":324,"meta":63,"style":63},"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",[65,12257,12258,12266,12270,12282,12294,12298,12317,12336,12340,12351,12355,12374,12392,12396,12406,12410,12418],{"__ignoreMap":63},[68,12259,12260,12262,12264],{"class":70,"line":71},[68,12261,339],{"class":331},[68,12263,2179],{"class":74},[68,12265,11058],{"class":335},[68,12267,12268],{"class":70,"line":92},[68,12269,2606],{"emptyLinePlaceholder":260},[68,12271,12272,12274,12276,12278,12280],{"class":70,"line":1387},[68,12273,2191],{"class":331},[68,12275,11074],{"class":335},[68,12277,381],{"class":331},[68,12279,2244],{"class":82},[68,12281,1498],{"class":335},[68,12283,12284,12286,12288,12290,12292],{"class":70,"line":1402},[68,12285,2191],{"class":331},[68,12287,10789],{"class":331},[68,12289,11150],{"class":335},[68,12291,381],{"class":331},[68,12293,1640],{"class":335},[68,12295,12296],{"class":70,"line":1408},[68,12297,2606],{"emptyLinePlaceholder":260},[68,12299,12300,12302,12304,12307,12309,12311,12313,12315],{"class":70,"line":1422},[68,12301,6734],{"class":335},[68,12303,1376],{"class":331},[68,12305,12306],{"class":78}," \"a = \"",[68,12308,1652],{"class":331},[68,12310,11074],{"class":335},[68,12312,1376],{"class":331},[68,12314,11674],{"class":335},[68,12316,7473],{"class":393},[68,12318,12319,12321,12323,12326,12328,12330,12332,12334],{"class":70,"line":1428},[68,12320,6734],{"class":335},[68,12322,1376],{"class":331},[68,12324,12325],{"class":78}," \"b = \"",[68,12327,1652],{"class":331},[68,12329,11087],{"class":335},[68,12331,1376],{"class":331},[68,12333,11674],{"class":335},[68,12335,7473],{"class":393},[68,12337,12338],{"class":70,"line":1519},[68,12339,2606],{"emptyLinePlaceholder":260},[68,12341,12342,12345,12347,12349],{"class":70,"line":1525},[68,12343,12344],{"class":335},"    b ",[68,12346,381],{"class":331},[68,12348,5959],{"class":82},[68,12350,1498],{"class":335},[68,12352,12353],{"class":70,"line":1537},[68,12354,2606],{"emptyLinePlaceholder":260},[68,12356,12357,12359,12361,12363,12365,12367,12369,12371],{"class":70,"line":1819},[68,12358,6734],{"class":335},[68,12360,1376],{"class":331},[68,12362,12306],{"class":78},[68,12364,1652],{"class":331},[68,12366,11074],{"class":335},[68,12368,1376],{"class":331},[68,12370,11674],{"class":335},[68,12372,12373],{"class":393},"\u002F\u002F100\n",[68,12375,12376,12378,12380,12382,12384,12386,12388,12390],{"class":70,"line":1824},[68,12377,6734],{"class":335},[68,12379,1376],{"class":331},[68,12381,12325],{"class":78},[68,12383,1652],{"class":331},[68,12385,11087],{"class":335},[68,12387,1376],{"class":331},[68,12389,11674],{"class":335},[68,12391,12373],{"class":393},[68,12393,12394],{"class":70,"line":1830},[68,12395,2606],{"emptyLinePlaceholder":260},[68,12397,12398,12400,12402,12404],{"class":70,"line":1835},[68,12399,2509],{"class":74},[68,12401,336],{"class":335},[68,12403,2514],{"class":78},[68,12405,2925],{"class":335},[68,12407,12408],{"class":70,"line":1849},[68,12409,2606],{"emptyLinePlaceholder":260},[68,12411,12412,12414,12416],{"class":70,"line":1854},[68,12413,4296],{"class":331},[68,12415,4299],{"class":82},[68,12417,1498],{"class":335},[68,12419,12420],{"class":70,"line":1860},[68,12421,1772],{"class":335},[14,12423,12425],{"id":12424},"_62引用的注意事项","6.2引用的注意事项",[23,12427,12428],{},[26,12429,12430],{},"引用必须要初始化",[58,12432,12434],{"className":322,"code":12433,"language":324,"meta":63,"style":63},"int &b;\u002F\u002F非常错误！\n",[65,12435,12436],{"__ignoreMap":63},[68,12437,12438,12440,12442,12445],{"class":70,"line":71},[68,12439,339],{"class":331},[68,12441,10789],{"class":331},[68,12443,12444],{"class":335},"b;",[68,12446,12447],{"class":393},"\u002F\u002F非常错误！\n",[23,12449,12450],{"start":92},[26,12451,12452],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[58,12454,12456],{"className":322,"code":12455,"language":324,"meta":63,"style":63},"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",[65,12457,12458,12466,12478,12490,12498,12514,12527,12545,12563,12583,12593,12601],{"__ignoreMap":63},[68,12459,12460,12462,12464],{"class":70,"line":71},[68,12461,339],{"class":331},[68,12463,2179],{"class":74},[68,12465,11058],{"class":335},[68,12467,12468,12470,12472,12474,12476],{"class":70,"line":92},[68,12469,2191],{"class":331},[68,12471,11074],{"class":335},[68,12473,381],{"class":331},[68,12475,2244],{"class":82},[68,12477,1498],{"class":335},[68,12479,12480,12482,12484,12486,12488],{"class":70,"line":1387},[68,12481,2191],{"class":331},[68,12483,11087],{"class":335},[68,12485,381],{"class":331},[68,12487,9155],{"class":82},[68,12489,1498],{"class":335},[68,12491,12492,12495],{"class":70,"line":1402},[68,12493,12494],{"class":393},"    \u002F\u002Fint &c;",[68,12496,12497],{"class":393}," \u002F\u002F错误，引用必须初始化\n",[68,12499,12500,12502,12504,12506,12508,12511],{"class":70,"line":1408},[68,12501,2191],{"class":331},[68,12503,10789],{"class":331},[68,12505,3152],{"class":335},[68,12507,381],{"class":331},[68,12509,12510],{"class":335}," a;",[68,12512,12513],{"class":393}," \u002F\u002F一旦初始化后，就不可以更改\n",[68,12515,12516,12519,12521,12524],{"class":70,"line":1422},[68,12517,12518],{"class":335},"    c ",[68,12520,381],{"class":331},[68,12522,12523],{"class":335}," b;",[68,12525,12526],{"class":393}," \u002F\u002F这是赋值操作，不是更改引用\n",[68,12528,12529,12531,12533,12535,12537,12539,12541,12543],{"class":70,"line":1428},[68,12530,6734],{"class":335},[68,12532,1376],{"class":331},[68,12534,12306],{"class":78},[68,12536,1652],{"class":331},[68,12538,11074],{"class":335},[68,12540,1376],{"class":331},[68,12542,11674],{"class":335},[68,12544,7458],{"class":393},[68,12546,12547,12549,12551,12553,12555,12557,12559,12561],{"class":70,"line":1519},[68,12548,6734],{"class":335},[68,12550,1376],{"class":331},[68,12552,12325],{"class":78},[68,12554,1652],{"class":331},[68,12556,11087],{"class":335},[68,12558,1376],{"class":331},[68,12560,11674],{"class":335},[68,12562,7458],{"class":393},[68,12564,12565,12567,12569,12572,12574,12577,12579,12581],{"class":70,"line":1525},[68,12566,6734],{"class":335},[68,12568,1376],{"class":331},[68,12570,12571],{"class":78}," \"c = \"",[68,12573,1652],{"class":331},[68,12575,12576],{"class":335}," c ",[68,12578,1376],{"class":331},[68,12580,11674],{"class":335},[68,12582,7458],{"class":393},[68,12584,12585,12587,12589,12591],{"class":70,"line":1537},[68,12586,2509],{"class":74},[68,12588,336],{"class":335},[68,12590,2514],{"class":78},[68,12592,2925],{"class":335},[68,12594,12595,12597,12599],{"class":70,"line":1819},[68,12596,4296],{"class":331},[68,12598,4299],{"class":82},[68,12600,1498],{"class":335},[68,12602,12603],{"class":70,"line":1824},[68,12604,1772],{"class":335},[14,12606,12608],{"id":12607},"_63引用做函数参数","6.3引用做函数参数",[19,12610,12611],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12613,12614],{},"优点：可以简化指针修改实参",[58,12616,12618],{"className":322,"code":12617,"language":324,"meta":63,"style":63},"\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",[65,12619,12620,12625,12648,12659,12669,12678,12682,12686,12691,12713,12725,12737,12747,12751,12755,12760,12782,12792,12800,12808,12812,12816,12824,12828,12840,12852,12856,12867,12893,12897,12917,12941,12945,12955,12979,12983,12993,12997,13005],{"__ignoreMap":63},[68,12621,12622],{"class":70,"line":71},[68,12623,12624],{"class":393},"\u002F\u002F1. 值传递\n",[68,12626,12627,12629,12632,12634,12636,12638,12641,12643,12645],{"class":70,"line":92},[68,12628,5569],{"class":331},[68,12630,12631],{"class":74}," mySwap01",[68,12633,336],{"class":335},[68,12635,339],{"class":331},[68,12637,1606],{"class":5421},[68,12639,12640],{"class":335},", ",[68,12642,339],{"class":331},[68,12644,3039],{"class":5421},[68,12646,12647],{"class":335},") {\n",[68,12649,12650,12652,12655,12657],{"class":70,"line":1387},[68,12651,2191],{"class":331},[68,12653,12654],{"class":335}," temp ",[68,12656,381],{"class":331},[68,12658,1640],{"class":335},[68,12660,12661,12664,12666],{"class":70,"line":1402},[68,12662,12663],{"class":335},"    a ",[68,12665,381],{"class":331},[68,12667,12668],{"class":335}," b;\n",[68,12670,12671,12673,12675],{"class":70,"line":1408},[68,12672,12344],{"class":335},[68,12674,381],{"class":331},[68,12676,12677],{"class":335}," temp;\n",[68,12679,12680],{"class":70,"line":1422},[68,12681,1772],{"class":335},[68,12683,12684],{"class":70,"line":1428},[68,12685,2606],{"emptyLinePlaceholder":260},[68,12687,12688],{"class":70,"line":1519},[68,12689,12690],{"class":393},"\u002F\u002F2. 地址传递\n",[68,12692,12693,12695,12698,12700,12703,12705,12707,12709,12711],{"class":70,"line":1525},[68,12694,5569],{"class":331},[68,12696,12697],{"class":74}," mySwap02",[68,12699,336],{"class":335},[68,12701,12702],{"class":331},"int*",[68,12704,1606],{"class":5421},[68,12706,12640],{"class":335},[68,12708,12702],{"class":331},[68,12710,3039],{"class":5421},[68,12712,12647],{"class":335},[68,12714,12715,12717,12719,12721,12723],{"class":70,"line":1537},[68,12716,2191],{"class":331},[68,12718,12654],{"class":335},[68,12720,381],{"class":331},[68,12722,6723],{"class":331},[68,12724,6402],{"class":335},[68,12726,12727,12729,12731,12733,12735],{"class":70,"line":1819},[68,12728,6608],{"class":331},[68,12730,11124],{"class":335},[68,12732,381],{"class":331},[68,12734,6723],{"class":331},[68,12736,6274],{"class":335},[68,12738,12739,12741,12743,12745],{"class":70,"line":1824},[68,12740,6608],{"class":331},[68,12742,11150],{"class":335},[68,12744,381],{"class":331},[68,12746,12677],{"class":335},[68,12748,12749],{"class":70,"line":1830},[68,12750,1772],{"class":335},[68,12752,12753],{"class":70,"line":1835},[68,12754,2606],{"emptyLinePlaceholder":260},[68,12756,12757],{"class":70,"line":1849},[68,12758,12759],{"class":393},"\u002F\u002F3. 引用传递\n",[68,12761,12762,12764,12767,12769,12772,12774,12776,12778,12780],{"class":70,"line":1854},[68,12763,5569],{"class":331},[68,12765,12766],{"class":74}," mySwap03",[68,12768,336],{"class":335},[68,12770,12771],{"class":331},"int&",[68,12773,1606],{"class":5421},[68,12775,12640],{"class":335},[68,12777,12771],{"class":331},[68,12779,3039],{"class":5421},[68,12781,12647],{"class":335},[68,12783,12784,12786,12788,12790],{"class":70,"line":1860},[68,12785,2191],{"class":331},[68,12787,12654],{"class":335},[68,12789,381],{"class":331},[68,12791,1640],{"class":335},[68,12793,12794,12796,12798],{"class":70,"line":1881},[68,12795,12663],{"class":335},[68,12797,381],{"class":331},[68,12799,12668],{"class":335},[68,12801,12802,12804,12806],{"class":70,"line":1886},[68,12803,12344],{"class":335},[68,12805,381],{"class":331},[68,12807,12677],{"class":335},[68,12809,12810],{"class":70,"line":1900},[68,12811,1772],{"class":335},[68,12813,12814],{"class":70,"line":1905},[68,12815,2606],{"emptyLinePlaceholder":260},[68,12817,12818,12820,12822],{"class":70,"line":1934},[68,12819,339],{"class":331},[68,12821,2179],{"class":74},[68,12823,11058],{"class":335},[68,12825,12826],{"class":70,"line":1939},[68,12827,2606],{"emptyLinePlaceholder":260},[68,12829,12830,12832,12834,12836,12838],{"class":70,"line":1956},[68,12831,2191],{"class":331},[68,12833,11074],{"class":335},[68,12835,381],{"class":331},[68,12837,2244],{"class":82},[68,12839,1498],{"class":335},[68,12841,12842,12844,12846,12848,12850],{"class":70,"line":1961},[68,12843,2191],{"class":331},[68,12845,11087],{"class":335},[68,12847,381],{"class":331},[68,12849,9155],{"class":82},[68,12851,1498],{"class":335},[68,12853,12854],{"class":70,"line":1966},[68,12855,2606],{"emptyLinePlaceholder":260},[68,12857,12858,12861,12864],{"class":70,"line":1971},[68,12859,12860],{"class":74},"    mySwap01",[68,12862,12863],{"class":335},"(a, b);",[68,12865,12866],{"class":393},"\u002F\u002F值传递，形参不会修饰实参\n",[68,12868,12869,12871,12873,12876,12878,12880,12882,12885,12887,12889,12891],{"class":70,"line":1985},[68,12870,6734],{"class":335},[68,12872,1376],{"class":331},[68,12874,12875],{"class":78}," \"a:\"",[68,12877,1652],{"class":331},[68,12879,11074],{"class":335},[68,12881,1376],{"class":331},[68,12883,12884],{"class":78}," \" b:\"",[68,12886,1652],{"class":331},[68,12888,11087],{"class":335},[68,12890,1376],{"class":331},[68,12892,9045],{"class":335},[68,12894,12895],{"class":70,"line":1990},[68,12896,2606],{"emptyLinePlaceholder":260},[68,12898,12899,12902,12904,12906,12909,12911,12914],{"class":70,"line":2783},[68,12900,12901],{"class":74},"    mySwap02",[68,12903,336],{"class":335},[68,12905,686],{"class":331},[68,12907,12908],{"class":335},"a, ",[68,12910,686],{"class":331},[68,12912,12913],{"class":335},"b);",[68,12915,12916],{"class":393},"\u002F\u002F地址传递，形参会修饰实参\n",[68,12918,12919,12921,12923,12925,12927,12929,12931,12933,12935,12937,12939],{"class":70,"line":2797},[68,12920,6734],{"class":335},[68,12922,1376],{"class":331},[68,12924,12875],{"class":78},[68,12926,1652],{"class":331},[68,12928,11074],{"class":335},[68,12930,1376],{"class":331},[68,12932,12884],{"class":78},[68,12934,1652],{"class":331},[68,12936,11087],{"class":335},[68,12938,1376],{"class":331},[68,12940,9045],{"class":335},[68,12942,12943],{"class":70,"line":2805},[68,12944,2606],{"emptyLinePlaceholder":260},[68,12946,12947,12950,12952],{"class":70,"line":2810},[68,12948,12949],{"class":74},"    mySwap03",[68,12951,12863],{"class":335},[68,12953,12954],{"class":393},"\u002F\u002F引用传递，形参会修饰实参\n",[68,12956,12957,12959,12961,12963,12965,12967,12969,12971,12973,12975,12977],{"class":70,"line":2816},[68,12958,6734],{"class":335},[68,12960,1376],{"class":331},[68,12962,12875],{"class":78},[68,12964,1652],{"class":331},[68,12966,11074],{"class":335},[68,12968,1376],{"class":331},[68,12970,12884],{"class":78},[68,12972,1652],{"class":331},[68,12974,11087],{"class":335},[68,12976,1376],{"class":331},[68,12978,9045],{"class":335},[68,12980,12981],{"class":70,"line":2822},[68,12982,2606],{"emptyLinePlaceholder":260},[68,12984,12985,12987,12989,12991],{"class":70,"line":2827},[68,12986,2509],{"class":74},[68,12988,336],{"class":335},[68,12990,2514],{"class":78},[68,12992,2925],{"class":335},[68,12994,12995],{"class":70,"line":8153},[68,12996,2606],{"emptyLinePlaceholder":260},[68,12998,12999,13001,13003],{"class":70,"line":8177},[68,13000,4296],{"class":331},[68,13002,4299],{"class":82},[68,13004,1498],{"class":335},[68,13006,13007],{"class":70,"line":8182},[68,13008,1772],{"class":335},[14,13010,13012],{"id":13011},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13014,13015],{},"作用：引用是可以作为函数的返回值存在的",[19,13017,9230,13018],{},[483,13019,13020],{},"不要返回局部变量引用",[19,13022,13023],{},"用法：函数调用作为左值",[58,13025,13027],{"className":10146,"code":13026,"language":10148,"meta":63,"style":63},"\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",[65,13028,13029,13034,13042,13057,13063,13067,13071,13076,13084,13101,13107,13111,13115,13123,13127,13132,13146,13166,13185,13189,13194,13207,13227,13245,13249,13265,13269,13288,13306,13310,13320,13324,13332],{"__ignoreMap":63},[68,13030,13031],{"class":70,"line":71},[68,13032,13033],{"class":393},"\u002F\u002F返回局部变量引用\n",[68,13035,13036,13038,13040],{"class":70,"line":92},[68,13037,12771],{"class":331},[68,13039,5793],{"class":74},[68,13041,11058],{"class":335},[68,13043,13044,13046,13048,13050,13052,13054],{"class":70,"line":1387},[68,13045,2191],{"class":331},[68,13047,11074],{"class":335},[68,13049,381],{"class":331},[68,13051,2244],{"class":82},[68,13053,390],{"class":335},[68,13055,13056],{"class":393}," \u002F\u002F局部变量\n",[68,13058,13059,13061],{"class":70,"line":1402},[68,13060,4296],{"class":331},[68,13062,1640],{"class":335},[68,13064,13065],{"class":70,"line":1408},[68,13066,1772],{"class":335},[68,13068,13069],{"class":70,"line":1422},[68,13070,2606],{"emptyLinePlaceholder":260},[68,13072,13073],{"class":70,"line":1428},[68,13074,13075],{"class":393},"\u002F\u002F返回静态变量引用\n",[68,13077,13078,13080,13082],{"class":70,"line":1519},[68,13079,12771],{"class":331},[68,13081,5862],{"class":74},[68,13083,11058],{"class":335},[68,13085,13086,13088,13090,13092,13094,13096,13098],{"class":70,"line":1525},[68,13087,11225],{"class":331},[68,13089,2588],{"class":331},[68,13091,11074],{"class":335},[68,13093,381],{"class":331},[68,13095,9155],{"class":82},[68,13097,390],{"class":335},[68,13099,13100],{"class":393},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[68,13102,13103,13105],{"class":70,"line":1537},[68,13104,4296],{"class":331},[68,13106,1640],{"class":335},[68,13108,13109],{"class":70,"line":1819},[68,13110,1772],{"class":335},[68,13112,13113],{"class":70,"line":1824},[68,13114,2606],{"emptyLinePlaceholder":260},[68,13116,13117,13119,13121],{"class":70,"line":1830},[68,13118,339],{"class":331},[68,13120,2179],{"class":74},[68,13122,11058],{"class":335},[68,13124,13125],{"class":70,"line":1835},[68,13126,2606],{"emptyLinePlaceholder":260},[68,13128,13129],{"class":70,"line":1849},[68,13130,13131],{"class":393},"    \u002F\u002F不能返回局部变量的引用\n",[68,13133,13134,13137,13140,13142,13144],{"class":70,"line":1854},[68,13135,13136],{"class":331},"    int&",[68,13138,13139],{"class":335}," ref ",[68,13141,381],{"class":331},[68,13143,5793],{"class":74},[68,13145,5841],{"class":335},[68,13147,13148,13150,13152,13155,13157,13159,13161,13163],{"class":70,"line":1860},[68,13149,6734],{"class":335},[68,13151,1376],{"class":331},[68,13153,13154],{"class":78}," \"ref = \"",[68,13156,1652],{"class":331},[68,13158,13139],{"class":335},[68,13160,1376],{"class":331},[68,13162,11674],{"class":335},[68,13164,13165],{"class":393},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[68,13167,13168,13170,13172,13174,13176,13178,13180,13182],{"class":70,"line":1881},[68,13169,6734],{"class":335},[68,13171,1376],{"class":331},[68,13173,13154],{"class":78},[68,13175,1652],{"class":331},[68,13177,13139],{"class":335},[68,13179,1376],{"class":331},[68,13181,11674],{"class":335},[68,13183,13184],{"class":393},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[68,13186,13187],{"class":70,"line":1886},[68,13188,2606],{"emptyLinePlaceholder":260},[68,13190,13191],{"class":70,"line":1900},[68,13192,13193],{"class":393},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[68,13195,13196,13198,13201,13203,13205],{"class":70,"line":1905},[68,13197,13136],{"class":331},[68,13199,13200],{"class":335}," ref2 ",[68,13202,381],{"class":331},[68,13204,5862],{"class":74},[68,13206,5841],{"class":335},[68,13208,13209,13211,13213,13216,13218,13220,13222,13224],{"class":70,"line":1934},[68,13210,6734],{"class":335},[68,13212,1376],{"class":331},[68,13214,13215],{"class":78}," \"ref2 = \"",[68,13217,1652],{"class":331},[68,13219,13200],{"class":335},[68,13221,1376],{"class":331},[68,13223,11674],{"class":335},[68,13225,13226],{"class":393}," \u002F\u002F20\n",[68,13228,13229,13231,13233,13235,13237,13239,13241,13243],{"class":70,"line":1939},[68,13230,6734],{"class":335},[68,13232,1376],{"class":331},[68,13234,13215],{"class":78},[68,13236,1652],{"class":331},[68,13238,13200],{"class":335},[68,13240,1376],{"class":331},[68,13242,11674],{"class":335},[68,13244,13226],{"class":393},[68,13246,13247],{"class":70,"line":1956},[68,13248,2606],{"emptyLinePlaceholder":260},[68,13250,13251,13253,13256,13258,13260,13262],{"class":70,"line":1961},[68,13252,5907],{"class":74},[68,13254,13255],{"class":335},"() ",[68,13257,381],{"class":331},[68,13259,3205],{"class":82},[68,13261,390],{"class":335},[68,13263,13264],{"class":393},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[68,13266,13267],{"class":70,"line":1966},[68,13268,2606],{"emptyLinePlaceholder":260},[68,13270,13271,13273,13275,13277,13279,13281,13283,13285],{"class":70,"line":1971},[68,13272,6734],{"class":335},[68,13274,1376],{"class":331},[68,13276,13215],{"class":78},[68,13278,1652],{"class":331},[68,13280,13200],{"class":335},[68,13282,1376],{"class":331},[68,13284,11674],{"class":335},[68,13286,13287],{"class":393}," \u002F\u002F1000\n",[68,13289,13290,13292,13294,13296,13298,13300,13302,13304],{"class":70,"line":1985},[68,13291,6734],{"class":335},[68,13293,1376],{"class":331},[68,13295,13215],{"class":78},[68,13297,1652],{"class":331},[68,13299,13200],{"class":335},[68,13301,1376],{"class":331},[68,13303,11674],{"class":335},[68,13305,13287],{"class":393},[68,13307,13308],{"class":70,"line":1990},[68,13309,2606],{"emptyLinePlaceholder":260},[68,13311,13312,13314,13316,13318],{"class":70,"line":2783},[68,13313,2509],{"class":74},[68,13315,336],{"class":335},[68,13317,2514],{"class":78},[68,13319,2925],{"class":335},[68,13321,13322],{"class":70,"line":2797},[68,13323,2606],{"emptyLinePlaceholder":260},[68,13325,13326,13328,13330],{"class":70,"line":2805},[68,13327,4296],{"class":331},[68,13329,4299],{"class":82},[68,13331,1498],{"class":335},[68,13333,13334],{"class":70,"line":2810},[68,13335,1772],{"class":335},[14,13337,13339],{"id":13338},"_65引用的本质","6.5引用的本质",[19,13341,13342,13343],{},"本质：",[483,13344,13345],{},"引用的本质在c++内部实现是一个指针常量.",[58,13347,13349],{"className":322,"code":13348,"language":324,"meta":63,"style":63},"\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",[65,13350,13351,13356,13372,13386,13390,13399,13411,13416,13421,13432,13445,13449,13465,13482,13486,13494,13502],{"__ignoreMap":63},[68,13352,13353],{"class":70,"line":71},[68,13354,13355],{"class":393},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[68,13357,13358,13360,13362,13364,13366,13369],{"class":70,"line":92},[68,13359,5569],{"class":331},[68,13361,11590],{"class":74},[68,13363,336],{"class":335},[68,13365,12771],{"class":331},[68,13367,13368],{"class":5421}," ref",[68,13370,13371],{"class":335},"){\n",[68,13373,13374,13377,13379,13381,13383],{"class":70,"line":1387},[68,13375,13376],{"class":335},"    ref ",[68,13378,381],{"class":331},[68,13380,5959],{"class":82},[68,13382,390],{"class":335},[68,13384,13385],{"class":393}," \u002F\u002F ref是引用，转换为*ref = 100\n",[68,13387,13388],{"class":70,"line":1402},[68,13389,1772],{"class":335},[68,13391,13392,13394,13396],{"class":70,"line":1408},[68,13393,339],{"class":331},[68,13395,2179],{"class":74},[68,13397,13398],{"class":335},"(){\n",[68,13400,13401,13403,13405,13407,13409],{"class":70,"line":1422},[68,13402,2191],{"class":331},[68,13404,11074],{"class":335},[68,13406,381],{"class":331},[68,13408,2244],{"class":82},[68,13410,1498],{"class":335},[68,13412,13413],{"class":70,"line":1428},[68,13414,13415],{"class":335},"    \n",[68,13417,13418],{"class":70,"line":1519},[68,13419,13420],{"class":393},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[68,13422,13423,13425,13427,13429],{"class":70,"line":1525},[68,13424,13136],{"class":331},[68,13426,13139],{"class":335},[68,13428,381],{"class":331},[68,13430,13431],{"class":335}," a; \n",[68,13433,13434,13436,13438,13440,13442],{"class":70,"line":1537},[68,13435,13376],{"class":335},[68,13437,381],{"class":331},[68,13439,9155],{"class":82},[68,13441,390],{"class":335},[68,13443,13444],{"class":393}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[68,13446,13447],{"class":70,"line":1819},[68,13448,13415],{"class":335},[68,13450,13451,13453,13455,13457,13459,13461,13463],{"class":70,"line":1824},[68,13452,6734],{"class":335},[68,13454,1376],{"class":331},[68,13456,12875],{"class":78},[68,13458,1652],{"class":331},[68,13460,11074],{"class":335},[68,13462,1376],{"class":331},[68,13464,9045],{"class":335},[68,13466,13467,13469,13471,13474,13476,13478,13480],{"class":70,"line":1830},[68,13468,6734],{"class":335},[68,13470,1376],{"class":331},[68,13472,13473],{"class":78}," \"ref:\"",[68,13475,1652],{"class":331},[68,13477,13139],{"class":335},[68,13479,1376],{"class":331},[68,13481,9045],{"class":335},[68,13483,13484],{"class":70,"line":1835},[68,13485,13415],{"class":335},[68,13487,13488,13491],{"class":70,"line":1849},[68,13489,13490],{"class":74},"    func",[68,13492,13493],{"class":335},"(a);\n",[68,13495,13496,13498,13500],{"class":70,"line":1854},[68,13497,4296],{"class":331},[68,13499,4299],{"class":82},[68,13501,1498],{"class":335},[68,13503,13504],{"class":70,"line":1860},[68,13505,1772],{"class":335},[19,13507,11537],{},[23,13509,13510,13513],{},[26,13511,13512],{},"引用的本质，就是一个指针常量",[26,13514,13515],{},"引用一旦初始化，就不可以发生改变",[14,13517,13519],{"id":13518},"_66常量引用","6.6常量引用",[19,13521,13522],{},"作用：常量引用主要用来修饰形参",[19,13524,13525,13526,13529],{},"在函数形参列表中，可以加",[483,13527,13528],{},"const修饰形参","，防止形参改变实参",[58,13531,13533],{"className":322,"code":13532,"language":324,"meta":63,"style":63},"\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",[65,13534,13535,13540,13545,13564,13569,13582,13586,13590,13598,13602,13607,13612,13626,13630,13638,13650,13654,13659,13671,13678,13682,13692,13696,13704],{"__ignoreMap":63},[68,13536,13537],{"class":70,"line":71},[68,13538,13539],{"class":393},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[68,13541,13542],{"class":70,"line":92},[68,13543,13544],{"class":393},"\u002F\u002F加上const就不能修改实参的\n",[68,13546,13547,13549,13552,13554,13556,13559,13562],{"class":70,"line":1387},[68,13548,5569],{"class":331},[68,13550,13551],{"class":74}," showValue",[68,13553,336],{"class":335},[68,13555,6997],{"class":331},[68,13557,13558],{"class":331}," int&",[68,13560,13561],{"class":5421}," v",[68,13563,12647],{"class":335},[68,13565,13566],{"class":70,"line":1402},[68,13567,13568],{"class":393},"    \u002F\u002Fv += 100;\n",[68,13570,13571,13573,13575,13578,13580],{"class":70,"line":1408},[68,13572,6734],{"class":335},[68,13574,1376],{"class":331},[68,13576,13577],{"class":335}," v ",[68,13579,1376],{"class":331},[68,13581,9045],{"class":335},[68,13583,13584],{"class":70,"line":1422},[68,13585,1772],{"class":335},[68,13587,13588],{"class":70,"line":1428},[68,13589,2606],{"emptyLinePlaceholder":260},[68,13591,13592,13594,13596],{"class":70,"line":1519},[68,13593,339],{"class":331},[68,13595,2179],{"class":74},[68,13597,11058],{"class":335},[68,13599,13600],{"class":70,"line":1525},[68,13601,2606],{"emptyLinePlaceholder":260},[68,13603,13604],{"class":70,"line":1537},[68,13605,13606],{"class":393},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[68,13608,13609],{"class":70,"line":1819},[68,13610,13611],{"class":393},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[68,13613,13614,13616,13618,13620,13622,13624],{"class":70,"line":1824},[68,13615,11426],{"class":331},[68,13617,13558],{"class":331},[68,13619,13139],{"class":335},[68,13621,381],{"class":331},[68,13623,2244],{"class":82},[68,13625,1498],{"class":335},[68,13627,13628],{"class":70,"line":1830},[68,13629,2606],{"emptyLinePlaceholder":260},[68,13631,13632,13635],{"class":70,"line":1835},[68,13633,13634],{"class":393},"    \u002F\u002Fref = 100;",[68,13636,13637],{"class":393},"  \u002F\u002F加入const后不可以修改变量\n",[68,13639,13640,13642,13644,13646,13648],{"class":70,"line":1849},[68,13641,6734],{"class":335},[68,13643,1376],{"class":331},[68,13645,13139],{"class":335},[68,13647,1376],{"class":331},[68,13649,9045],{"class":335},[68,13651,13652],{"class":70,"line":1854},[68,13653,2606],{"emptyLinePlaceholder":260},[68,13655,13656],{"class":70,"line":1860},[68,13657,13658],{"class":393},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[68,13660,13661,13663,13665,13667,13669],{"class":70,"line":1881},[68,13662,2191],{"class":331},[68,13664,11074],{"class":335},[68,13666,381],{"class":331},[68,13668,2244],{"class":82},[68,13670,1498],{"class":335},[68,13672,13673,13676],{"class":70,"line":1886},[68,13674,13675],{"class":74},"    showValue",[68,13677,13493],{"class":335},[68,13679,13680],{"class":70,"line":1900},[68,13681,2606],{"emptyLinePlaceholder":260},[68,13683,13684,13686,13688,13690],{"class":70,"line":1905},[68,13685,2509],{"class":74},[68,13687,336],{"class":335},[68,13689,2514],{"class":78},[68,13691,2925],{"class":335},[68,13693,13694],{"class":70,"line":1934},[68,13695,2606],{"emptyLinePlaceholder":260},[68,13697,13698,13700,13702],{"class":70,"line":1939},[68,13699,4296],{"class":331},[68,13701,4299],{"class":82},[68,13703,1498],{"class":335},[68,13705,13706],{"class":70,"line":1956},[68,13707,1772],{"class":335},[250,13709,13710],{},"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":63,"searchDepth":92,"depth":92,"links":13712},[13713,13714,13715,13716,13717,13718],{"id":12245,"depth":92,"text":12246},{"id":12424,"depth":92,"text":12425},{"id":12607,"depth":92,"text":12608},{"id":13011,"depth":92,"text":13012},{"id":13338,"depth":92,"text":13339},{"id":13518,"depth":92,"text":13519},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12237,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13725,"title":13726,"body":13727,"description":63,"extension":258,"meta":14808,"navigation":260,"path":14809,"seo":14810,"stem":14811,"__hash__":14812},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13728,"toc":14800},[13729,13732,13736,13739,13744,13976,13978,13989,13993,13996,14004,14108,14111,14115,14118,14122,14125,14130,14152,14158,14485,14488,14492,14500,14797],[10,13730,13726],{"id":13731},"_7函数高级部分",[14,13733,13735],{"id":13734},"_71函数默认参数","7.1函数默认参数",[19,13737,13738],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13740,5387,13741],{},[65,13742,13743],{}," 返回值类型  函数名 （参数= 默认值）{}",[58,13745,13747],{"className":322,"code":13746,"language":324,"meta":63,"style":63},"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",[65,13748,13749,13784,13799,13803,13807,13812,13817,13846,13866,13876,13880,13884,13892,13896,13924,13946,13950,13960,13964,13972],{"__ignoreMap":63},[68,13750,13751,13753,13755,13757,13759,13761,13763,13765,13767,13770,13772,13774,13776,13778,13780,13782],{"class":70,"line":71},[68,13752,339],{"class":331},[68,13754,11590],{"class":74},[68,13756,336],{"class":335},[68,13758,339],{"class":331},[68,13760,1606],{"class":5421},[68,13762,12640],{"class":335},[68,13764,339],{"class":331},[68,13766,3039],{"class":5421},[68,13768,13769],{"class":331}," =",[68,13771,2244],{"class":82},[68,13773,12640],{"class":335},[68,13775,339],{"class":331},[68,13777,3055],{"class":5421},[68,13779,13769],{"class":331},[68,13781,2244],{"class":82},[68,13783,12647],{"class":335},[68,13785,13786,13788,13790,13792,13794,13796],{"class":70,"line":92},[68,13787,4296],{"class":331},[68,13789,11074],{"class":335},[68,13791,814],{"class":331},[68,13793,11087],{"class":335},[68,13795,814],{"class":331},[68,13797,13798],{"class":335}," c;\n",[68,13800,13801],{"class":70,"line":1387},[68,13802,1772],{"class":335},[68,13804,13805],{"class":70,"line":1402},[68,13806,2606],{"emptyLinePlaceholder":260},[68,13808,13809],{"class":70,"line":1408},[68,13810,13811],{"class":393},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[68,13813,13814],{"class":70,"line":1422},[68,13815,13816],{"class":393},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[68,13818,13819,13821,13824,13826,13828,13830,13832,13834,13836,13838,13840,13842,13844],{"class":70,"line":1428},[68,13820,339],{"class":331},[68,13822,13823],{"class":74}," func2",[68,13825,336],{"class":335},[68,13827,339],{"class":331},[68,13829,1606],{"class":5421},[68,13831,13769],{"class":331},[68,13833,2244],{"class":82},[68,13835,12640],{"class":335},[68,13837,339],{"class":331},[68,13839,3039],{"class":5421},[68,13841,13769],{"class":331},[68,13843,2244],{"class":82},[68,13845,2925],{"class":335},[68,13847,13848,13850,13852,13854,13856,13858,13860,13862,13864],{"class":70,"line":1519},[68,13849,339],{"class":331},[68,13851,13823],{"class":74},[68,13853,336],{"class":335},[68,13855,339],{"class":331},[68,13857,1606],{"class":5421},[68,13859,12640],{"class":335},[68,13861,339],{"class":331},[68,13863,3039],{"class":5421},[68,13865,12647],{"class":335},[68,13867,13868,13870,13872,13874],{"class":70,"line":1525},[68,13869,4296],{"class":331},[68,13871,11074],{"class":335},[68,13873,814],{"class":331},[68,13875,12668],{"class":335},[68,13877,13878],{"class":70,"line":1537},[68,13879,1772],{"class":335},[68,13881,13882],{"class":70,"line":1819},[68,13883,2606],{"emptyLinePlaceholder":260},[68,13885,13886,13888,13890],{"class":70,"line":1824},[68,13887,339],{"class":331},[68,13889,2179],{"class":74},[68,13891,11058],{"class":335},[68,13893,13894],{"class":70,"line":1830},[68,13895,2606],{"emptyLinePlaceholder":260},[68,13897,13898,13900,13902,13905,13907,13909,13911,13913,13915,13917,13920,13922],{"class":70,"line":1835},[68,13899,6734],{"class":335},[68,13901,1376],{"class":331},[68,13903,13904],{"class":78}," \"ret = \"",[68,13906,1652],{"class":331},[68,13908,11590],{"class":74},[68,13910,336],{"class":335},[68,13912,1033],{"class":82},[68,13914,12640],{"class":335},[68,13916,1033],{"class":82},[68,13918,13919],{"class":335},") ",[68,13921,1376],{"class":331},[68,13923,9045],{"class":335},[68,13925,13926,13928,13930,13932,13934,13936,13938,13940,13942,13944],{"class":70,"line":1849},[68,13927,6734],{"class":335},[68,13929,1376],{"class":331},[68,13931,13904],{"class":78},[68,13933,1652],{"class":331},[68,13935,11590],{"class":74},[68,13937,336],{"class":335},[68,13939,644],{"class":82},[68,13941,13919],{"class":335},[68,13943,1376],{"class":331},[68,13945,9045],{"class":335},[68,13947,13948],{"class":70,"line":1854},[68,13949,2606],{"emptyLinePlaceholder":260},[68,13951,13952,13954,13956,13958],{"class":70,"line":1860},[68,13953,2509],{"class":74},[68,13955,336],{"class":335},[68,13957,2514],{"class":78},[68,13959,2925],{"class":335},[68,13961,13962],{"class":70,"line":1881},[68,13963,2606],{"emptyLinePlaceholder":260},[68,13965,13966,13968,13970],{"class":70,"line":1886},[68,13967,4296],{"class":331},[68,13969,4299],{"class":82},[68,13971,1498],{"class":335},[68,13973,13974],{"class":70,"line":1900},[68,13975,1772],{"class":335},[19,13977,11537],{},[23,13979,13980,13983,13986],{},[26,13981,13982],{},"我传就用我；没传就用你",[26,13984,13985],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[26,13987,13988],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13990,13992],{"id":13991},"_72函数的占位参数","7.2函数的占位参数",[19,13994,13995],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13997,13998,14000,14001],{},[483,13999,5387],{}," ",[65,14002,14003],{},"返回值类型 函数名 (数据类型){}",[58,14005,14007],{"className":322,"code":14006,"language":324,"meta":63,"style":63},"\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",[65,14008,14009,14014,14032,14045,14049,14057,14061,14078,14082,14092,14096,14104],{"__ignoreMap":63},[68,14010,14011],{"class":70,"line":71},[68,14012,14013],{"class":393},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[68,14015,14016,14018,14020,14022,14024,14026,14028,14030],{"class":70,"line":92},[68,14017,5569],{"class":331},[68,14019,11590],{"class":74},[68,14021,336],{"class":335},[68,14023,339],{"class":331},[68,14025,1606],{"class":5421},[68,14027,12640],{"class":335},[68,14029,339],{"class":331},[68,14031,12647],{"class":335},[68,14033,14034,14036,14038,14041,14043],{"class":70,"line":1387},[68,14035,6734],{"class":335},[68,14037,1376],{"class":331},[68,14039,14040],{"class":78}," \"this is func\"",[68,14042,1652],{"class":331},[68,14044,9045],{"class":335},[68,14046,14047],{"class":70,"line":1402},[68,14048,1772],{"class":335},[68,14050,14051,14053,14055],{"class":70,"line":1408},[68,14052,339],{"class":331},[68,14054,2179],{"class":74},[68,14056,11058],{"class":335},[68,14058,14059],{"class":70,"line":1422},[68,14060,2606],{"emptyLinePlaceholder":260},[68,14062,14063,14065,14067,14069,14071,14073,14075],{"class":70,"line":1428},[68,14064,13490],{"class":74},[68,14066,336],{"class":335},[68,14068,779],{"class":82},[68,14070,711],{"class":335},[68,14072,779],{"class":82},[68,14074,6171],{"class":335},[68,14076,14077],{"class":393}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[68,14079,14080],{"class":70,"line":1519},[68,14081,2606],{"emptyLinePlaceholder":260},[68,14083,14084,14086,14088,14090],{"class":70,"line":1525},[68,14085,2509],{"class":74},[68,14087,336],{"class":335},[68,14089,2514],{"class":78},[68,14091,2925],{"class":335},[68,14093,14094],{"class":70,"line":1537},[68,14095,2606],{"emptyLinePlaceholder":260},[68,14097,14098,14100,14102],{"class":70,"line":1819},[68,14099,4296],{"class":331},[68,14101,4299],{"class":82},[68,14103,1498],{"class":335},[68,14105,14106],{"class":70,"line":1824},[68,14107,1772],{"class":335},[19,14109,14110],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14112,14114],{"id":14113},"_73函数重载","7.3函数重载",[19,14116,14117],{},"意思是函数名是可以相同的",[301,14119,14121],{"id":14120},"_731基本语法","7.3.1基本语法",[19,14123,14124],{},"作用：函数名可以相同，提高复用性",[19,14126,14127],{},[483,14128,14129],{},"函数重载满足条件：",[42,14131,14132,14135,14138],{},[26,14133,14134],{},"同一个作用域下",[26,14136,14137],{},"函数名称相同",[26,14139,14140,14141,14144,14145,14148,14149],{},"函数参数",[483,14142,14143],{},"类型不同","  或者 ",[483,14146,14147],{},"个数不同"," 或者 ",[483,14150,14151],{},"顺序不同",[19,14153,14154,14157],{},[483,14155,14156],{},"注意:","  函数的返回值不可以作为函数重载的条件",[58,14159,14161],{"className":10146,"code":14160,"language":10148,"meta":63,"style":63},"\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",[65,14162,14163,14168,14176,14180,14193,14197,14211,14215,14228,14232,14247,14251,14264,14268,14289,14293,14306,14310,14330,14334,14347,14351,14355,14360,14365,14370,14375,14380,14384,14388,14396,14400,14406,14416,14426,14440,14455,14459,14469,14473,14481],{"__ignoreMap":63},[68,14164,14165],{"class":70,"line":71},[68,14166,14167],{"class":393},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[68,14169,14170,14172,14174],{"class":70,"line":92},[68,14171,5569],{"class":331},[68,14173,11590],{"class":74},[68,14175,2182],{"class":335},[68,14177,14178],{"class":70,"line":1387},[68,14179,1753],{"class":335},[68,14181,14182,14184,14186,14189,14191],{"class":70,"line":1402},[68,14183,6734],{"class":335},[68,14185,1376],{"class":331},[68,14187,14188],{"class":78}," \"func 的调用！\"",[68,14190,1652],{"class":331},[68,14192,9045],{"class":335},[68,14194,14195],{"class":70,"line":1408},[68,14196,1772],{"class":335},[68,14198,14199,14201,14203,14205,14207,14209],{"class":70,"line":1422},[68,14200,5569],{"class":331},[68,14202,11590],{"class":74},[68,14204,336],{"class":335},[68,14206,339],{"class":331},[68,14208,1606],{"class":5421},[68,14210,342],{"class":335},[68,14212,14213],{"class":70,"line":1428},[68,14214,1753],{"class":335},[68,14216,14217,14219,14221,14224,14226],{"class":70,"line":1519},[68,14218,6734],{"class":335},[68,14220,1376],{"class":331},[68,14222,14223],{"class":78}," \"func (int a) 的调用！\"",[68,14225,1652],{"class":331},[68,14227,9045],{"class":335},[68,14229,14230],{"class":70,"line":1525},[68,14231,1772],{"class":335},[68,14233,14234,14236,14238,14240,14243,14245],{"class":70,"line":1537},[68,14235,5569],{"class":331},[68,14237,11590],{"class":74},[68,14239,336],{"class":335},[68,14241,14242],{"class":331},"double",[68,14244,1606],{"class":5421},[68,14246,342],{"class":335},[68,14248,14249],{"class":70,"line":1819},[68,14250,1753],{"class":335},[68,14252,14253,14255,14257,14260,14262],{"class":70,"line":1824},[68,14254,6734],{"class":335},[68,14256,1376],{"class":331},[68,14258,14259],{"class":78}," \"func (double a)的调用！\"",[68,14261,1652],{"class":331},[68,14263,9045],{"class":335},[68,14265,14266],{"class":70,"line":1830},[68,14267,1772],{"class":335},[68,14269,14270,14272,14274,14276,14278,14280,14283,14285,14287],{"class":70,"line":1835},[68,14271,5569],{"class":331},[68,14273,11590],{"class":74},[68,14275,336],{"class":335},[68,14277,339],{"class":331},[68,14279,1606],{"class":5421},[68,14281,14282],{"class":335}," ,",[68,14284,14242],{"class":331},[68,14286,3039],{"class":5421},[68,14288,342],{"class":335},[68,14290,14291],{"class":70,"line":1849},[68,14292,1753],{"class":335},[68,14294,14295,14297,14299,14302,14304],{"class":70,"line":1854},[68,14296,6734],{"class":335},[68,14298,1376],{"class":331},[68,14300,14301],{"class":78}," \"func (int a ,double b) 的调用！\"",[68,14303,1652],{"class":331},[68,14305,9045],{"class":335},[68,14307,14308],{"class":70,"line":1860},[68,14309,1772],{"class":335},[68,14311,14312,14314,14316,14318,14320,14322,14324,14326,14328],{"class":70,"line":1881},[68,14313,5569],{"class":331},[68,14315,11590],{"class":74},[68,14317,336],{"class":335},[68,14319,14242],{"class":331},[68,14321,1606],{"class":5421},[68,14323,14282],{"class":335},[68,14325,339],{"class":331},[68,14327,3039],{"class":5421},[68,14329,342],{"class":335},[68,14331,14332],{"class":70,"line":1886},[68,14333,1753],{"class":335},[68,14335,14336,14338,14340,14343,14345],{"class":70,"line":1900},[68,14337,6734],{"class":335},[68,14339,1376],{"class":331},[68,14341,14342],{"class":78}," \"func (double a ,int b)的调用！\"",[68,14344,1652],{"class":331},[68,14346,9045],{"class":335},[68,14348,14349],{"class":70,"line":1905},[68,14350,1772],{"class":335},[68,14352,14353],{"class":70,"line":1934},[68,14354,2606],{"emptyLinePlaceholder":260},[68,14356,14357],{"class":70,"line":1939},[68,14358,14359],{"class":393},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[68,14361,14362],{"class":70,"line":1956},[68,14363,14364],{"class":393},"\u002F\u002Fint func(double a, int b)\n",[68,14366,14367],{"class":70,"line":1961},[68,14368,14369],{"class":393},"\u002F\u002F{\n",[68,14371,14372],{"class":70,"line":1966},[68,14373,14374],{"class":393},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[68,14376,14377],{"class":70,"line":1971},[68,14378,14379],{"class":393},"\u002F\u002F}\n",[68,14381,14382],{"class":70,"line":1985},[68,14383,2606],{"emptyLinePlaceholder":260},[68,14385,14386],{"class":70,"line":1990},[68,14387,2606],{"emptyLinePlaceholder":260},[68,14389,14390,14392,14394],{"class":70,"line":2783},[68,14391,339],{"class":331},[68,14393,2179],{"class":74},[68,14395,11058],{"class":335},[68,14397,14398],{"class":70,"line":2797},[68,14399,2606],{"emptyLinePlaceholder":260},[68,14401,14402,14404],{"class":70,"line":2805},[68,14403,13490],{"class":74},[68,14405,5841],{"class":335},[68,14407,14408,14410,14412,14414],{"class":70,"line":2810},[68,14409,13490],{"class":74},[68,14411,336],{"class":335},[68,14413,779],{"class":82},[68,14415,2925],{"class":335},[68,14417,14418,14420,14422,14424],{"class":70,"line":2816},[68,14419,13490],{"class":74},[68,14421,336],{"class":335},[68,14423,384],{"class":82},[68,14425,2925],{"class":335},[68,14427,14428,14430,14432,14434,14436,14438],{"class":70,"line":2822},[68,14429,13490],{"class":74},[68,14431,336],{"class":335},[68,14433,779],{"class":82},[68,14435,711],{"class":335},[68,14437,384],{"class":82},[68,14439,2925],{"class":335},[68,14441,14442,14444,14446,14448,14451,14453],{"class":70,"line":2827},[68,14443,13490],{"class":74},[68,14445,336],{"class":335},[68,14447,384],{"class":82},[68,14449,14450],{"class":335}," , ",[68,14452,779],{"class":82},[68,14454,2925],{"class":335},[68,14456,14457],{"class":70,"line":8153},[68,14458,13415],{"class":335},[68,14460,14461,14463,14465,14467],{"class":70,"line":8177},[68,14462,2509],{"class":74},[68,14464,336],{"class":335},[68,14466,2514],{"class":78},[68,14468,2925],{"class":335},[68,14470,14471],{"class":70,"line":8182},[68,14472,2606],{"emptyLinePlaceholder":260},[68,14474,14475,14477,14479],{"class":70,"line":8188},[68,14476,4296],{"class":331},[68,14478,4299],{"class":82},[68,14480,1498],{"class":335},[68,14482,14483],{"class":70,"line":8215},[68,14484,1772],{"class":335},[19,14486,14487],{},"重点：函数返回值不可以作为函数重载条件！",[301,14489,14491],{"id":14490},"_732注意事项","7.3.2注意事项",[42,14493,14494,14497],{},[26,14495,14496],{},"引用作为重载条件!!!",[26,14498,14499],{},"函数重载碰到函数默认参数",[58,14501,14503],{"className":322,"code":14502,"language":324,"meta":63,"style":63},"\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",[65,14504,14505,14510,14515,14519,14535,14539,14552,14556,14560,14578,14582,14595,14599,14603,14607,14612,14616,14640,14644,14657,14661,14665,14679,14683,14696,14700,14704,14712,14716,14728,14738,14751,14755,14759,14767,14771,14781,14785,14793],{"__ignoreMap":63},[68,14506,14507],{"class":70,"line":71},[68,14508,14509],{"class":393},"\u002F\u002F函数重载注意事项\n",[68,14511,14512],{"class":70,"line":92},[68,14513,14514],{"class":393},"\u002F\u002F1、引用作为重载条件\n",[68,14516,14517],{"class":70,"line":1387},[68,14518,2606],{"emptyLinePlaceholder":260},[68,14520,14521,14523,14525,14527,14529,14531,14533],{"class":70,"line":1402},[68,14522,5569],{"class":331},[68,14524,11590],{"class":74},[68,14526,336],{"class":335},[68,14528,339],{"class":331},[68,14530,10789],{"class":331},[68,14532,30],{"class":5421},[68,14534,342],{"class":335},[68,14536,14537],{"class":70,"line":1408},[68,14538,1753],{"class":335},[68,14540,14541,14543,14545,14548,14550],{"class":70,"line":1422},[68,14542,6734],{"class":335},[68,14544,1376],{"class":331},[68,14546,14547],{"class":78}," \"func (int &a) 调用 \"",[68,14549,1652],{"class":331},[68,14551,9045],{"class":335},[68,14553,14554],{"class":70,"line":1428},[68,14555,1772],{"class":335},[68,14557,14558],{"class":70,"line":1519},[68,14559,2606],{"emptyLinePlaceholder":260},[68,14561,14562,14564,14566,14568,14570,14572,14574,14576],{"class":70,"line":1525},[68,14563,5569],{"class":331},[68,14565,11590],{"class":74},[68,14567,336],{"class":335},[68,14569,6997],{"class":331},[68,14571,2588],{"class":331},[68,14573,10789],{"class":331},[68,14575,30],{"class":5421},[68,14577,342],{"class":335},[68,14579,14580],{"class":70,"line":1537},[68,14581,1753],{"class":335},[68,14583,14584,14586,14588,14591,14593],{"class":70,"line":1819},[68,14585,6734],{"class":335},[68,14587,1376],{"class":331},[68,14589,14590],{"class":78}," \"func (const int &a) 调用 \"",[68,14592,1652],{"class":331},[68,14594,9045],{"class":335},[68,14596,14597],{"class":70,"line":1824},[68,14598,1772],{"class":335},[68,14600,14601],{"class":70,"line":1830},[68,14602,2606],{"emptyLinePlaceholder":260},[68,14604,14605],{"class":70,"line":1835},[68,14606,2606],{"emptyLinePlaceholder":260},[68,14608,14609],{"class":70,"line":1849},[68,14610,14611],{"class":393},"\u002F\u002F2、函数重载碰到函数默认参数\n",[68,14613,14614],{"class":70,"line":1854},[68,14615,2606],{"emptyLinePlaceholder":260},[68,14617,14618,14620,14622,14624,14626,14628,14630,14632,14634,14636,14638],{"class":70,"line":1860},[68,14619,5569],{"class":331},[68,14621,13823],{"class":74},[68,14623,336],{"class":335},[68,14625,339],{"class":331},[68,14627,1606],{"class":5421},[68,14629,12640],{"class":335},[68,14631,339],{"class":331},[68,14633,3039],{"class":5421},[68,14635,13769],{"class":331},[68,14637,2244],{"class":82},[68,14639,342],{"class":335},[68,14641,14642],{"class":70,"line":1881},[68,14643,1753],{"class":335},[68,14645,14646,14648,14650,14653,14655],{"class":70,"line":1886},[68,14647,6734],{"class":335},[68,14649,1376],{"class":331},[68,14651,14652],{"class":78}," \"func2(int a, int b = 10) 调用\"",[68,14654,1652],{"class":331},[68,14656,9045],{"class":335},[68,14658,14659],{"class":70,"line":1900},[68,14660,1772],{"class":335},[68,14662,14663],{"class":70,"line":1905},[68,14664,2606],{"emptyLinePlaceholder":260},[68,14666,14667,14669,14671,14673,14675,14677],{"class":70,"line":1934},[68,14668,5569],{"class":331},[68,14670,13823],{"class":74},[68,14672,336],{"class":335},[68,14674,339],{"class":331},[68,14676,1606],{"class":5421},[68,14678,342],{"class":335},[68,14680,14681],{"class":70,"line":1939},[68,14682,1753],{"class":335},[68,14684,14685,14687,14689,14692,14694],{"class":70,"line":1956},[68,14686,6734],{"class":335},[68,14688,1376],{"class":331},[68,14690,14691],{"class":78}," \"func2(int a) 调用\"",[68,14693,1652],{"class":331},[68,14695,9045],{"class":335},[68,14697,14698],{"class":70,"line":1961},[68,14699,1772],{"class":335},[68,14701,14702],{"class":70,"line":1966},[68,14703,2606],{"emptyLinePlaceholder":260},[68,14705,14706,14708,14710],{"class":70,"line":1971},[68,14707,339],{"class":331},[68,14709,2179],{"class":74},[68,14711,11058],{"class":335},[68,14713,14714],{"class":70,"line":1985},[68,14715,13415],{"class":335},[68,14717,14718,14720,14722,14724,14726],{"class":70,"line":1990},[68,14719,2191],{"class":331},[68,14721,11074],{"class":335},[68,14723,381],{"class":331},[68,14725,2244],{"class":82},[68,14727,1498],{"class":335},[68,14729,14730,14732,14735],{"class":70,"line":2783},[68,14731,13490],{"class":74},[68,14733,14734],{"class":335},"(a);",[68,14736,14737],{"class":393}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[68,14739,14740,14742,14744,14746,14748],{"class":70,"line":2797},[68,14741,13490],{"class":74},[68,14743,336],{"class":335},[68,14745,779],{"class":82},[68,14747,6171],{"class":335},[68,14749,14750],{"class":393},"\u002F\u002F调用有const   10是个常量\n",[68,14752,14753],{"class":70,"line":2805},[68,14754,2606],{"emptyLinePlaceholder":260},[68,14756,14757],{"class":70,"line":2810},[68,14758,2606],{"emptyLinePlaceholder":260},[68,14760,14761,14764],{"class":70,"line":2816},[68,14762,14763],{"class":393},"    \u002F\u002Ffunc2(10);",[68,14765,14766],{"class":393}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[68,14768,14769],{"class":70,"line":2822},[68,14770,2606],{"emptyLinePlaceholder":260},[68,14772,14773,14775,14777,14779],{"class":70,"line":2827},[68,14774,2509],{"class":74},[68,14776,336],{"class":335},[68,14778,2514],{"class":78},[68,14780,2925],{"class":335},[68,14782,14783],{"class":70,"line":8153},[68,14784,2606],{"emptyLinePlaceholder":260},[68,14786,14787,14789,14791],{"class":70,"line":8177},[68,14788,4296],{"class":331},[68,14790,4299],{"class":82},[68,14792,1498],{"class":335},[68,14794,14795],{"class":70,"line":8182},[68,14796,1772],{"class":335},[250,14798,14799],{},"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":63,"searchDepth":92,"depth":92,"links":14801},[14802,14803,14804],{"id":13734,"depth":92,"text":13735},{"id":13991,"depth":92,"text":13992},{"id":14113,"depth":92,"text":14114,"children":14805},[14806,14807],{"id":14120,"depth":1387,"text":14121},{"id":14490,"depth":1387,"text":14491},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13726,"description":63},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14814,"title":14815,"body":14816,"description":23570,"extension":258,"meta":23571,"navigation":260,"path":23572,"seo":23573,"stem":23574,"__hash__":23575},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14817,"toc":23551},[14818,14821,14827,14834,14839,14842,14845,14848,14852,14856,14859,14862,14870,14875,14878,14885,14890,15049,15052,15305,15308,15311,15314,15319,15322,15325,15336,15341,15577,15581,15591,15594,15602,15749,15753,15756,15759,15763,16208,16212,16220,16228,17140,17147,17152,17780,17783,17786,17789,17908,17911,17998,18001,18127,18130,18224,18227,18580,18584,18592,18596,18603,18606,18609,18620,18626,18631,18643,18651,18671,18679,18696,18882,18885,18889,18892,18895,18898,18901,18904,18907,18910,19370,19376,19380,19383,19394,19981,19984,20473,20477,20480,20483,20486,20489,20492,20500,20896,20900,20903,20906,21353,21356,21359,21364,21367,21372,21375,21379,21382,21384,21390,21393,21699,21709,21750,21754,21757,21759,21792,21795,22102,22104,22119,22122,22145,22154,22160,22163,22167,22170,22173,22178,22189,22194,22202,22207,22337,22340,22343,22518,22523,22735,22739,22742,22856,22861,23100,23104,23108,23111,23114,23119,23224,23227,23230,23233,23237,23348,23351,23354,23359,23411,23414,23417,23422,23468,23471,23476,23544,23546,23549],[10,14819,14815],{"id":14820},"_8类和对象",[19,14822,14823,14824],{},"C++面向对象的三大特性为",[483,14825,14826],{},"封装、继承、多态",[19,14828,14829,14830,14833],{},"C++认为",[483,14831,14832],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14835,14836],{},[483,14837,14838],{},"例如：",[19,14840,14841],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14843,14844],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14846,14847],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14849,14851],{"id":14850},"_81封装","8.1封装",[301,14853,14855],{"id":14854},"_811封装的意义","8.1.1封装的意义",[19,14857,14858],{},"封装是C++面向对象三大特性之一",[19,14860,14861],{},"封装的意义：",[42,14863,14864,14867],{},[26,14865,14866],{},"将属性和行为作为一个整体，表现生活中的事物",[26,14868,14869],{},"将属性和行为加以权限控制",[19,14871,14872],{},[483,14873,14874],{},"封装意义一：",[19,14876,14877],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14879,14880,14000,14882],{},[483,14881,5387],{},[65,14883,14884],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[23,14886,14887],{},[26,14888,14889],{},"**示例1：**设计一个圆类，求圆的周长",[58,14891,14893],{"className":322,"code":14892,"language":324,"meta":63,"style":63},"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",[65,14894,14895,14903,14907,14912,14917,14922,14927,14934,14939,14949,14953,14971,14975,14979,14987,14991,14996,15001,15006,15011,15022,15045],{"__ignoreMap":63},[68,14896,14897,14900],{"class":70,"line":71},[68,14898,14899],{"class":331},"class",[68,14901,14902],{"class":74}," Circle\n",[68,14904,14905],{"class":70,"line":92},[68,14906,1753],{"class":335},[68,14908,14909],{"class":70,"line":1387},[68,14910,14911],{"class":393},"    \u002F\u002F访问权限\n",[68,14913,14914],{"class":70,"line":1402},[68,14915,14916],{"class":393},"    \u002F\u002F公共权限\n",[68,14918,14919],{"class":70,"line":1408},[68,14920,14921],{"class":331},"public:\n",[68,14923,14924],{"class":70,"line":1422},[68,14925,14926],{"class":393},"    \u002F\u002F属性\n",[68,14928,14929,14931],{"class":70,"line":1428},[68,14930,2191],{"class":331},[68,14932,14933],{"class":335}," m_r;\n",[68,14935,14936],{"class":70,"line":1519},[68,14937,14938],{"class":393},"    \u002F\u002F行为\n",[68,14940,14941,14944,14947],{"class":70,"line":1525},[68,14942,14943],{"class":331},"    double",[68,14945,14946],{"class":74}," calculateZC",[68,14948,2182],{"class":335},[68,14950,14951],{"class":70,"line":1537},[68,14952,2236],{"class":335},[68,14954,14955,14958,14961,14963,14966,14968],{"class":70,"line":1819},[68,14956,14957],{"class":331},"        return",[68,14959,14960],{"class":82}," 2",[68,14962,788],{"class":331},[68,14964,14965],{"class":335},"PI",[68,14967,788],{"class":331},[68,14969,14970],{"class":335},"m_r;\n",[68,14972,14973],{"class":70,"line":1824},[68,14974,2393],{"class":335},[68,14976,14977],{"class":70,"line":1830},[68,14978,4201],{"class":335},[68,14980,14981,14983,14985],{"class":70,"line":1835},[68,14982,339],{"class":331},[68,14984,2179],{"class":74},[68,14986,2182],{"class":335},[68,14988,14989],{"class":70,"line":1849},[68,14990,1753],{"class":335},[68,14992,14993],{"class":70,"line":1854},[68,14994,14995],{"class":393},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[68,14997,14998],{"class":70,"line":1860},[68,14999,15000],{"class":393},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[68,15002,15003],{"class":70,"line":1881},[68,15004,15005],{"class":335},"    Circle c1;\n",[68,15007,15008],{"class":70,"line":1886},[68,15009,15010],{"class":393},"    \u002F\u002F给圆对象 的属性进行赋值\n",[68,15012,15013,15016,15018,15020],{"class":70,"line":1900},[68,15014,15015],{"class":335},"    c1.m_r",[68,15017,381],{"class":331},[68,15019,779],{"class":82},[68,15021,1498],{"class":335},[68,15023,15024,15026,15028,15031,15033,15036,15039,15041,15043],{"class":70,"line":1905},[68,15025,1758],{"class":335},[68,15027,1376],{"class":331},[68,15029,15030],{"class":78},"\"圆的周长\"",[68,15032,1376],{"class":331},[68,15034,15035],{"class":335},"c1.",[68,15037,15038],{"class":74},"calculateZC",[68,15040,2633],{"class":335},[68,15042,1376],{"class":331},[68,15044,1399],{"class":335},[68,15046,15047],{"class":70,"line":1934},[68,15048,1772],{"class":335},[19,15050,15051],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[58,15053,15055],{"className":322,"code":15054,"language":324,"meta":63,"style":63},"#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",[65,15056,15057,15063,15073,15079,15085,15089,15093,15098,15105,15110,15128,15132,15142,15146,15151,15167,15171,15181,15185,15190,15198,15202,15234,15238,15242,15250,15254,15259,15264,15278,15292,15301],{"__ignoreMap":63},[68,15058,15059,15061],{"class":70,"line":71},[68,15060,2156],{"class":331},[68,15062,2159],{"class":78},[68,15064,15065,15067,15069,15071],{"class":70,"line":92},[68,15066,2164],{"class":331},[68,15068,2167],{"class":331},[68,15070,2170],{"class":74},[68,15072,1498],{"class":335},[68,15074,15075,15077],{"class":70,"line":1387},[68,15076,2156],{"class":331},[68,15078,7954],{"class":78},[68,15080,15081,15083],{"class":70,"line":1402},[68,15082,14899],{"class":331},[68,15084,7967],{"class":74},[68,15086,15087],{"class":70,"line":1408},[68,15088,1753],{"class":335},[68,15090,15091],{"class":70,"line":1422},[68,15092,14921],{"class":331},[68,15094,15095],{"class":70,"line":1428},[68,15096,15097],{"class":335},"    string m_name;\n",[68,15099,15100,15102],{"class":70,"line":1519},[68,15101,2191],{"class":331},[68,15103,15104],{"class":335}," m_id;\n",[68,15106,15107],{"class":70,"line":1525},[68,15108,15109],{"class":393},"    \u002F\u002F赋值姓名\n",[68,15111,15112,15115,15118,15120,15123,15126],{"class":70,"line":1537},[68,15113,15114],{"class":331},"    void",[68,15116,15117],{"class":74}," setName",[68,15119,336],{"class":335},[68,15121,15122],{"class":74},"string",[68,15124,15125],{"class":5421}," name",[68,15127,342],{"class":335},[68,15129,15130],{"class":70,"line":1819},[68,15131,2236],{"class":335},[68,15133,15134,15137,15139],{"class":70,"line":1824},[68,15135,15136],{"class":335},"        m_name",[68,15138,381],{"class":331},[68,15140,15141],{"class":335},"name;\n",[68,15143,15144],{"class":70,"line":1830},[68,15145,2393],{"class":335},[68,15147,15148],{"class":70,"line":1835},[68,15149,15150],{"class":393},"    \u002F\u002F赋值学号\n",[68,15152,15153,15155,15158,15160,15162,15165],{"class":70,"line":1849},[68,15154,15114],{"class":331},[68,15156,15157],{"class":74}," setId",[68,15159,336],{"class":335},[68,15161,339],{"class":331},[68,15163,15164],{"class":5421}," id",[68,15166,342],{"class":335},[68,15168,15169],{"class":70,"line":1854},[68,15170,2236],{"class":335},[68,15172,15173,15176,15178],{"class":70,"line":1860},[68,15174,15175],{"class":335},"        m_id",[68,15177,381],{"class":331},[68,15179,15180],{"class":335},"id;\n",[68,15182,15183],{"class":70,"line":1881},[68,15184,2393],{"class":335},[68,15186,15187],{"class":70,"line":1886},[68,15188,15189],{"class":393},"    \u002F\u002F打印学生信息\n",[68,15191,15192,15194,15196],{"class":70,"line":1900},[68,15193,15114],{"class":331},[68,15195,9820],{"class":74},[68,15197,2182],{"class":335},[68,15199,15200],{"class":70,"line":1905},[68,15201,2236],{"class":335},[68,15203,15204,15206,15208,15211,15213,15216,15218,15220,15222,15225,15227,15230,15232],{"class":70,"line":1934},[68,15205,3657],{"class":335},[68,15207,1376],{"class":331},[68,15209,15210],{"class":78},"\"姓名：\"",[68,15212,1376],{"class":331},[68,15214,15215],{"class":335},"m_name",[68,15217,1376],{"class":331},[68,15219,4565],{"class":78},[68,15221,1376],{"class":331},[68,15223,15224],{"class":78},"\"学号：\"",[68,15226,1376],{"class":331},[68,15228,15229],{"class":335},"m_id",[68,15231,1376],{"class":331},[68,15233,1399],{"class":335},[68,15235,15236],{"class":70,"line":1939},[68,15237,2393],{"class":335},[68,15239,15240],{"class":70,"line":1956},[68,15241,4201],{"class":335},[68,15243,15244,15246,15248],{"class":70,"line":1961},[68,15245,339],{"class":331},[68,15247,2179],{"class":74},[68,15249,2182],{"class":335},[68,15251,15252],{"class":70,"line":1966},[68,15253,1753],{"class":335},[68,15255,15256],{"class":70,"line":1971},[68,15257,15258],{"class":393},"    \u002F\u002F实例化\n",[68,15260,15261],{"class":70,"line":1985},[68,15262,15263],{"class":335},"    Student s1;\n",[68,15265,15266,15269,15272,15274,15276],{"class":70,"line":1990},[68,15267,15268],{"class":335},"    s1.",[68,15270,15271],{"class":74},"setName",[68,15273,336],{"class":335},[68,15275,8121],{"class":78},[68,15277,2925],{"class":335},[68,15279,15280,15282,15285,15287,15290],{"class":70,"line":2783},[68,15281,15268],{"class":335},[68,15283,15284],{"class":74},"setId",[68,15286,336],{"class":335},[68,15288,15289],{"class":82},"123456",[68,15291,2925],{"class":335},[68,15293,15294,15296,15299],{"class":70,"line":2797},[68,15295,15268],{"class":335},[68,15297,15298],{"class":74},"printInfo",[68,15300,5841],{"class":335},[68,15302,15303],{"class":70,"line":2805},[68,15304,1772],{"class":335},[19,15306,15307],{},"类中的属性和行为统称为成员",[19,15309,15310],{},"属性：成员属性(成员变量)",[19,15312,15313],{},"方法：成员函数(成员方法)",[19,15315,15316],{},[483,15317,15318],{},"封装意义二：",[19,15320,15321],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15323,15324],{},"访问权限有三种：",[23,15326,15327,15330,15333],{},[26,15328,15329],{},"public        公共权限",[26,15331,15332],{},"protected 保护权限",[26,15334,15335],{},"private      私有权限",[19,15337,15338],{},[483,15339,15340],{},"示例：",[58,15342,15344],{"className":10146,"code":15343,"language":10148,"meta":63,"style":63},"\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",[65,15345,15346,15351,15356,15361,15366,15370,15377,15381,15386,15390,15395,15399,15404,15409,15414,15418,15423,15428,15435,15439,15443,15451,15455,15466,15478,15490,15494,15498,15502,15510,15514,15519,15531,15539,15547,15551,15561,15565,15573],{"__ignoreMap":63},[68,15347,15348],{"class":70,"line":71},[68,15349,15350],{"class":393},"\u002F\u002F三种权限\n",[68,15352,15353],{"class":70,"line":92},[68,15354,15355],{"class":393},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[68,15357,15358],{"class":70,"line":1387},[68,15359,15360],{"class":393},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[68,15362,15363],{"class":70,"line":1402},[68,15364,15365],{"class":393},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[68,15367,15368],{"class":70,"line":1408},[68,15369,2606],{"emptyLinePlaceholder":260},[68,15371,15372,15374],{"class":70,"line":1422},[68,15373,14899],{"class":331},[68,15375,15376],{"class":74}," Person\n",[68,15378,15379],{"class":70,"line":1428},[68,15380,1753],{"class":335},[68,15382,15383],{"class":70,"line":1519},[68,15384,15385],{"class":393},"    \u002F\u002F姓名  公共权限\n",[68,15387,15388],{"class":70,"line":1525},[68,15389,14921],{"class":331},[68,15391,15392],{"class":70,"line":1537},[68,15393,15394],{"class":335},"    string m_Name;\n",[68,15396,15397],{"class":70,"line":1819},[68,15398,2606],{"emptyLinePlaceholder":260},[68,15400,15401],{"class":70,"line":1824},[68,15402,15403],{"class":393},"    \u002F\u002F汽车  保护权限\n",[68,15405,15406],{"class":70,"line":1830},[68,15407,15408],{"class":331},"protected:\n",[68,15410,15411],{"class":70,"line":1835},[68,15412,15413],{"class":335},"    string m_Car;\n",[68,15415,15416],{"class":70,"line":1849},[68,15417,2606],{"emptyLinePlaceholder":260},[68,15419,15420],{"class":70,"line":1854},[68,15421,15422],{"class":393},"    \u002F\u002F银行卡密码  私有权限\n",[68,15424,15425],{"class":70,"line":1860},[68,15426,15427],{"class":331},"private:\n",[68,15429,15430,15432],{"class":70,"line":1881},[68,15431,2191],{"class":331},[68,15433,15434],{"class":335}," m_Password;\n",[68,15436,15437],{"class":70,"line":1886},[68,15438,2606],{"emptyLinePlaceholder":260},[68,15440,15441],{"class":70,"line":1900},[68,15442,14921],{"class":331},[68,15444,15445,15447,15449],{"class":70,"line":1905},[68,15446,15114],{"class":331},[68,15448,11590],{"class":74},[68,15450,2182],{"class":335},[68,15452,15453],{"class":70,"line":1934},[68,15454,2236],{"class":335},[68,15456,15457,15460,15462,15464],{"class":70,"line":1939},[68,15458,15459],{"class":335},"        m_Name ",[68,15461,381],{"class":331},[68,15463,9143],{"class":78},[68,15465,1498],{"class":335},[68,15467,15468,15471,15473,15476],{"class":70,"line":1956},[68,15469,15470],{"class":335},"        m_Car ",[68,15472,381],{"class":331},[68,15474,15475],{"class":78}," \"拖拉机\"",[68,15477,1498],{"class":335},[68,15479,15480,15483,15485,15488],{"class":70,"line":1961},[68,15481,15482],{"class":335},"        m_Password ",[68,15484,381],{"class":331},[68,15486,15487],{"class":82}," 123456",[68,15489,1498],{"class":335},[68,15491,15492],{"class":70,"line":1966},[68,15493,2393],{"class":335},[68,15495,15496],{"class":70,"line":1971},[68,15497,4201],{"class":335},[68,15499,15500],{"class":70,"line":1985},[68,15501,2606],{"emptyLinePlaceholder":260},[68,15503,15504,15506,15508],{"class":70,"line":1990},[68,15505,339],{"class":331},[68,15507,2179],{"class":74},[68,15509,11058],{"class":335},[68,15511,15512],{"class":70,"line":2783},[68,15513,2606],{"emptyLinePlaceholder":260},[68,15515,15516],{"class":70,"line":2797},[68,15517,15518],{"class":335},"    Person p;\n",[68,15520,15521,15524,15526,15529],{"class":70,"line":2805},[68,15522,15523],{"class":335},"    p.m_Name ",[68,15525,381],{"class":331},[68,15527,15528],{"class":78}," \"李四\"",[68,15530,1498],{"class":335},[68,15532,15533,15536],{"class":70,"line":2810},[68,15534,15535],{"class":393},"    \u002F\u002Fp.m_Car = \"奔驰\";",[68,15537,15538],{"class":393},"  \u002F\u002F保护权限类外访问不到\n",[68,15540,15541,15544],{"class":70,"line":2816},[68,15542,15543],{"class":393},"    \u002F\u002Fp.m_Password = 123;",[68,15545,15546],{"class":393}," \u002F\u002F私有权限类外访问不到\n",[68,15548,15549],{"class":70,"line":2822},[68,15550,2606],{"emptyLinePlaceholder":260},[68,15552,15553,15555,15557,15559],{"class":70,"line":2827},[68,15554,2509],{"class":74},[68,15556,336],{"class":335},[68,15558,2514],{"class":78},[68,15560,2925],{"class":335},[68,15562,15563],{"class":70,"line":8153},[68,15564,2606],{"emptyLinePlaceholder":260},[68,15566,15567,15569,15571],{"class":70,"line":8177},[68,15568,4296],{"class":331},[68,15570,4299],{"class":82},[68,15572,1498],{"class":335},[68,15574,15575],{"class":70,"line":8182},[68,15576,1772],{"class":335},[301,15578,15580],{"id":15579},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15582,15583,15584,15587,15588],{},"在C++中 struct和class唯一的",[483,15585,15586],{},"区别","就在于 ",[483,15589,15590],{},"默认的访问权限不同",[19,15592,15593],{},"区别：",[42,15595,15596,15599],{},[26,15597,15598],{},"struct 默认权限为公共",[26,15600,15601],{},"class   默认权限为私有",[58,15603,15605],{"className":10146,"code":15604,"language":10148,"meta":63,"style":63},"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",[65,15606,15607,15614,15618,15628,15632,15636,15643,15647,15657,15661,15665,15673,15677,15682,15696,15700,15705,15719,15723,15733,15737,15745],{"__ignoreMap":63},[68,15608,15609,15611],{"class":70,"line":71},[68,15610,14899],{"class":331},[68,15612,15613],{"class":74}," C1\n",[68,15615,15616],{"class":70,"line":92},[68,15617,1753],{"class":335},[68,15619,15620,15622,15625],{"class":70,"line":1387},[68,15621,2191],{"class":331},[68,15623,15624],{"class":335},"  m_A;",[68,15626,15627],{"class":393}," \u002F\u002F默认是私有权限\n",[68,15629,15630],{"class":70,"line":1402},[68,15631,4201],{"class":335},[68,15633,15634],{"class":70,"line":1408},[68,15635,2606],{"emptyLinePlaceholder":260},[68,15637,15638,15640],{"class":70,"line":1422},[68,15639,7964],{"class":331},[68,15641,15642],{"class":74}," C2\n",[68,15644,15645],{"class":70,"line":1428},[68,15646,1753],{"class":335},[68,15648,15649,15651,15654],{"class":70,"line":1519},[68,15650,2191],{"class":331},[68,15652,15653],{"class":335}," m_A;",[68,15655,15656],{"class":393},"  \u002F\u002F默认是公共权限\n",[68,15658,15659],{"class":70,"line":1525},[68,15660,4201],{"class":335},[68,15662,15663],{"class":70,"line":1537},[68,15664,2606],{"emptyLinePlaceholder":260},[68,15666,15667,15669,15671],{"class":70,"line":1819},[68,15668,339],{"class":331},[68,15670,2179],{"class":74},[68,15672,11058],{"class":335},[68,15674,15675],{"class":70,"line":1824},[68,15676,2606],{"emptyLinePlaceholder":260},[68,15678,15679],{"class":70,"line":1830},[68,15680,15681],{"class":335},"    C1 c1;\n",[68,15683,15684,15687,15689,15691,15693],{"class":70,"line":1835},[68,15685,15686],{"class":335},"    c1.m_A ",[68,15688,381],{"class":331},[68,15690,2244],{"class":82},[68,15692,390],{"class":335},[68,15694,15695],{"class":393}," \u002F\u002F错误，访问权限是私有\n",[68,15697,15698],{"class":70,"line":1849},[68,15699,2606],{"emptyLinePlaceholder":260},[68,15701,15702],{"class":70,"line":1854},[68,15703,15704],{"class":335},"    C2 c2;\n",[68,15706,15707,15710,15712,15714,15716],{"class":70,"line":1860},[68,15708,15709],{"class":335},"    c2.m_A ",[68,15711,381],{"class":331},[68,15713,2244],{"class":82},[68,15715,390],{"class":335},[68,15717,15718],{"class":393}," \u002F\u002F正确，访问权限是公共\n",[68,15720,15721],{"class":70,"line":1881},[68,15722,2606],{"emptyLinePlaceholder":260},[68,15724,15725,15727,15729,15731],{"class":70,"line":1886},[68,15726,2509],{"class":74},[68,15728,336],{"class":335},[68,15730,2514],{"class":78},[68,15732,2925],{"class":335},[68,15734,15735],{"class":70,"line":1900},[68,15736,2606],{"emptyLinePlaceholder":260},[68,15738,15739,15741,15743],{"class":70,"line":1905},[68,15740,4296],{"class":331},[68,15742,4299],{"class":82},[68,15744,1498],{"class":335},[68,15746,15747],{"class":70,"line":1934},[68,15748,1772],{"class":335},[301,15750,15752],{"id":15751},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15754,15755],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15757,15758],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15760,15761],{},[483,15762,15340],{},[58,15764,15766],{"className":10146,"code":15765,"language":10148,"meta":63,"style":63},"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",[65,15767,15768,15778,15782,15786,15791,15805,15814,15818,15828,15832,15839,15843,15847,15851,15856,15865,15872,15876,15881,15897,15920,15933,15940,15944,15953,15957,15961,15966,15982,15992,15996,16000,16004,16012,16016,16026,16030,16038,16042,16046,16054,16058,16062,16067,16080,16103,16107,16112,16125,16147,16151,16156,16170,16178,16182,16192,16196,16204],{"__ignoreMap":63},[68,15769,15770,15772,15775],{"class":70,"line":71},[68,15771,14899],{"class":331},[68,15773,15774],{"class":74}," Person",[68,15776,15777],{"class":335}," {\n",[68,15779,15780],{"class":70,"line":92},[68,15781,14921],{"class":331},[68,15783,15784],{"class":70,"line":1387},[68,15785,2606],{"emptyLinePlaceholder":260},[68,15787,15788],{"class":70,"line":1402},[68,15789,15790],{"class":393},"    \u002F\u002F姓名设置可读可写\n",[68,15792,15793,15795,15797,15799,15801,15803],{"class":70,"line":1408},[68,15794,15114],{"class":331},[68,15796,15117],{"class":74},[68,15798,336],{"class":335},[68,15800,15122],{"class":74},[68,15802,15125],{"class":5421},[68,15804,12647],{"class":335},[68,15806,15807,15809,15811],{"class":70,"line":1422},[68,15808,15459],{"class":335},[68,15810,381],{"class":331},[68,15812,15813],{"class":335}," name;\n",[68,15815,15816],{"class":70,"line":1428},[68,15817,2393],{"class":335},[68,15819,15820,15823,15826],{"class":70,"line":1519},[68,15821,15822],{"class":74},"    string",[68,15824,15825],{"class":74}," getName",[68,15827,2182],{"class":335},[68,15829,15830],{"class":70,"line":1525},[68,15831,2236],{"class":335},[68,15833,15834,15836],{"class":70,"line":1537},[68,15835,14957],{"class":331},[68,15837,15838],{"class":335}," m_Name;\n",[68,15840,15841],{"class":70,"line":1819},[68,15842,2393],{"class":335},[68,15844,15845],{"class":70,"line":1824},[68,15846,2606],{"emptyLinePlaceholder":260},[68,15848,15849],{"class":70,"line":1830},[68,15850,2606],{"emptyLinePlaceholder":260},[68,15852,15853],{"class":70,"line":1835},[68,15854,15855],{"class":393},"    \u002F\u002F获取年龄 \n",[68,15857,15858,15860,15863],{"class":70,"line":1849},[68,15859,2191],{"class":331},[68,15861,15862],{"class":74}," getAge",[68,15864,11058],{"class":335},[68,15866,15867,15869],{"class":70,"line":1854},[68,15868,14957],{"class":331},[68,15870,15871],{"class":335}," m_Age;\n",[68,15873,15874],{"class":70,"line":1860},[68,15875,2393],{"class":335},[68,15877,15878],{"class":70,"line":1881},[68,15879,15880],{"class":393},"    \u002F\u002F设置年龄\n",[68,15882,15883,15885,15888,15890,15892,15895],{"class":70,"line":1886},[68,15884,15114],{"class":331},[68,15886,15887],{"class":74}," setAge",[68,15889,336],{"class":335},[68,15891,339],{"class":331},[68,15893,15894],{"class":5421}," age",[68,15896,12647],{"class":335},[68,15898,15899,15901,15904,15906,15908,15910,15913,15915,15918],{"class":70,"line":1900},[68,15900,2703],{"class":331},[68,15902,15903],{"class":335}," (age ",[68,15905,1243],{"class":331},[68,15907,4299],{"class":82},[68,15909,3461],{"class":331},[68,15911,15912],{"class":335}," age ",[68,15914,1293],{"class":331},[68,15916,15917],{"class":82}," 150",[68,15919,12647],{"class":335},[68,15921,15922,15924,15926,15929,15931],{"class":70,"line":1905},[68,15923,9924],{"class":335},[68,15925,1376],{"class":331},[68,15927,15928],{"class":78}," \"你个老妖精!\"",[68,15930,1652],{"class":331},[68,15932,9045],{"class":335},[68,15934,15935,15938],{"class":70,"line":1934},[68,15936,15937],{"class":331},"            return",[68,15939,1498],{"class":335},[68,15941,15942],{"class":70,"line":1939},[68,15943,2735],{"class":335},[68,15945,15946,15949,15951],{"class":70,"line":1956},[68,15947,15948],{"class":335},"        m_Age ",[68,15950,381],{"class":331},[68,15952,8002],{"class":335},[68,15954,15955],{"class":70,"line":1961},[68,15956,2393],{"class":335},[68,15958,15959],{"class":70,"line":1966},[68,15960,2606],{"emptyLinePlaceholder":260},[68,15962,15963],{"class":70,"line":1971},[68,15964,15965],{"class":393},"    \u002F\u002F情人设置为只写\n",[68,15967,15968,15970,15973,15975,15977,15980],{"class":70,"line":1985},[68,15969,15114],{"class":331},[68,15971,15972],{"class":74}," setLover",[68,15974,336],{"class":335},[68,15976,15122],{"class":74},[68,15978,15979],{"class":5421}," lover",[68,15981,12647],{"class":335},[68,15983,15984,15987,15989],{"class":70,"line":1990},[68,15985,15986],{"class":335},"        m_Lover ",[68,15988,381],{"class":331},[68,15990,15991],{"class":335}," lover;\n",[68,15993,15994],{"class":70,"line":2783},[68,15995,2393],{"class":335},[68,15997,15998],{"class":70,"line":2797},[68,15999,2606],{"emptyLinePlaceholder":260},[68,16001,16002],{"class":70,"line":2805},[68,16003,15427],{"class":331},[68,16005,16006,16009],{"class":70,"line":2810},[68,16007,16008],{"class":335},"    string m_Name;",[68,16010,16011],{"class":393}," \u002F\u002F可读可写  姓名\n",[68,16013,16014],{"class":70,"line":2816},[68,16015,13415],{"class":335},[68,16017,16018,16020,16023],{"class":70,"line":2822},[68,16019,2191],{"class":331},[68,16021,16022],{"class":335}," m_Age;",[68,16024,16025],{"class":393}," \u002F\u002F只读  年龄\n",[68,16027,16028],{"class":70,"line":2827},[68,16029,2606],{"emptyLinePlaceholder":260},[68,16031,16032,16035],{"class":70,"line":8153},[68,16033,16034],{"class":335},"    string m_Lover;",[68,16036,16037],{"class":393}," \u002F\u002F只写  情人\n",[68,16039,16040],{"class":70,"line":8177},[68,16041,4201],{"class":335},[68,16043,16044],{"class":70,"line":8182},[68,16045,2606],{"emptyLinePlaceholder":260},[68,16047,16048,16050,16052],{"class":70,"line":8188},[68,16049,339],{"class":331},[68,16051,2179],{"class":74},[68,16053,11058],{"class":335},[68,16055,16056],{"class":70,"line":8215},[68,16057,2606],{"emptyLinePlaceholder":260},[68,16059,16060],{"class":70,"line":8220},[68,16061,15518],{"class":335},[68,16063,16064],{"class":70,"line":8226},[68,16065,16066],{"class":393},"    \u002F\u002F姓名设置\n",[68,16068,16069,16072,16074,16076,16078],{"class":70,"line":8238},[68,16070,16071],{"class":335},"    p.",[68,16073,15271],{"class":74},[68,16075,336],{"class":335},[68,16077,8121],{"class":78},[68,16079,2925],{"class":335},[68,16081,16082,16084,16086,16089,16091,16094,16097,16099,16101],{"class":70,"line":8250},[68,16083,6734],{"class":335},[68,16085,1376],{"class":331},[68,16087,16088],{"class":78}," \"姓名： \"",[68,16090,1652],{"class":331},[68,16092,16093],{"class":335}," p.",[68,16095,16096],{"class":74},"getName",[68,16098,13255],{"class":335},[68,16100,1376],{"class":331},[68,16102,9045],{"class":335},[68,16104,16105],{"class":70,"line":8262},[68,16106,2606],{"emptyLinePlaceholder":260},[68,16108,16109],{"class":70,"line":9921},[68,16110,16111],{"class":393},"    \u002F\u002F年龄设置\n",[68,16113,16114,16116,16119,16121,16123],{"class":70,"line":9946},[68,16115,16071],{"class":335},[68,16117,16118],{"class":74},"setAge",[68,16120,336],{"class":335},[68,16122,989],{"class":82},[68,16124,2925],{"class":335},[68,16126,16127,16129,16131,16134,16136,16138,16141,16143,16145],{"class":70,"line":9969},[68,16128,6734],{"class":335},[68,16130,1376],{"class":331},[68,16132,16133],{"class":78}," \"年龄： \"",[68,16135,1652],{"class":331},[68,16137,16093],{"class":335},[68,16139,16140],{"class":74},"getAge",[68,16142,13255],{"class":335},[68,16144,1376],{"class":331},[68,16146,9045],{"class":335},[68,16148,16149],{"class":70,"line":9993},[68,16150,2606],{"emptyLinePlaceholder":260},[68,16152,16153],{"class":70,"line":9998},[68,16154,16155],{"class":393},"    \u002F\u002F情人设置\n",[68,16157,16158,16160,16163,16165,16168],{"class":70,"line":10003},[68,16159,16071],{"class":335},[68,16161,16162],{"class":74},"setLover",[68,16164,336],{"class":335},[68,16166,16167],{"class":78},"\"苍井\"",[68,16169,2925],{"class":335},[68,16171,16172,16175],{"class":70,"line":10008},[68,16173,16174],{"class":393},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[68,16176,16177],{"class":393},"  \u002F\u002F只写属性，不可以读取\n",[68,16179,16180],{"class":70,"line":10017},[68,16181,2606],{"emptyLinePlaceholder":260},[68,16183,16184,16186,16188,16190],{"class":70,"line":10022},[68,16185,2509],{"class":74},[68,16187,336],{"class":335},[68,16189,2514],{"class":78},[68,16191,2925],{"class":335},[68,16193,16194],{"class":70,"line":10028},[68,16195,2606],{"emptyLinePlaceholder":260},[68,16197,16198,16200,16202],{"class":70,"line":10049},[68,16199,4296],{"class":331},[68,16201,4299],{"class":82},[68,16203,1498],{"class":335},[68,16205,16206],{"class":70,"line":10055},[68,16207,1772],{"class":335},[301,16209,16211],{"id":16210},"_814封装案例","8.1.4封装案例",[23,16213,16214],{},[26,16215,16216,16219],{},[483,16217,16218],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[42,16221,16222,16225],{},[26,16223,16224],{},"求出立方体的面积和体积",[26,16226,16227],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[58,16229,16231],{"className":322,"code":16230,"language":324,"meta":63,"style":63},"#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",[65,16232,16233,16239,16249,16256,16260,16264,16269,16299,16303,16313,16323,16333,16337,16346,16350,16386,16390,16399,16403,16419,16423,16428,16437,16441,16448,16452,16461,16465,16472,16476,16485,16489,16496,16500,16505,16522,16526,16572,16576,16585,16589,16593,16597,16606,16610,16614,16619,16623,16629,16635,16641,16645,16649,16654,16676,16680,16734,16738,16746,16750,16755,16760,16773,16780,16796,16807,16813,16836,16842,16865,16879,16899,16905,16916,16939,16961,16966,16972,16986,16999,17004,17018,17023,17029,17034,17048,17053,17058,17072,17084,17089,17102,17107,17112,17117,17130,17135],{"__ignoreMap":63},[68,16234,16235,16237],{"class":70,"line":71},[68,16236,2156],{"class":331},[68,16238,2159],{"class":78},[68,16240,16241,16243,16245,16247],{"class":70,"line":92},[68,16242,2164],{"class":331},[68,16244,2167],{"class":331},[68,16246,2170],{"class":74},[68,16248,1498],{"class":335},[68,16250,16251,16253],{"class":70,"line":1387},[68,16252,14899],{"class":331},[68,16254,16255],{"class":74}," Cube\n",[68,16257,16258],{"class":70,"line":1402},[68,16259,1753],{"class":335},[68,16261,16262],{"class":70,"line":1408},[68,16263,14921],{"class":331},[68,16265,16266],{"class":70,"line":1422},[68,16267,16268],{"class":393},"    \u002F\u002F输入长宽高\n",[68,16270,16271,16273,16276,16278,16280,16283,16285,16287,16290,16292,16294,16297],{"class":70,"line":1428},[68,16272,15114],{"class":331},[68,16274,16275],{"class":74}," setLwh",[68,16277,336],{"class":335},[68,16279,339],{"class":331},[68,16281,16282],{"class":5421}," l",[68,16284,711],{"class":335},[68,16286,339],{"class":331},[68,16288,16289],{"class":5421}," w",[68,16291,711],{"class":335},[68,16293,339],{"class":331},[68,16295,16296],{"class":5421}," h",[68,16298,342],{"class":335},[68,16300,16301],{"class":70,"line":1519},[68,16302,2236],{"class":335},[68,16304,16305,16308,16310],{"class":70,"line":1525},[68,16306,16307],{"class":335},"        m_L",[68,16309,381],{"class":331},[68,16311,16312],{"class":335},"l;\n",[68,16314,16315,16318,16320],{"class":70,"line":1537},[68,16316,16317],{"class":335},"        m_W",[68,16319,381],{"class":331},[68,16321,16322],{"class":335},"w;\n",[68,16324,16325,16328,16330],{"class":70,"line":1819},[68,16326,16327],{"class":335},"        m_H",[68,16329,381],{"class":331},[68,16331,16332],{"class":335},"h;\n",[68,16334,16335],{"class":70,"line":1824},[68,16336,2393],{"class":335},[68,16338,16339,16341,16344],{"class":70,"line":1830},[68,16340,2191],{"class":331},[68,16342,16343],{"class":74}," mianji",[68,16345,2182],{"class":335},[68,16347,16348],{"class":70,"line":1835},[68,16349,2236],{"class":335},[68,16351,16352,16354,16356,16358,16361,16363,16366,16368,16371,16373,16376,16378,16381,16383],{"class":70,"line":1849},[68,16353,14957],{"class":331},[68,16355,14960],{"class":82},[68,16357,788],{"class":331},[68,16359,16360],{"class":335},"(m_L",[68,16362,788],{"class":331},[68,16364,16365],{"class":335},"m_W ",[68,16367,814],{"class":331},[68,16369,16370],{"class":335}," m_L",[68,16372,788],{"class":331},[68,16374,16375],{"class":335},"m_H ",[68,16377,814],{"class":331},[68,16379,16380],{"class":335}," m_W",[68,16382,788],{"class":331},[68,16384,16385],{"class":335},"m_H);\n",[68,16387,16388],{"class":70,"line":1854},[68,16389,2393],{"class":335},[68,16391,16392,16394,16397],{"class":70,"line":1860},[68,16393,2191],{"class":331},[68,16395,16396],{"class":74}," tiji",[68,16398,2182],{"class":335},[68,16400,16401],{"class":70,"line":1881},[68,16402,2236],{"class":335},[68,16404,16405,16407,16409,16411,16414,16416],{"class":70,"line":1886},[68,16406,14957],{"class":331},[68,16408,16370],{"class":335},[68,16410,788],{"class":331},[68,16412,16413],{"class":335},"m_W",[68,16415,788],{"class":331},[68,16417,16418],{"class":335},"m_H;\n",[68,16420,16421],{"class":70,"line":1900},[68,16422,2393],{"class":335},[68,16424,16425],{"class":70,"line":1905},[68,16426,16427],{"class":393},"    \u002F\u002F获取长宽高\n",[68,16429,16430,16432,16435],{"class":70,"line":1934},[68,16431,2191],{"class":331},[68,16433,16434],{"class":74}," getLength",[68,16436,2182],{"class":335},[68,16438,16439],{"class":70,"line":1939},[68,16440,2236],{"class":335},[68,16442,16443,16445],{"class":70,"line":1956},[68,16444,14957],{"class":331},[68,16446,16447],{"class":335}," m_L;\n",[68,16449,16450],{"class":70,"line":1961},[68,16451,2393],{"class":335},[68,16453,16454,16456,16459],{"class":70,"line":1966},[68,16455,2191],{"class":331},[68,16457,16458],{"class":74}," getWidth",[68,16460,2182],{"class":335},[68,16462,16463],{"class":70,"line":1971},[68,16464,2236],{"class":335},[68,16466,16467,16469],{"class":70,"line":1985},[68,16468,14957],{"class":331},[68,16470,16471],{"class":335}," m_W;\n",[68,16473,16474],{"class":70,"line":1990},[68,16475,2393],{"class":335},[68,16477,16478,16480,16483],{"class":70,"line":2783},[68,16479,2191],{"class":331},[68,16481,16482],{"class":74}," getHeight",[68,16484,2182],{"class":335},[68,16486,16487],{"class":70,"line":2797},[68,16488,2236],{"class":335},[68,16490,16491,16493],{"class":70,"line":2805},[68,16492,14957],{"class":331},[68,16494,16495],{"class":335}," m_H;\n",[68,16497,16498],{"class":70,"line":2810},[68,16499,2393],{"class":335},[68,16501,16502],{"class":70,"line":2816},[68,16503,16504],{"class":393},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[68,16506,16507,16510,16513,16515,16518,16520],{"class":70,"line":2822},[68,16508,16509],{"class":331},"    bool",[68,16511,16512],{"class":74}," isEqual",[68,16514,336],{"class":335},[68,16516,16517],{"class":74},"Cube",[68,16519,3055],{"class":5421},[68,16521,342],{"class":335},[68,16523,16524],{"class":70,"line":2827},[68,16525,2236],{"class":335},[68,16527,16528,16530,16533,16536,16538,16540,16543,16545,16548,16551,16553,16555,16558,16560,16562,16565,16567,16569],{"class":70,"line":8153},[68,16529,2703],{"class":331},[68,16531,16532],{"class":335}," (c.",[68,16534,16535],{"class":74},"getLength",[68,16537,13255],{"class":335},[68,16539,3155],{"class":331},[68,16541,16542],{"class":335}," m_L ",[68,16544,1922],{"class":331},[68,16546,16547],{"class":335}," c.",[68,16549,16550],{"class":74},"getWidth",[68,16552,13255],{"class":335},[68,16554,3155],{"class":331},[68,16556,16557],{"class":335}," m_W ",[68,16559,1922],{"class":331},[68,16561,16547],{"class":335},[68,16563,16564],{"class":74},"getHeight",[68,16566,13255],{"class":335},[68,16568,3155],{"class":331},[68,16570,16571],{"class":335}," m_H)\n",[68,16573,16574],{"class":70,"line":8177},[68,16575,2716],{"class":335},[68,16577,16578,16580,16583],{"class":70,"line":8182},[68,16579,15937],{"class":331},[68,16581,16582],{"class":82}," true",[68,16584,1498],{"class":335},[68,16586,16587],{"class":70,"line":8188},[68,16588,2735],{"class":335},[68,16590,16591],{"class":70,"line":8215},[68,16592,2776],{"class":331},[68,16594,16595],{"class":70,"line":8220},[68,16596,2716],{"class":335},[68,16598,16599,16601,16604],{"class":70,"line":8226},[68,16600,15937],{"class":331},[68,16602,16603],{"class":82}," false",[68,16605,1498],{"class":335},[68,16607,16608],{"class":70,"line":8238},[68,16609,2735],{"class":335},[68,16611,16612],{"class":70,"line":8250},[68,16613,2393],{"class":335},[68,16615,16616],{"class":70,"line":8262},[68,16617,16618],{"class":393},"    \u002F\u002F私有属性\n",[68,16620,16621],{"class":70,"line":9921},[68,16622,15427],{"class":331},[68,16624,16625,16627],{"class":70,"line":9946},[68,16626,2191],{"class":331},[68,16628,16447],{"class":335},[68,16630,16631,16633],{"class":70,"line":9969},[68,16632,2191],{"class":331},[68,16634,16471],{"class":335},[68,16636,16637,16639],{"class":70,"line":9993},[68,16638,2191],{"class":331},[68,16640,16495],{"class":335},[68,16642,16643],{"class":70,"line":9998},[68,16644,2606],{"emptyLinePlaceholder":260},[68,16646,16647],{"class":70,"line":10003},[68,16648,4201],{"class":335},[68,16650,16651],{"class":70,"line":10008},[68,16652,16653],{"class":393},"\u002F\u002F全局函数判断两个立方体是否相等\n",[68,16655,16656,16658,16660,16662,16664,16667,16669,16671,16674],{"class":70,"line":10017},[68,16657,1562],{"class":331},[68,16659,16512],{"class":74},[68,16661,336],{"class":335},[68,16663,16517],{"class":74},[68,16665,16666],{"class":5421}," c1",[68,16668,711],{"class":335},[68,16670,16517],{"class":74},[68,16672,16673],{"class":5421}," c2",[68,16675,342],{"class":335},[68,16677,16678],{"class":70,"line":10022},[68,16679,1753],{"class":335},[68,16681,16682,16684,16687,16689,16691,16693,16696,16698,16701,16703,16705,16707,16709,16711,16713,16715,16717,16719,16721,16723,16725,16727,16729,16731],{"class":70,"line":10028},[68,16683,4296],{"class":331},[68,16685,16686],{"class":335}," (c1.",[68,16688,16535],{"class":74},[68,16690,13255],{"class":335},[68,16692,3155],{"class":331},[68,16694,16695],{"class":335}," c2.",[68,16697,16535],{"class":74},[68,16699,16700],{"class":335},"()) ",[68,16702,1922],{"class":331},[68,16704,16686],{"class":335},[68,16706,16550],{"class":74},[68,16708,13255],{"class":335},[68,16710,3155],{"class":331},[68,16712,16695],{"class":335},[68,16714,16550],{"class":74},[68,16716,16700],{"class":335},[68,16718,1922],{"class":331},[68,16720,16686],{"class":335},[68,16722,16564],{"class":74},[68,16724,13255],{"class":335},[68,16726,3155],{"class":331},[68,16728,16695],{"class":335},[68,16730,16564],{"class":74},[68,16732,16733],{"class":335},"());\n",[68,16735,16736],{"class":70,"line":10049},[68,16737,1772],{"class":335},[68,16739,16740,16742,16744],{"class":70,"line":10055},[68,16741,339],{"class":331},[68,16743,2179],{"class":74},[68,16745,2182],{"class":335},[68,16747,16748],{"class":70,"line":10069},[68,16749,1753],{"class":335},[68,16751,16752],{"class":70,"line":10075},[68,16753,16754],{"class":335},"    Cube c1;\n",[68,16756,16757],{"class":70,"line":10102},[68,16758,16759],{"class":393},"    \u002F\u002F输入立方体的长宽高\n",[68,16761,16762,16764,16766,16769,16771],{"class":70,"line":10111},[68,16763,1758],{"class":335},[68,16765,1376],{"class":331},[68,16767,16768],{"class":78},"\"请输入第一个立方体的长、宽、高：\"",[68,16770,1376],{"class":331},[68,16772,1399],{"class":335},[68,16774,16775,16777],{"class":70,"line":10117},[68,16776,2191],{"class":331},[68,16778,16779],{"class":335}," l,w,h,l1,w1,h1;\n",[68,16781,16782,16784,16786,16788,16790,16792,16794],{"class":70,"line":10125},[68,16783,2218],{"class":335},[68,16785,1637],{"class":331},[68,16787,851],{"class":335},[68,16789,1637],{"class":331},[68,16791,1128],{"class":335},[68,16793,1637],{"class":331},[68,16795,16332],{"class":335},[68,16797,16798,16801,16804],{"class":70,"line":10130},[68,16799,16800],{"class":335},"    c1.",[68,16802,16803],{"class":74},"setLwh",[68,16805,16806],{"class":335},"(l,w,h);\n",[68,16808,16810],{"class":70,"line":16809},66,[68,16811,16812],{"class":393},"    \u002F\u002F面积\n",[68,16814,16816,16818,16820,16823,16825,16827,16830,16832,16834],{"class":70,"line":16815},67,[68,16817,1758],{"class":335},[68,16819,1376],{"class":331},[68,16821,16822],{"class":78},"\"立方体的表面积为：\"",[68,16824,1376],{"class":331},[68,16826,15035],{"class":335},[68,16828,16829],{"class":74},"mianji",[68,16831,2633],{"class":335},[68,16833,1376],{"class":331},[68,16835,1399],{"class":335},[68,16837,16839],{"class":70,"line":16838},68,[68,16840,16841],{"class":393},"    \u002F\u002F体积\n",[68,16843,16845,16847,16849,16852,16854,16856,16859,16861,16863],{"class":70,"line":16844},69,[68,16846,1758],{"class":335},[68,16848,1376],{"class":331},[68,16850,16851],{"class":78},"\"立方体的体积为：\"",[68,16853,1376],{"class":331},[68,16855,15035],{"class":335},[68,16857,16858],{"class":74},"tiji",[68,16860,2633],{"class":335},[68,16862,1376],{"class":331},[68,16864,1399],{"class":335},[68,16866,16868,16870,16872,16875,16877],{"class":70,"line":16867},70,[68,16869,1758],{"class":335},[68,16871,1376],{"class":331},[68,16873,16874],{"class":78},"\"请输入第二个立方体的长、宽、高：\"",[68,16876,1376],{"class":331},[68,16878,1399],{"class":335},[68,16880,16882,16884,16886,16889,16891,16894,16896],{"class":70,"line":16881},71,[68,16883,2218],{"class":335},[68,16885,1637],{"class":331},[68,16887,16888],{"class":335},"l1",[68,16890,1637],{"class":331},[68,16892,16893],{"class":335},"w1",[68,16895,1637],{"class":331},[68,16897,16898],{"class":335},"h1;\n",[68,16900,16902],{"class":70,"line":16901},72,[68,16903,16904],{"class":335},"    Cube c2;\n",[68,16906,16908,16911,16913],{"class":70,"line":16907},73,[68,16909,16910],{"class":335},"    c2.",[68,16912,16803],{"class":74},[68,16914,16915],{"class":335},"(l1,w1,h1);\n",[68,16917,16919,16921,16923,16926,16928,16931,16933,16935,16937],{"class":70,"line":16918},74,[68,16920,1758],{"class":335},[68,16922,1376],{"class":331},[68,16924,16925],{"class":78},"\"第二个立方体的表面积为：\"",[68,16927,1376],{"class":331},[68,16929,16930],{"class":335},"c2.",[68,16932,16829],{"class":74},[68,16934,2633],{"class":335},[68,16936,1376],{"class":331},[68,16938,1399],{"class":335},[68,16940,16942,16944,16946,16949,16951,16953,16955,16957,16959],{"class":70,"line":16941},75,[68,16943,1758],{"class":335},[68,16945,1376],{"class":331},[68,16947,16948],{"class":78},"\"第二个立方体的体积为：\"",[68,16950,1376],{"class":331},[68,16952,16930],{"class":335},[68,16954,16858],{"class":74},[68,16956,2633],{"class":335},[68,16958,1376],{"class":331},[68,16960,1399],{"class":335},[68,16962,16964],{"class":70,"line":16963},76,[68,16965,2606],{"emptyLinePlaceholder":260},[68,16967,16969],{"class":70,"line":16968},77,[68,16970,16971],{"class":393},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[68,16973,16975,16977,16979,16982,16984],{"class":70,"line":16974},78,[68,16976,1758],{"class":335},[68,16978,1376],{"class":331},[68,16980,16981],{"class":78},"\"内部函数判断结果：\"",[68,16983,1376],{"class":331},[68,16985,1399],{"class":335},[68,16987,16989,16991,16993,16996],{"class":70,"line":16988},79,[68,16990,3307],{"class":331},[68,16992,16686],{"class":335},[68,16994,16995],{"class":74},"isEqual",[68,16997,16998],{"class":335},"(c2))\n",[68,17000,17002],{"class":70,"line":17001},80,[68,17003,2236],{"class":335},[68,17005,17007,17009,17011,17014,17016],{"class":70,"line":17006},81,[68,17008,3657],{"class":335},[68,17010,1376],{"class":331},[68,17012,17013],{"class":78},"\"两个立方体相等\"",[68,17015,1376],{"class":331},[68,17017,1399],{"class":335},[68,17019,17021],{"class":70,"line":17020},82,[68,17022,2393],{"class":335},[68,17024,17026],{"class":70,"line":17025},83,[68,17027,17028],{"class":331},"    else\n",[68,17030,17032],{"class":70,"line":17031},84,[68,17033,2236],{"class":335},[68,17035,17037,17039,17041,17044,17046],{"class":70,"line":17036},85,[68,17038,3657],{"class":335},[68,17040,1376],{"class":331},[68,17042,17043],{"class":78},"\"两个立方体不相等\"",[68,17045,1376],{"class":331},[68,17047,1399],{"class":335},[68,17049,17051],{"class":70,"line":17050},86,[68,17052,2393],{"class":335},[68,17054,17056],{"class":70,"line":17055},87,[68,17057,2606],{"emptyLinePlaceholder":260},[68,17059,17061,17063,17065,17068,17070],{"class":70,"line":17060},88,[68,17062,1758],{"class":335},[68,17064,1376],{"class":331},[68,17066,17067],{"class":78},"\"全局函数判断结果：\"",[68,17069,1376],{"class":331},[68,17071,1399],{"class":335},[68,17073,17075,17077,17079,17081],{"class":70,"line":17074},89,[68,17076,3307],{"class":331},[68,17078,1865],{"class":335},[68,17080,16995],{"class":74},[68,17082,17083],{"class":335},"(c1, c2))\n",[68,17085,17087],{"class":70,"line":17086},90,[68,17088,2236],{"class":335},[68,17090,17092,17094,17096,17098,17100],{"class":70,"line":17091},91,[68,17093,3657],{"class":335},[68,17095,1376],{"class":331},[68,17097,17013],{"class":78},[68,17099,1376],{"class":331},[68,17101,1399],{"class":335},[68,17103,17105],{"class":70,"line":17104},92,[68,17106,2393],{"class":335},[68,17108,17110],{"class":70,"line":17109},93,[68,17111,17028],{"class":331},[68,17113,17115],{"class":70,"line":17114},94,[68,17116,2236],{"class":335},[68,17118,17120,17122,17124,17126,17128],{"class":70,"line":17119},95,[68,17121,3657],{"class":335},[68,17123,1376],{"class":331},[68,17125,17043],{"class":78},[68,17127,1376],{"class":331},[68,17129,1399],{"class":335},[68,17131,17133],{"class":70,"line":17132},96,[68,17134,2393],{"class":335},[68,17136,17138],{"class":70,"line":17137},97,[68,17139,1772],{"class":335},[23,17141,17142],{"start":92},[26,17143,17144],{},[483,17145,17146],{},"练习案例2：点和圆的关系",[42,17148,17149],{},[26,17150,17151],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[58,17153,17155],{"className":322,"code":17154,"language":324,"meta":63,"style":63},"#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",[65,17156,17157,17163,17173,17180,17187,17191,17195,17200,17234,17239,17255,17269,17273,17277,17284,17291,17295,17301,17305,17309,17313,17335,17358,17363,17377,17392,17396,17400,17406,17411,17416,17420,17446,17450,17480,17508,17536,17553,17557,17570,17574,17578,17582,17595,17599,17603,17611,17615,17619,17623,17628,17632,17643,17650,17659,17669,17680,17687,17700,17711,17721,17732,17739,17753,17758,17768,17776],{"__ignoreMap":63},[68,17158,17159,17161],{"class":70,"line":71},[68,17160,2156],{"class":331},[68,17162,2159],{"class":78},[68,17164,17165,17167,17169,17171],{"class":70,"line":92},[68,17166,2164],{"class":331},[68,17168,2167],{"class":331},[68,17170,2170],{"class":74},[68,17172,1498],{"class":335},[68,17174,17175,17177],{"class":70,"line":1387},[68,17176,2156],{"class":331},[68,17178,17179],{"class":78},"\u003Ccmath>\n",[68,17181,17182,17184],{"class":70,"line":1402},[68,17183,14899],{"class":331},[68,17185,17186],{"class":74}," Point\n",[68,17188,17189],{"class":70,"line":1408},[68,17190,1753],{"class":335},[68,17192,17193],{"class":70,"line":1422},[68,17194,14921],{"class":331},[68,17196,17197],{"class":70,"line":1428},[68,17198,17199],{"class":393},"    \u002F\u002F赋值\n",[68,17201,17202,17204,17207,17209,17211,17214,17216,17218,17221,17224,17226,17229,17231],{"class":70,"line":1519},[68,17203,15114],{"class":331},[68,17205,17206],{"class":74}," setPoint",[68,17208,336],{"class":335},[68,17210,14242],{"class":331},[68,17212,17213],{"class":5421}," x",[68,17215,12640],{"class":335},[68,17217,14242],{"class":331},[68,17219,17220],{"class":5421}," y",[68,17222,17223],{"class":335},") { m_x ",[68,17225,381],{"class":331},[68,17227,17228],{"class":335}," x; m_y ",[68,17230,381],{"class":331},[68,17232,17233],{"class":335}," y; }\n",[68,17235,17236],{"class":70,"line":1525},[68,17237,17238],{"class":393},"    \u002F\u002F获取坐标\n",[68,17240,17241,17243,17246,17249,17252],{"class":70,"line":1537},[68,17242,14943],{"class":331},[68,17244,17245],{"class":74}," getX",[68,17247,17248],{"class":335},"() { ",[68,17250,17251],{"class":331},"return",[68,17253,17254],{"class":335}," m_x; }\n",[68,17256,17257,17259,17262,17264,17266],{"class":70,"line":1819},[68,17258,14943],{"class":331},[68,17260,17261],{"class":74}," getY",[68,17263,17248],{"class":335},[68,17265,17251],{"class":331},[68,17267,17268],{"class":335}," m_y; }\n",[68,17270,17271],{"class":70,"line":1824},[68,17272,2606],{"emptyLinePlaceholder":260},[68,17274,17275],{"class":70,"line":1830},[68,17276,15427],{"class":331},[68,17278,17279,17281],{"class":70,"line":1835},[68,17280,14943],{"class":331},[68,17282,17283],{"class":335}," m_x;\n",[68,17285,17286,17288],{"class":70,"line":1849},[68,17287,14943],{"class":331},[68,17289,17290],{"class":335}," m_y;\n",[68,17292,17293],{"class":70,"line":1854},[68,17294,4201],{"class":335},[68,17296,17297,17299],{"class":70,"line":1860},[68,17298,14899],{"class":331},[68,17300,14902],{"class":74},[68,17302,17303],{"class":70,"line":1881},[68,17304,1753],{"class":335},[68,17306,17307],{"class":70,"line":1886},[68,17308,14921],{"class":331},[68,17310,17311],{"class":70,"line":1900},[68,17312,17199],{"class":393},[68,17314,17315,17317,17320,17322,17324,17327,17330,17332],{"class":70,"line":1905},[68,17316,15114],{"class":331},[68,17318,17319],{"class":74}," setRadius",[68,17321,336],{"class":335},[68,17323,14242],{"class":331},[68,17325,17326],{"class":5421}," r",[68,17328,17329],{"class":335},") { m_r ",[68,17331,381],{"class":331},[68,17333,17334],{"class":335}," r; }\n",[68,17336,17337,17339,17342,17344,17347,17350,17353,17355],{"class":70,"line":1934},[68,17338,15114],{"class":331},[68,17340,17341],{"class":74}," setCenter",[68,17343,336],{"class":335},[68,17345,17346],{"class":74},"Point",[68,17348,17349],{"class":5421}," center",[68,17351,17352],{"class":335},") { m_center ",[68,17354,381],{"class":331},[68,17356,17357],{"class":335}," center; }\n",[68,17359,17360],{"class":70,"line":1939},[68,17361,17362],{"class":393},"    \u002F\u002F获取属性\n",[68,17364,17365,17367,17370,17372,17374],{"class":70,"line":1956},[68,17366,14943],{"class":331},[68,17368,17369],{"class":74}," getRadius",[68,17371,17248],{"class":335},[68,17373,17251],{"class":331},[68,17375,17376],{"class":335}," m_r; }\n",[68,17378,17379,17382,17385,17387,17389],{"class":70,"line":1961},[68,17380,17381],{"class":74},"    Point",[68,17383,17384],{"class":74}," getCenter",[68,17386,17248],{"class":335},[68,17388,17251],{"class":331},[68,17390,17391],{"class":335}," m_center; }\n",[68,17393,17394],{"class":70,"line":1966},[68,17395,2606],{"emptyLinePlaceholder":260},[68,17397,17398],{"class":70,"line":1971},[68,17399,15427],{"class":331},[68,17401,17402,17404],{"class":70,"line":1985},[68,17403,14943],{"class":331},[68,17405,14933],{"class":335},[68,17407,17408],{"class":70,"line":1990},[68,17409,17410],{"class":393},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[68,17412,17413],{"class":70,"line":2783},[68,17414,17415],{"class":335},"    Point m_center;\n",[68,17417,17418],{"class":70,"line":2797},[68,17419,4201],{"class":335},[68,17421,17422,17424,17427,17429,17432,17434,17436,17438,17440,17442,17444],{"class":70,"line":2805},[68,17423,5569],{"class":331},[68,17425,17426],{"class":74}," isInCircle",[68,17428,336],{"class":335},[68,17430,17431],{"class":74},"Circle",[68,17433,10789],{"class":331},[68,17435,621],{"class":5421},[68,17437,711],{"class":335},[68,17439,17346],{"class":74},[68,17441,10789],{"class":331},[68,17443,19],{"class":5421},[68,17445,342],{"class":335},[68,17447,17448],{"class":70,"line":2810},[68,17449,1753],{"class":335},[68,17451,17452,17454,17457,17459,17461,17464,17467,17470,17472,17474,17476,17478],{"class":70,"line":2816},[68,17453,14943],{"class":331},[68,17455,17456],{"class":335}," dx ",[68,17458,381],{"class":331},[68,17460,16547],{"class":335},[68,17462,17463],{"class":74},"getCenter",[68,17465,17466],{"class":335},"().",[68,17468,17469],{"class":74},"getX",[68,17471,13255],{"class":335},[68,17473,865],{"class":331},[68,17475,16093],{"class":335},[68,17477,17469],{"class":74},[68,17479,5841],{"class":335},[68,17481,17482,17484,17487,17489,17491,17493,17495,17498,17500,17502,17504,17506],{"class":70,"line":2822},[68,17483,14943],{"class":331},[68,17485,17486],{"class":335}," dy ",[68,17488,381],{"class":331},[68,17490,16547],{"class":335},[68,17492,17463],{"class":74},[68,17494,17466],{"class":335},[68,17496,17497],{"class":74},"getY",[68,17499,13255],{"class":335},[68,17501,865],{"class":331},[68,17503,16093],{"class":335},[68,17505,17497],{"class":74},[68,17507,5841],{"class":335},[68,17509,17510,17512,17515,17517,17520,17523,17525,17527,17529,17531,17533],{"class":70,"line":2827},[68,17511,14943],{"class":331},[68,17513,17514],{"class":335}," distance ",[68,17516,381],{"class":331},[68,17518,17519],{"class":74}," sqrt",[68,17521,17522],{"class":335},"(dx ",[68,17524,788],{"class":331},[68,17526,17456],{"class":335},[68,17528,814],{"class":331},[68,17530,17486],{"class":335},[68,17532,788],{"class":331},[68,17534,17535],{"class":335}," dy);\n",[68,17537,17538,17540,17543,17545,17547,17550],{"class":70,"line":8153},[68,17539,3307],{"class":331},[68,17541,17542],{"class":335}," (distance ",[68,17544,1243],{"class":331},[68,17546,16547],{"class":335},[68,17548,17549],{"class":74},"getRadius",[68,17551,17552],{"class":335},"())\n",[68,17554,17555],{"class":70,"line":8177},[68,17556,2236],{"class":335},[68,17558,17559,17561,17563,17566,17568],{"class":70,"line":8182},[68,17560,9874],{"class":335},[68,17562,1376],{"class":331},[68,17564,17565],{"class":78}," \"点在圆内\"",[68,17567,1652],{"class":331},[68,17569,9045],{"class":335},[68,17571,17572],{"class":70,"line":8188},[68,17573,2393],{"class":335},[68,17575,17576],{"class":70,"line":8215},[68,17577,17028],{"class":331},[68,17579,17580],{"class":70,"line":8220},[68,17581,2236],{"class":335},[68,17583,17584,17586,17588,17591,17593],{"class":70,"line":8226},[68,17585,9874],{"class":335},[68,17587,1376],{"class":331},[68,17589,17590],{"class":78}," \"点在圆外\"",[68,17592,1652],{"class":331},[68,17594,9045],{"class":335},[68,17596,17597],{"class":70,"line":8238},[68,17598,2393],{"class":335},[68,17600,17601],{"class":70,"line":8250},[68,17602,1772],{"class":335},[68,17604,17605,17607,17609],{"class":70,"line":8262},[68,17606,339],{"class":331},[68,17608,2179],{"class":74},[68,17610,2182],{"class":335},[68,17612,17613],{"class":70,"line":9921},[68,17614,1753],{"class":335},[68,17616,17617],{"class":70,"line":9946},[68,17618,15258],{"class":393},[68,17620,17621],{"class":70,"line":9969},[68,17622,15005],{"class":335},[68,17624,17625],{"class":70,"line":9993},[68,17626,17627],{"class":335},"    Point p1;\n",[68,17629,17630],{"class":70,"line":9998},[68,17631,17199],{"class":393},[68,17633,17634,17636,17638,17641],{"class":70,"line":10003},[68,17635,1758],{"class":335},[68,17637,1376],{"class":331},[68,17639,17640],{"class":78},"\"请输入圆的半径：\"",[68,17642,1498],{"class":335},[68,17644,17645,17647],{"class":70,"line":10008},[68,17646,14943],{"class":331},[68,17648,17649],{"class":335}," r;\n",[68,17651,17652,17654,17656],{"class":70,"line":10017},[68,17653,2218],{"class":335},[68,17655,1637],{"class":331},[68,17657,17658],{"class":335},"r;\n",[68,17660,17661,17663,17666],{"class":70,"line":10022},[68,17662,16800],{"class":335},[68,17664,17665],{"class":74},"setRadius",[68,17667,17668],{"class":335},"(r);\n",[68,17670,17671,17673,17675,17678],{"class":70,"line":10028},[68,17672,1758],{"class":335},[68,17674,1376],{"class":331},[68,17676,17677],{"class":78},"\"请输入圆心坐标：\"",[68,17679,1498],{"class":335},[68,17681,17682,17684],{"class":70,"line":10049},[68,17683,14943],{"class":331},[68,17685,17686],{"class":335}," x, y;\n",[68,17688,17689,17691,17693,17695,17697],{"class":70,"line":10055},[68,17690,2218],{"class":335},[68,17692,1637],{"class":331},[68,17694,1153],{"class":335},[68,17696,1637],{"class":331},[68,17698,17699],{"class":335},"y;\n",[68,17701,17702,17705,17708],{"class":70,"line":10069},[68,17703,17704],{"class":335},"    p1.",[68,17706,17707],{"class":74},"setPoint",[68,17709,17710],{"class":335},"(x, y);\n",[68,17712,17713,17715,17718],{"class":70,"line":10075},[68,17714,16800],{"class":335},[68,17716,17717],{"class":74},"setCenter",[68,17719,17720],{"class":335},"(p1);\n",[68,17722,17723,17725,17727,17730],{"class":70,"line":10102},[68,17724,1758],{"class":335},[68,17726,1376],{"class":331},[68,17728,17729],{"class":78},"\"请输入测试点坐标：\"",[68,17731,1498],{"class":335},[68,17733,17734,17736],{"class":70,"line":10111},[68,17735,14943],{"class":331},[68,17737,17738],{"class":335}," x1, y1;\n",[68,17740,17741,17743,17745,17748,17750],{"class":70,"line":10117},[68,17742,2218],{"class":335},[68,17744,1637],{"class":331},[68,17746,17747],{"class":335},"x1",[68,17749,1637],{"class":331},[68,17751,17752],{"class":335},"y1;\n",[68,17754,17755],{"class":70,"line":10125},[68,17756,17757],{"class":335},"    Point p2;\n",[68,17759,17760,17763,17765],{"class":70,"line":10130},[68,17761,17762],{"class":335},"    p2.",[68,17764,17707],{"class":74},[68,17766,17767],{"class":335},"(x1, y1);\n",[68,17769,17770,17773],{"class":70,"line":16809},[68,17771,17772],{"class":74},"    isInCircle",[68,17774,17775],{"class":335},"(c1, p2);\n",[68,17777,17778],{"class":70,"line":16815},[68,17779,1772],{"class":335},[19,17781,17782],{},"在类中可以让另一个类作为本来的成员",[19,17784,17785],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17787,17788],{},"创建point.h",[58,17790,17792],{"className":322,"code":17791,"language":324,"meta":63,"style":63},"#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",[65,17793,17794,17805,17811,17821,17827,17831,17836,17840,17844,17864,17868,17876,17884,17888,17892,17898,17904],{"__ignoreMap":63},[68,17795,17796,17799,17802],{"class":70,"line":71},[68,17797,17798],{"class":331},"#pragma",[68,17800,17801],{"class":74}," once",[68,17803,17804],{"class":393}," \u002F\u002F防止头文件重复包含\n",[68,17806,17807,17809],{"class":70,"line":92},[68,17808,2156],{"class":331},[68,17810,2159],{"class":78},[68,17812,17813,17815,17817,17819],{"class":70,"line":1387},[68,17814,2164],{"class":331},[68,17816,2167],{"class":331},[68,17818,2170],{"class":74},[68,17820,1498],{"class":335},[68,17822,17823,17825],{"class":70,"line":1402},[68,17824,14899],{"class":331},[68,17826,17186],{"class":74},[68,17828,17829],{"class":70,"line":1408},[68,17830,1753],{"class":335},[68,17832,17833],{"class":70,"line":1422},[68,17834,17835],{"class":393},"\u002F\u002F做好声明与变量定义就可以\n",[68,17837,17838],{"class":70,"line":1428},[68,17839,14921],{"class":331},[68,17841,17842],{"class":70,"line":1519},[68,17843,17199],{"class":393},[68,17845,17846,17848,17850,17852,17854,17856,17858,17860,17862],{"class":70,"line":1525},[68,17847,15114],{"class":331},[68,17849,17206],{"class":74},[68,17851,336],{"class":335},[68,17853,14242],{"class":331},[68,17855,17213],{"class":5421},[68,17857,12640],{"class":335},[68,17859,14242],{"class":331},[68,17861,17220],{"class":5421},[68,17863,2925],{"class":335},[68,17865,17866],{"class":70,"line":1537},[68,17867,17238],{"class":393},[68,17869,17870,17872,17874],{"class":70,"line":1819},[68,17871,14943],{"class":331},[68,17873,17245],{"class":74},[68,17875,5841],{"class":335},[68,17877,17878,17880,17882],{"class":70,"line":1824},[68,17879,14943],{"class":331},[68,17881,17261],{"class":74},[68,17883,5841],{"class":335},[68,17885,17886],{"class":70,"line":1830},[68,17887,2606],{"emptyLinePlaceholder":260},[68,17889,17890],{"class":70,"line":1835},[68,17891,15427],{"class":331},[68,17893,17894,17896],{"class":70,"line":1849},[68,17895,14943],{"class":331},[68,17897,17283],{"class":335},[68,17899,17900,17902],{"class":70,"line":1854},[68,17901,14943],{"class":331},[68,17903,17290],{"class":335},[68,17905,17906],{"class":70,"line":1860},[68,17907,4201],{"class":335},[19,17909,17910],{},"创建point.cpp",[58,17912,17914],{"className":322,"code":17913,"language":324,"meta":63,"style":63},"#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",[65,17915,17916,17923,17928,17962,17966,17982],{"__ignoreMap":63},[68,17917,17918,17920],{"class":70,"line":71},[68,17919,2156],{"class":331},[68,17921,17922],{"class":78},"\u003Cpoint.h>\n",[68,17924,17925],{"class":70,"line":92},[68,17926,17927],{"class":393},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[68,17929,17930,17932,17935,17938,17940,17942,17944,17946,17948,17950,17952,17954,17956,17958,17960],{"class":70,"line":1387},[68,17931,15114],{"class":331},[68,17933,17934],{"class":74}," Point",[68,17936,17937],{"class":335},"::",[68,17939,17707],{"class":74},[68,17941,336],{"class":335},[68,17943,14242],{"class":331},[68,17945,17213],{"class":5421},[68,17947,12640],{"class":335},[68,17949,14242],{"class":331},[68,17951,17220],{"class":5421},[68,17953,17223],{"class":335},[68,17955,381],{"class":331},[68,17957,17228],{"class":335},[68,17959,381],{"class":331},[68,17961,17233],{"class":335},[68,17963,17964],{"class":70,"line":1402},[68,17965,17238],{"class":393},[68,17967,17968,17970,17972,17974,17976,17978,17980],{"class":70,"line":1408},[68,17969,14943],{"class":331},[68,17971,17934],{"class":74},[68,17973,17937],{"class":335},[68,17975,17469],{"class":74},[68,17977,17248],{"class":335},[68,17979,17251],{"class":331},[68,17981,17254],{"class":335},[68,17983,17984,17986,17988,17990,17992,17994,17996],{"class":70,"line":1422},[68,17985,14943],{"class":331},[68,17987,17934],{"class":74},[68,17989,17937],{"class":335},[68,17991,17497],{"class":74},[68,17993,17248],{"class":335},[68,17995,17251],{"class":331},[68,17997,17268],{"class":335},[19,17999,18000],{},"创建circle.h",[58,18002,18004],{"className":322,"code":18003,"language":324,"meta":63,"style":63},"#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",[65,18005,18006,18013,18019,18029,18035,18041,18045,18049,18053,18067,18081,18085,18093,18101,18105,18109,18115,18119,18123],{"__ignoreMap":63},[68,18007,18008,18010],{"class":70,"line":71},[68,18009,17798],{"class":331},[68,18011,18012],{"class":74}," once\n",[68,18014,18015,18017],{"class":70,"line":92},[68,18016,2156],{"class":331},[68,18018,2159],{"class":78},[68,18020,18021,18023,18025,18027],{"class":70,"line":1387},[68,18022,2164],{"class":331},[68,18024,2167],{"class":331},[68,18026,2170],{"class":74},[68,18028,1498],{"class":335},[68,18030,18031,18033],{"class":70,"line":1402},[68,18032,2156],{"class":331},[68,18034,17922],{"class":78},[68,18036,18037,18039],{"class":70,"line":1408},[68,18038,14899],{"class":331},[68,18040,14902],{"class":74},[68,18042,18043],{"class":70,"line":1422},[68,18044,1753],{"class":335},[68,18046,18047],{"class":70,"line":1428},[68,18048,14921],{"class":331},[68,18050,18051],{"class":70,"line":1519},[68,18052,17199],{"class":393},[68,18054,18055,18057,18059,18061,18063,18065],{"class":70,"line":1525},[68,18056,15114],{"class":331},[68,18058,17319],{"class":74},[68,18060,336],{"class":335},[68,18062,14242],{"class":331},[68,18064,17326],{"class":5421},[68,18066,2925],{"class":335},[68,18068,18069,18071,18073,18075,18077,18079],{"class":70,"line":1537},[68,18070,15114],{"class":331},[68,18072,17341],{"class":74},[68,18074,336],{"class":335},[68,18076,17346],{"class":74},[68,18078,17349],{"class":5421},[68,18080,2925],{"class":335},[68,18082,18083],{"class":70,"line":1819},[68,18084,17362],{"class":393},[68,18086,18087,18089,18091],{"class":70,"line":1824},[68,18088,14943],{"class":331},[68,18090,17369],{"class":74},[68,18092,5841],{"class":335},[68,18094,18095,18097,18099],{"class":70,"line":1830},[68,18096,17381],{"class":74},[68,18098,17384],{"class":74},[68,18100,5841],{"class":335},[68,18102,18103],{"class":70,"line":1835},[68,18104,2606],{"emptyLinePlaceholder":260},[68,18106,18107],{"class":70,"line":1849},[68,18108,15427],{"class":331},[68,18110,18111,18113],{"class":70,"line":1854},[68,18112,14943],{"class":331},[68,18114,14933],{"class":335},[68,18116,18117],{"class":70,"line":1860},[68,18118,17410],{"class":393},[68,18120,18121],{"class":70,"line":1881},[68,18122,17415],{"class":335},[68,18124,18125],{"class":70,"line":1886},[68,18126,4201],{"class":335},[19,18128,18129],{},"创建circle.cpp",[58,18131,18133],{"className":322,"code":18132,"language":324,"meta":63,"style":63},"#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",[65,18134,18135,18142,18165,18187,18192,18208],{"__ignoreMap":63},[68,18136,18137,18139],{"class":70,"line":71},[68,18138,2156],{"class":331},[68,18140,18141],{"class":78},"\u003Ccircle.h>\n",[68,18143,18144,18146,18149,18151,18153,18155,18157,18159,18161,18163],{"class":70,"line":92},[68,18145,5569],{"class":331},[68,18147,18148],{"class":74}," Circle",[68,18150,17937],{"class":335},[68,18152,17665],{"class":74},[68,18154,336],{"class":335},[68,18156,14242],{"class":331},[68,18158,17326],{"class":5421},[68,18160,17329],{"class":335},[68,18162,381],{"class":331},[68,18164,17334],{"class":335},[68,18166,18167,18169,18171,18173,18175,18177,18179,18181,18183,18185],{"class":70,"line":1387},[68,18168,5569],{"class":331},[68,18170,18148],{"class":74},[68,18172,17937],{"class":335},[68,18174,17717],{"class":74},[68,18176,336],{"class":335},[68,18178,17346],{"class":74},[68,18180,17349],{"class":5421},[68,18182,17352],{"class":335},[68,18184,381],{"class":331},[68,18186,17357],{"class":335},[68,18188,18189],{"class":70,"line":1402},[68,18190,18191],{"class":393},"\u002F\u002F获取属性\n",[68,18193,18194,18196,18198,18200,18202,18204,18206],{"class":70,"line":1408},[68,18195,14242],{"class":331},[68,18197,18148],{"class":74},[68,18199,17937],{"class":335},[68,18201,17549],{"class":74},[68,18203,17248],{"class":335},[68,18205,17251],{"class":331},[68,18207,17376],{"class":335},[68,18209,18210,18212,18214,18216,18218,18220,18222],{"class":70,"line":1422},[68,18211,17346],{"class":74},[68,18213,18148],{"class":74},[68,18215,17937],{"class":335},[68,18217,17463],{"class":74},[68,18219,17248],{"class":335},[68,18221,17251],{"class":331},[68,18223,17391],{"class":335},[19,18225,18226],{},"使用封装的类",[58,18228,18230],{"className":322,"code":18229,"language":324,"meta":63,"style":63},"#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",[65,18231,18232,18238,18248,18254,18260,18284,18288,18314,18340,18364,18378,18382,18394,18398,18402,18406,18418,18422,18426,18434,18438,18442,18446,18450,18454,18464,18470,18478,18486,18496,18502,18514,18522,18530,18540,18546,18558,18562,18570,18576],{"__ignoreMap":63},[68,18233,18234,18236],{"class":70,"line":71},[68,18235,2156],{"class":331},[68,18237,2159],{"class":78},[68,18239,18240,18242,18244,18246],{"class":70,"line":92},[68,18241,2164],{"class":331},[68,18243,2167],{"class":331},[68,18245,2170],{"class":74},[68,18247,1498],{"class":335},[68,18249,18250,18252],{"class":70,"line":1387},[68,18251,2156],{"class":331},[68,18253,18141],{"class":78},[68,18255,18256,18258],{"class":70,"line":1402},[68,18257,2156],{"class":331},[68,18259,17922],{"class":78},[68,18261,18262,18264,18266,18268,18270,18272,18274,18276,18278,18280,18282],{"class":70,"line":1408},[68,18263,5569],{"class":331},[68,18265,17426],{"class":74},[68,18267,336],{"class":335},[68,18269,17431],{"class":74},[68,18271,10789],{"class":331},[68,18273,621],{"class":5421},[68,18275,711],{"class":335},[68,18277,17346],{"class":74},[68,18279,10789],{"class":331},[68,18281,19],{"class":5421},[68,18283,342],{"class":335},[68,18285,18286],{"class":70,"line":1422},[68,18287,1753],{"class":335},[68,18289,18290,18292,18294,18296,18298,18300,18302,18304,18306,18308,18310,18312],{"class":70,"line":1428},[68,18291,14943],{"class":331},[68,18293,17456],{"class":335},[68,18295,381],{"class":331},[68,18297,16547],{"class":335},[68,18299,17463],{"class":74},[68,18301,17466],{"class":335},[68,18303,17469],{"class":74},[68,18305,13255],{"class":335},[68,18307,865],{"class":331},[68,18309,16093],{"class":335},[68,18311,17469],{"class":74},[68,18313,5841],{"class":335},[68,18315,18316,18318,18320,18322,18324,18326,18328,18330,18332,18334,18336,18338],{"class":70,"line":1519},[68,18317,14943],{"class":331},[68,18319,17486],{"class":335},[68,18321,381],{"class":331},[68,18323,16547],{"class":335},[68,18325,17463],{"class":74},[68,18327,17466],{"class":335},[68,18329,17497],{"class":74},[68,18331,13255],{"class":335},[68,18333,865],{"class":331},[68,18335,16093],{"class":335},[68,18337,17497],{"class":74},[68,18339,5841],{"class":335},[68,18341,18342,18344,18346,18348,18350,18352,18354,18356,18358,18360,18362],{"class":70,"line":1525},[68,18343,14943],{"class":331},[68,18345,17514],{"class":335},[68,18347,381],{"class":331},[68,18349,17519],{"class":74},[68,18351,17522],{"class":335},[68,18353,788],{"class":331},[68,18355,17456],{"class":335},[68,18357,814],{"class":331},[68,18359,17486],{"class":335},[68,18361,788],{"class":331},[68,18363,17535],{"class":335},[68,18365,18366,18368,18370,18372,18374,18376],{"class":70,"line":1537},[68,18367,3307],{"class":331},[68,18369,17542],{"class":335},[68,18371,1243],{"class":331},[68,18373,16547],{"class":335},[68,18375,17549],{"class":74},[68,18377,17552],{"class":335},[68,18379,18380],{"class":70,"line":1819},[68,18381,2236],{"class":335},[68,18383,18384,18386,18388,18390,18392],{"class":70,"line":1824},[68,18385,9874],{"class":335},[68,18387,1376],{"class":331},[68,18389,17565],{"class":78},[68,18391,1652],{"class":331},[68,18393,9045],{"class":335},[68,18395,18396],{"class":70,"line":1830},[68,18397,2393],{"class":335},[68,18399,18400],{"class":70,"line":1835},[68,18401,17028],{"class":331},[68,18403,18404],{"class":70,"line":1849},[68,18405,2236],{"class":335},[68,18407,18408,18410,18412,18414,18416],{"class":70,"line":1854},[68,18409,9874],{"class":335},[68,18411,1376],{"class":331},[68,18413,17590],{"class":78},[68,18415,1652],{"class":331},[68,18417,9045],{"class":335},[68,18419,18420],{"class":70,"line":1860},[68,18421,2393],{"class":335},[68,18423,18424],{"class":70,"line":1881},[68,18425,1772],{"class":335},[68,18427,18428,18430,18432],{"class":70,"line":1886},[68,18429,339],{"class":331},[68,18431,2179],{"class":74},[68,18433,2182],{"class":335},[68,18435,18436],{"class":70,"line":1900},[68,18437,1753],{"class":335},[68,18439,18440],{"class":70,"line":1905},[68,18441,15258],{"class":393},[68,18443,18444],{"class":70,"line":1934},[68,18445,15005],{"class":335},[68,18447,18448],{"class":70,"line":1939},[68,18449,17627],{"class":335},[68,18451,18452],{"class":70,"line":1956},[68,18453,17199],{"class":393},[68,18455,18456,18458,18460,18462],{"class":70,"line":1961},[68,18457,1758],{"class":335},[68,18459,1376],{"class":331},[68,18461,17640],{"class":78},[68,18463,1498],{"class":335},[68,18465,18466,18468],{"class":70,"line":1966},[68,18467,14943],{"class":331},[68,18469,17649],{"class":335},[68,18471,18472,18474,18476],{"class":70,"line":1971},[68,18473,2218],{"class":335},[68,18475,1637],{"class":331},[68,18477,17658],{"class":335},[68,18479,18480,18482,18484],{"class":70,"line":1985},[68,18481,16800],{"class":335},[68,18483,17665],{"class":74},[68,18485,17668],{"class":335},[68,18487,18488,18490,18492,18494],{"class":70,"line":1990},[68,18489,1758],{"class":335},[68,18491,1376],{"class":331},[68,18493,17677],{"class":78},[68,18495,1498],{"class":335},[68,18497,18498,18500],{"class":70,"line":2783},[68,18499,14943],{"class":331},[68,18501,17686],{"class":335},[68,18503,18504,18506,18508,18510,18512],{"class":70,"line":2797},[68,18505,2218],{"class":335},[68,18507,1637],{"class":331},[68,18509,1153],{"class":335},[68,18511,1637],{"class":331},[68,18513,17699],{"class":335},[68,18515,18516,18518,18520],{"class":70,"line":2805},[68,18517,17704],{"class":335},[68,18519,17707],{"class":74},[68,18521,17710],{"class":335},[68,18523,18524,18526,18528],{"class":70,"line":2810},[68,18525,16800],{"class":335},[68,18527,17717],{"class":74},[68,18529,17720],{"class":335},[68,18531,18532,18534,18536,18538],{"class":70,"line":2816},[68,18533,1758],{"class":335},[68,18535,1376],{"class":331},[68,18537,17729],{"class":78},[68,18539,1498],{"class":335},[68,18541,18542,18544],{"class":70,"line":2822},[68,18543,14943],{"class":331},[68,18545,17738],{"class":335},[68,18547,18548,18550,18552,18554,18556],{"class":70,"line":2827},[68,18549,2218],{"class":335},[68,18551,1637],{"class":331},[68,18553,17747],{"class":335},[68,18555,1637],{"class":331},[68,18557,17752],{"class":335},[68,18559,18560],{"class":70,"line":8153},[68,18561,17757],{"class":335},[68,18563,18564,18566,18568],{"class":70,"line":8177},[68,18565,17762],{"class":335},[68,18567,17707],{"class":74},[68,18569,17767],{"class":335},[68,18571,18572,18574],{"class":70,"line":8182},[68,18573,17772],{"class":74},[68,18575,17775],{"class":335},[68,18577,18578],{"class":70,"line":8188},[68,18579,1772],{"class":335},[14,18581,18583],{"id":18582},"_82对象的初始化清理","8.2对象的初始化清理",[42,18585,18586,18589],{},[26,18587,18588],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[26,18590,18591],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[301,18593,18595],{"id":18594},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18597,18598,18599,18602],{},"对象的",[483,18600,18601],{},"初始化和清理","也是两个非常重要的安全问题",[19,18604,18605],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18607,18608],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18610,18611,18612,18615,18616,18619],{},"c++利用了",[483,18613,18614],{},"构造函数","和",[483,18617,18618],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18621,18622,18623],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[483,18624,18625],{},"我们不提供构造和析构，编译器会提供",[19,18627,18628],{},[483,18629,18630],{},"编译器提供的构造函数和析构函数是空实现。",[42,18632,18633,18636],{},[26,18634,18635],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[26,18637,18638,18639,18642],{},"析构函数：主要作用在于对象",[483,18640,18641],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18644,18645,18648],{},[483,18646,18647],{},"构造函数语法：",[65,18649,18650],{},"类名(){}",[23,18652,18653,18656,18659,18662,18665],{},[26,18654,18655],{},"构造函数，没有返回值也不写void",[26,18657,18658],{},"函数名称与类名相同",[26,18660,18661],{},"构造函数可以有参数，因此可以发生重载",[26,18663,18664],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[26,18666,18667,18668,762],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[65,18669,18670],{},"Person(){}",[19,18672,18673,14000,18676],{},[483,18674,18675],{},"析构函数语法：",[65,18677,18678],{},"~类名(){}",[23,18680,18681,18684,18687,18693],{},[26,18682,18683],{},"析构函数，没有返回值也不写void",[26,18685,18686],{},"函数名称与类名相同,在名称前加上符号  ~",[26,18688,18689,18690],{},"析构函数不可以有参数，因此",[483,18691,18692],{},"不可以发生重载",[26,18694,18695],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[58,18697,18699],{"className":322,"code":18698,"language":324,"meta":63,"style":63},"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",[65,18700,18701,18707,18711,18715,18720,18727,18731,18744,18748,18753,18760,18764,18777,18781,18785,18789,18793,18801,18805,18813,18817,18821,18829,18833,18838,18842,18849,18853,18866,18870,18878],{"__ignoreMap":63},[68,18702,18703,18705],{"class":70,"line":71},[68,18704,14899],{"class":331},[68,18706,15376],{"class":74},[68,18708,18709],{"class":70,"line":92},[68,18710,1753],{"class":335},[68,18712,18713],{"class":70,"line":1387},[68,18714,14921],{"class":331},[68,18716,18717],{"class":70,"line":1402},[68,18718,18719],{"class":393},"    \u002F\u002F构造函数\n",[68,18721,18722,18725],{"class":70,"line":1408},[68,18723,18724],{"class":74},"    Person",[68,18726,2182],{"class":335},[68,18728,18729],{"class":70,"line":1422},[68,18730,2236],{"class":335},[68,18732,18733,18735,18737,18740,18742],{"class":70,"line":1428},[68,18734,9874],{"class":335},[68,18736,1376],{"class":331},[68,18738,18739],{"class":78}," \"Person的构造函数调用\"",[68,18741,1652],{"class":331},[68,18743,9045],{"class":335},[68,18745,18746],{"class":70,"line":1519},[68,18747,2393],{"class":335},[68,18749,18750],{"class":70,"line":1525},[68,18751,18752],{"class":393},"    \u002F\u002F析构函数\n",[68,18754,18755,18758],{"class":70,"line":1537},[68,18756,18757],{"class":74},"    ~Person",[68,18759,2182],{"class":335},[68,18761,18762],{"class":70,"line":1819},[68,18763,2236],{"class":335},[68,18765,18766,18768,18770,18773,18775],{"class":70,"line":1824},[68,18767,9874],{"class":335},[68,18769,1376],{"class":331},[68,18771,18772],{"class":78}," \"Person的析构函数调用\"",[68,18774,1652],{"class":331},[68,18776,9045],{"class":335},[68,18778,18779],{"class":70,"line":1830},[68,18780,2393],{"class":335},[68,18782,18783],{"class":70,"line":1835},[68,18784,2606],{"emptyLinePlaceholder":260},[68,18786,18787],{"class":70,"line":1849},[68,18788,4201],{"class":335},[68,18790,18791],{"class":70,"line":1854},[68,18792,2606],{"emptyLinePlaceholder":260},[68,18794,18795,18797,18799],{"class":70,"line":1860},[68,18796,5569],{"class":331},[68,18798,5793],{"class":74},[68,18800,2182],{"class":335},[68,18802,18803],{"class":70,"line":1881},[68,18804,1753],{"class":335},[68,18806,18807,18810],{"class":70,"line":1886},[68,18808,18809],{"class":335},"    Person p;",[68,18811,18812],{"class":393},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[68,18814,18815],{"class":70,"line":1900},[68,18816,1772],{"class":335},[68,18818,18819],{"class":70,"line":1905},[68,18820,2606],{"emptyLinePlaceholder":260},[68,18822,18823,18825,18827],{"class":70,"line":1934},[68,18824,339],{"class":331},[68,18826,2179],{"class":74},[68,18828,11058],{"class":335},[68,18830,18831],{"class":70,"line":1939},[68,18832,13415],{"class":335},[68,18834,18835],{"class":70,"line":1956},[68,18836,18837],{"class":393},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[68,18839,18840],{"class":70,"line":1961},[68,18841,2606],{"emptyLinePlaceholder":260},[68,18843,18844,18846],{"class":70,"line":1966},[68,18845,18809],{"class":335},[68,18847,18848],{"class":393},"\u002F\u002F只有构造函数\n",[68,18850,18851],{"class":70,"line":1971},[68,18852,2606],{"emptyLinePlaceholder":260},[68,18854,18855,18857,18859,18861,18863],{"class":70,"line":1985},[68,18856,2509],{"class":74},[68,18858,336],{"class":335},[68,18860,2514],{"class":78},[68,18862,6171],{"class":335},[68,18864,18865],{"class":393},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[68,18867,18868],{"class":70,"line":1990},[68,18869,2606],{"emptyLinePlaceholder":260},[68,18871,18872,18874,18876],{"class":70,"line":2783},[68,18873,4296],{"class":331},[68,18875,4299],{"class":82},[68,18877,1498],{"class":335},[68,18879,18880],{"class":70,"line":2797},[68,18881,1772],{"class":335},[19,18883,18884],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[301,18886,18888],{"id":18887},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18890,18891],{},"两种分类方式：",[19,18893,18894],{},"​\t按参数分为： 有参构造和无参构造",[19,18896,18897],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18899,18900],{},"三种调用方式：",[19,18902,18903],{},"​\t括号法",[19,18905,18906],{},"​\t显示法",[19,18908,18909],{},"​\t隐式转换法",[58,18911,18913],{"className":322,"code":18912,"language":324,"meta":63,"style":63},"#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",[65,18914,18915,18921,18931,18936,18941,18946,18951,18955,18963,18967,18971,18975,18981,18985,18998,19002,19014,19018,19027,19040,19044,19048,19054,19058,19071,19075,19080,19096,19100,19105,19114,19127,19131,19137,19141,19146,19154,19158,19163,19167,19175,19179,19184,19189,19194,19199,19204,19208,19213,19218,19223,19228,19232,19237,19242,19258,19270,19275,19279,19284,19289,19294,19298,19303,19317,19330,19334,19342,19346,19352,19358,19366],{"__ignoreMap":63},[68,18916,18917,18919],{"class":70,"line":71},[68,18918,2156],{"class":331},[68,18920,2159],{"class":78},[68,18922,18923,18925,18927,18929],{"class":70,"line":92},[68,18924,2164],{"class":331},[68,18926,2167],{"class":331},[68,18928,2170],{"class":74},[68,18930,1498],{"class":335},[68,18932,18933],{"class":70,"line":1387},[68,18934,18935],{"class":393},"\u002F\u002F1.构造函数的分类及调用\n",[68,18937,18938],{"class":70,"line":1402},[68,18939,18940],{"class":393},"\u002F\u002F分类\n",[68,18942,18943],{"class":70,"line":1408},[68,18944,18945],{"class":393},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[68,18947,18948],{"class":70,"line":1422},[68,18949,18950],{"class":393},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[68,18952,18953],{"class":70,"line":1428},[68,18954,2606],{"emptyLinePlaceholder":260},[68,18956,18957,18959,18961],{"class":70,"line":1519},[68,18958,14899],{"class":331},[68,18960,15774],{"class":74},[68,18962,2880],{"class":335},[68,18964,18965],{"class":70,"line":1525},[68,18966,1753],{"class":335},[68,18968,18969],{"class":70,"line":1537},[68,18970,14921],{"class":331},[68,18972,18973],{"class":70,"line":1819},[68,18974,18719],{"class":393},[68,18976,18977,18979],{"class":70,"line":1824},[68,18978,18724],{"class":74},[68,18980,2182],{"class":335},[68,18982,18983],{"class":70,"line":1830},[68,18984,2236],{"class":335},[68,18986,18987,18989,18991,18994,18996],{"class":70,"line":1835},[68,18988,3657],{"class":335},[68,18990,1376],{"class":331},[68,18992,18993],{"class":78},"\"Person构造函数无参构造\"",[68,18995,1376],{"class":331},[68,18997,1399],{"class":335},[68,18999,19000],{"class":70,"line":1849},[68,19001,2393],{"class":335},[68,19003,19004,19006,19008,19010,19012],{"class":70,"line":1854},[68,19005,18724],{"class":74},[68,19007,336],{"class":335},[68,19009,339],{"class":331},[68,19011,1606],{"class":5421},[68,19013,342],{"class":335},[68,19015,19016],{"class":70,"line":1860},[68,19017,2236],{"class":335},[68,19019,19020,19023,19025],{"class":70,"line":1881},[68,19021,19022],{"class":335},"        age",[68,19024,381],{"class":331},[68,19026,6402],{"class":335},[68,19028,19029,19031,19033,19036,19038],{"class":70,"line":1886},[68,19030,3657],{"class":335},[68,19032,1376],{"class":331},[68,19034,19035],{"class":78},"\"Person构造函数有参构造\"",[68,19037,1376],{"class":331},[68,19039,1399],{"class":335},[68,19041,19042],{"class":70,"line":1900},[68,19043,2393],{"class":335},[68,19045,19046],{"class":70,"line":1905},[68,19047,18752],{"class":393},[68,19049,19050,19052],{"class":70,"line":1934},[68,19051,18757],{"class":74},[68,19053,2182],{"class":335},[68,19055,19056],{"class":70,"line":1939},[68,19057,2236],{"class":335},[68,19059,19060,19062,19064,19067,19069],{"class":70,"line":1956},[68,19061,3657],{"class":335},[68,19063,1376],{"class":331},[68,19065,19066],{"class":78},"\"Person析构函数被调用\"",[68,19068,1376],{"class":331},[68,19070,1399],{"class":335},[68,19072,19073],{"class":70,"line":1961},[68,19074,2393],{"class":335},[68,19076,19077],{"class":70,"line":1966},[68,19078,19079],{"class":393},"    \u002F\u002F拷贝构造函数\n",[68,19081,19082,19084,19086,19088,19090,19092,19094],{"class":70,"line":1971},[68,19083,18724],{"class":74},[68,19085,336],{"class":335},[68,19087,6997],{"class":331},[68,19089,15774],{"class":74},[68,19091,10789],{"class":331},[68,19093,19],{"class":5421},[68,19095,342],{"class":335},[68,19097,19098],{"class":70,"line":1985},[68,19099,2236],{"class":335},[68,19101,19102],{"class":70,"line":1990},[68,19103,19104],{"class":393},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[68,19106,19107,19109,19111],{"class":70,"line":2783},[68,19108,19022],{"class":335},[68,19110,381],{"class":331},[68,19112,19113],{"class":335},"p.age;\n",[68,19115,19116,19118,19120,19123,19125],{"class":70,"line":2797},[68,19117,3657],{"class":335},[68,19119,1376],{"class":331},[68,19121,19122],{"class":78},"\"Person拷贝构造函数被调用\"",[68,19124,1376],{"class":331},[68,19126,1399],{"class":335},[68,19128,19129],{"class":70,"line":2805},[68,19130,2393],{"class":335},[68,19132,19133,19135],{"class":70,"line":2810},[68,19134,2191],{"class":331},[68,19136,8002],{"class":335},[68,19138,19139],{"class":70,"line":2816},[68,19140,4201],{"class":335},[68,19142,19143],{"class":70,"line":2822},[68,19144,19145],{"class":393},"\u002F\u002F调用\n",[68,19147,19148,19150,19152],{"class":70,"line":2827},[68,19149,5569],{"class":331},[68,19151,5793],{"class":74},[68,19153,2182],{"class":335},[68,19155,19156],{"class":70,"line":8153},[68,19157,1753],{"class":335},[68,19159,19160],{"class":70,"line":8177},[68,19161,19162],{"class":393},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[68,19164,19165],{"class":70,"line":8182},[68,19166,1772],{"class":335},[68,19168,19169,19171,19173],{"class":70,"line":8188},[68,19170,5569],{"class":331},[68,19172,5862],{"class":74},[68,19174,2182],{"class":335},[68,19176,19177],{"class":70,"line":8215},[68,19178,1753],{"class":335},[68,19180,19181],{"class":70,"line":8220},[68,19182,19183],{"class":393},"    \u002F\u002F1.括号法\n",[68,19185,19186],{"class":70,"line":8226},[68,19187,19188],{"class":393},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[68,19190,19191],{"class":70,"line":8238},[68,19192,19193],{"class":393},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[68,19195,19196],{"class":70,"line":8250},[68,19197,19198],{"class":393},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[68,19200,19201],{"class":70,"line":8262},[68,19202,19203],{"class":393},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[68,19205,19206],{"class":70,"line":9921},[68,19207,2606],{"emptyLinePlaceholder":260},[68,19209,19210],{"class":70,"line":9946},[68,19211,19212],{"class":393},"    \u002F\u002F注意事项\n",[68,19214,19215],{"class":70,"line":9969},[68,19216,19217],{"class":393},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[68,19219,19220],{"class":70,"line":9993},[68,19221,19222],{"class":393},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[68,19224,19225],{"class":70,"line":9998},[68,19226,19227],{"class":393},"    \u002F\u002F Person p4();\n",[68,19229,19230],{"class":70,"line":10003},[68,19231,2606],{"emptyLinePlaceholder":260},[68,19233,19234],{"class":70,"line":10008},[68,19235,19236],{"class":393},"    \u002F\u002F2.显示法\n",[68,19238,19239],{"class":70,"line":10017},[68,19240,19241],{"class":335},"    Person p1;\n",[68,19243,19244,19247,19249,19252,19254,19256],{"class":70,"line":10022},[68,19245,19246],{"class":335},"    Person p2",[68,19248,381],{"class":331},[68,19250,19251],{"class":74},"Person",[68,19253,336],{"class":335},[68,19255,779],{"class":82},[68,19257,2925],{"class":335},[68,19259,19260,19263,19265,19267],{"class":70,"line":10028},[68,19261,19262],{"class":335},"    Person p3",[68,19264,381],{"class":331},[68,19266,19251],{"class":74},[68,19268,19269],{"class":335},"(p2);\n",[68,19271,19272],{"class":70,"line":10049},[68,19273,19274],{"class":393},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[68,19276,19277],{"class":70,"line":10055},[68,19278,2606],{"emptyLinePlaceholder":260},[68,19280,19281],{"class":70,"line":10069},[68,19282,19283],{"class":393},"    \u002F\u002F 注意事项2\n",[68,19285,19286],{"class":70,"line":10075},[68,19287,19288],{"class":393},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[68,19290,19291],{"class":70,"line":10102},[68,19292,19293],{"class":393},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[68,19295,19296],{"class":70,"line":10111},[68,19297,2606],{"emptyLinePlaceholder":260},[68,19299,19300],{"class":70,"line":10117},[68,19301,19302],{"class":393},"    \u002F\u002F3.隐士转换法\n",[68,19304,19305,19308,19310,19312,19314],{"class":70,"line":10125},[68,19306,19307],{"class":335},"    Person p4",[68,19309,381],{"class":331},[68,19311,779],{"class":82},[68,19313,390],{"class":335},[68,19315,19316],{"class":393},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[68,19318,19319,19322,19324,19327],{"class":70,"line":10130},[68,19320,19321],{"class":335},"    Person p5",[68,19323,381],{"class":331},[68,19325,19326],{"class":335},"p4;",[68,19328,19329],{"class":393}," \u002F\u002F 这里会调用拷贝构造函数\n",[68,19331,19332],{"class":70,"line":16809},[68,19333,1772],{"class":335},[68,19335,19336,19338,19340],{"class":70,"line":16815},[68,19337,339],{"class":331},[68,19339,2179],{"class":74},[68,19341,2182],{"class":335},[68,19343,19344],{"class":70,"line":16838},[68,19345,1753],{"class":335},[68,19347,19348,19350],{"class":70,"line":16844},[68,19349,5838],{"class":74},[68,19351,5841],{"class":335},[68,19353,19354,19356],{"class":70,"line":16867},[68,19355,5907],{"class":74},[68,19357,5841],{"class":335},[68,19359,19360,19362,19364],{"class":70,"line":16881},[68,19361,4296],{"class":331},[68,19363,4299],{"class":82},[68,19365,1498],{"class":335},[68,19367,19368],{"class":70,"line":16901},[68,19369,1772],{"class":335},[19,19371,19372,19375],{},[483,19373,19374],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[301,19377,19379],{"id":19378},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19381,19382],{},"C++中拷贝构造函数调用时机通常有三种情况",[42,19384,19385,19388,19391],{},[26,19386,19387],{},"使用一个已经创建完毕的对象来初始化一个新对象",[26,19389,19390],{},"值传递的方式给函数参数传值",[26,19392,19393],{},"以值方式返回局部对象",[58,19395,19397],{"className":322,"code":19396,"language":324,"meta":63,"style":63},"#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",[65,19398,19399,19405,19415,19419,19424,19428,19433,19438,19443,19449,19453,19457,19463,19467,19480,19484,19489,19501,19505,19513,19526,19530,19534,19550,19554,19563,19576,19580,19586,19590,19602,19606,19612,19616,19620,19628,19632,19645,19653,19671,19675,19680,19685,19700,19704,19717,19721,19729,19733,19737,19745,19749,19754,19763,19767,19771,19796,19806,19810,19818,19822,19833,19858,19862,19866,19870,19878,19882,19887,19892,19899,19904,19909,19914,19919,19923,19928,19932,19937,19941,19946,19951,19955,19959,19964,19969,19977],{"__ignoreMap":63},[68,19400,19401,19403],{"class":70,"line":71},[68,19402,2156],{"class":331},[68,19404,2159],{"class":78},[68,19406,19407,19409,19411,19413],{"class":70,"line":92},[68,19408,2164],{"class":331},[68,19410,2167],{"class":331},[68,19412,2170],{"class":74},[68,19414,1498],{"class":335},[68,19416,19417],{"class":70,"line":1387},[68,19418,2606],{"emptyLinePlaceholder":260},[68,19420,19421],{"class":70,"line":1402},[68,19422,19423],{"class":393},"\u002F\u002F拷贝构造函数调用时机\n",[68,19425,19426],{"class":70,"line":1408},[68,19427,2606],{"emptyLinePlaceholder":260},[68,19429,19430],{"class":70,"line":1422},[68,19431,19432],{"class":393},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[68,19434,19435],{"class":70,"line":1428},[68,19436,19437],{"class":393},"\u002F\u002F2.值传递的方式给函数参数传值\n",[68,19439,19440],{"class":70,"line":1519},[68,19441,19442],{"class":393},"\u002F\u002F3.以值方式返回局部对象\n",[68,19444,19445,19447],{"class":70,"line":1525},[68,19446,14899],{"class":331},[68,19448,15376],{"class":74},[68,19450,19451],{"class":70,"line":1537},[68,19452,1753],{"class":335},[68,19454,19455],{"class":70,"line":1819},[68,19456,14921],{"class":331},[68,19458,19459,19461],{"class":70,"line":1824},[68,19460,18724],{"class":74},[68,19462,2182],{"class":335},[68,19464,19465],{"class":70,"line":1830},[68,19466,2236],{"class":335},[68,19468,19469,19471,19473,19476,19478],{"class":70,"line":1835},[68,19470,9874],{"class":335},[68,19472,1376],{"class":331},[68,19474,19475],{"class":78}," \"Person的默认构造函数调用\"",[68,19477,1652],{"class":331},[68,19479,9045],{"class":335},[68,19481,19482],{"class":70,"line":1849},[68,19483,2393],{"class":335},[68,19485,19486],{"class":70,"line":1854},[68,19487,19488],{"class":393},"    \u002F\u002F有参构造\n",[68,19490,19491,19493,19495,19497,19499],{"class":70,"line":1860},[68,19492,18724],{"class":74},[68,19494,336],{"class":335},[68,19496,339],{"class":331},[68,19498,15894],{"class":5421},[68,19500,342],{"class":335},[68,19502,19503],{"class":70,"line":1881},[68,19504,2236],{"class":335},[68,19506,19507,19509,19511],{"class":70,"line":1886},[68,19508,15948],{"class":335},[68,19510,381],{"class":331},[68,19512,8002],{"class":335},[68,19514,19515,19517,19519,19522,19524],{"class":70,"line":1900},[68,19516,9874],{"class":335},[68,19518,1376],{"class":331},[68,19520,19521],{"class":78}," \"Person的有参构造函数调用\"",[68,19523,1652],{"class":331},[68,19525,9045],{"class":335},[68,19527,19528],{"class":70,"line":1905},[68,19529,2393],{"class":335},[68,19531,19532],{"class":70,"line":1934},[68,19533,19079],{"class":393},[68,19535,19536,19538,19540,19542,19544,19546,19548],{"class":70,"line":1939},[68,19537,18724],{"class":74},[68,19539,336],{"class":335},[68,19541,6997],{"class":331},[68,19543,15774],{"class":74},[68,19545,10789],{"class":331},[68,19547,19],{"class":5421},[68,19549,342],{"class":335},[68,19551,19552],{"class":70,"line":1956},[68,19553,2236],{"class":335},[68,19555,19556,19558,19560],{"class":70,"line":1961},[68,19557,15948],{"class":335},[68,19559,381],{"class":331},[68,19561,19562],{"class":335}," p.m_Age;\n",[68,19564,19565,19567,19569,19572,19574],{"class":70,"line":1966},[68,19566,9874],{"class":335},[68,19568,1376],{"class":331},[68,19570,19571],{"class":78}," \"Person的拷贝构造函数调用\"",[68,19573,1652],{"class":331},[68,19575,9045],{"class":335},[68,19577,19578],{"class":70,"line":1971},[68,19579,2393],{"class":335},[68,19581,19582,19584],{"class":70,"line":1985},[68,19583,18757],{"class":74},[68,19585,2182],{"class":335},[68,19587,19588],{"class":70,"line":1990},[68,19589,2236],{"class":335},[68,19591,19592,19594,19596,19598,19600],{"class":70,"line":2783},[68,19593,9874],{"class":335},[68,19595,1376],{"class":331},[68,19597,18772],{"class":78},[68,19599,1652],{"class":331},[68,19601,9045],{"class":335},[68,19603,19604],{"class":70,"line":2797},[68,19605,2393],{"class":335},[68,19607,19608,19610],{"class":70,"line":2805},[68,19609,2191],{"class":331},[68,19611,15871],{"class":335},[68,19613,19614],{"class":70,"line":2810},[68,19615,4201],{"class":335},[68,19617,19618],{"class":70,"line":2816},[68,19619,19432],{"class":393},[68,19621,19622,19624,19626],{"class":70,"line":2822},[68,19623,5569],{"class":331},[68,19625,5793],{"class":74},[68,19627,2182],{"class":335},[68,19629,19630],{"class":70,"line":2827},[68,19631,1753],{"class":335},[68,19633,19634,19637,19639,19641,19643],{"class":70,"line":8153},[68,19635,19636],{"class":335},"    Person ",[68,19638,7335],{"class":74},[68,19640,336],{"class":335},[68,19642,1033],{"class":82},[68,19644,2925],{"class":335},[68,19646,19647,19649,19651],{"class":70,"line":8177},[68,19648,19636],{"class":335},[68,19650,7238],{"class":74},[68,19652,17720],{"class":335},[68,19654,19655,19657,19659,19662,19664,19667,19669],{"class":70,"line":8182},[68,19656,1758],{"class":335},[68,19658,1376],{"class":331},[68,19660,19661],{"class":78},"\"P2的年龄为：\"",[68,19663,1376],{"class":331},[68,19665,19666],{"class":335},"p2.m_Age",[68,19668,1376],{"class":331},[68,19670,1399],{"class":335},[68,19672,19673],{"class":70,"line":8188},[68,19674,1772],{"class":335},[68,19676,19677],{"class":70,"line":8215},[68,19678,19679],{"class":393},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[68,19681,19682],{"class":70,"line":8220},[68,19683,19684],{"class":393},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[68,19686,19687,19689,19692,19694,19696,19698],{"class":70,"line":8226},[68,19688,5569],{"class":331},[68,19690,19691],{"class":74}," doWork",[68,19693,336],{"class":335},[68,19695,19251],{"class":74},[68,19697,7030],{"class":5421},[68,19699,342],{"class":335},[68,19701,19702],{"class":70,"line":8238},[68,19703,1753],{"class":335},[68,19705,19706,19708,19710,19713,19715],{"class":70,"line":8250},[68,19707,6734],{"class":335},[68,19709,1376],{"class":331},[68,19711,19712],{"class":78}," \"doWork函数调用\"",[68,19714,1652],{"class":331},[68,19716,9045],{"class":335},[68,19718,19719],{"class":70,"line":8262},[68,19720,1772],{"class":335},[68,19722,19723,19725,19727],{"class":70,"line":9921},[68,19724,5569],{"class":331},[68,19726,5862],{"class":74},[68,19728,2182],{"class":335},[68,19730,19731],{"class":70,"line":9946},[68,19732,1753],{"class":335},[68,19734,19735],{"class":70,"line":9969},[68,19736,15518],{"class":335},[68,19738,19739,19742],{"class":70,"line":9993},[68,19740,19741],{"class":74},"    doWork",[68,19743,19744],{"class":335},"(p);\n",[68,19746,19747],{"class":70,"line":9998},[68,19748,1772],{"class":335},[68,19750,19751],{"class":70,"line":10003},[68,19752,19753],{"class":393},"\u002F\u002F 3.以值方式返回局部对象\n",[68,19755,19756,19758,19761],{"class":70,"line":10008},[68,19757,19251],{"class":74},[68,19759,19760],{"class":74}," doWork2",[68,19762,2182],{"class":335},[68,19764,19765],{"class":70,"line":10017},[68,19766,1753],{"class":335},[68,19768,19769],{"class":70,"line":10022},[68,19770,19241],{"class":335},[68,19772,19773,19775,19777,19779,19781,19783,19785,19787,19789,19791,19793],{"class":70,"line":10028},[68,19774,1758],{"class":335},[68,19776,1376],{"class":331},[68,19778,336],{"class":335},[68,19780,339],{"class":331},[68,19782,6723],{"class":331},[68,19784,762],{"class":335},[68,19786,686],{"class":331},[68,19788,7335],{"class":335},[68,19790,1376],{"class":331},[68,19792,1446],{"class":335},[68,19794,19795],{"class":393},"\u002F\u002F打印p1的地址\n",[68,19797,19798,19800,19803],{"class":70,"line":10049},[68,19799,4296],{"class":331},[68,19801,19802],{"class":335}," p1;",[68,19804,19805],{"class":393},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[68,19807,19808],{"class":70,"line":10055},[68,19809,1772],{"class":335},[68,19811,19812,19814,19816],{"class":70,"line":10069},[68,19813,5569],{"class":331},[68,19815,5934],{"class":74},[68,19817,2182],{"class":335},[68,19819,19820],{"class":70,"line":10075},[68,19821,1753],{"class":335},[68,19823,19824,19827,19829,19831],{"class":70,"line":10102},[68,19825,19826],{"class":335},"    Person p ",[68,19828,381],{"class":331},[68,19830,19760],{"class":74},[68,19832,5841],{"class":335},[68,19834,19835,19837,19839,19841,19843,19845,19847,19849,19851,19853,19855],{"class":70,"line":10111},[68,19836,1758],{"class":335},[68,19838,1376],{"class":331},[68,19840,336],{"class":335},[68,19842,339],{"class":331},[68,19844,6723],{"class":331},[68,19846,762],{"class":335},[68,19848,686],{"class":331},[68,19850,19],{"class":335},[68,19852,1376],{"class":331},[68,19854,1446],{"class":335},[68,19856,19857],{"class":393},"\u002F\u002F打印p的地址\n",[68,19859,19860],{"class":70,"line":10117},[68,19861,1772],{"class":335},[68,19863,19864],{"class":70,"line":10125},[68,19865,2606],{"emptyLinePlaceholder":260},[68,19867,19868],{"class":70,"line":10130},[68,19869,2606],{"emptyLinePlaceholder":260},[68,19871,19872,19874,19876],{"class":70,"line":16809},[68,19873,339],{"class":331},[68,19875,2179],{"class":74},[68,19877,2182],{"class":335},[68,19879,19880],{"class":70,"line":16815},[68,19881,1753],{"class":335},[68,19883,19884],{"class":70,"line":16838},[68,19885,19886],{"class":393},"    \u002F\u002F test01();\n",[68,19888,19889],{"class":70,"line":16844},[68,19890,19891],{"class":393},"    \u002F\u002F test02();\n",[68,19893,19894,19897],{"class":70,"line":16867},[68,19895,19896],{"class":74},"    test03",[68,19898,5841],{"class":335},[68,19900,19901],{"class":70,"line":16881},[68,19902,19903],{"class":393},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[68,19905,19906],{"class":70,"line":16901},[68,19907,19908],{"class":393},"\u002F\u002F 输出结果如下：\n",[68,19910,19911],{"class":70,"line":16907},[68,19912,19913],{"class":393},"\u002F\u002F Person的默认构造函数调用\n",[68,19915,19916],{"class":70,"line":16918},[68,19917,19918],{"class":393},"\u002F\u002F 0x7fffffffceec\n",[68,19920,19921],{"class":70,"line":16941},[68,19922,19918],{"class":393},[68,19924,19925],{"class":70,"line":16963},[68,19926,19927],{"class":393},"\u002F\u002F Person的析构函数调用\n",[68,19929,19930],{"class":70,"line":16968},[68,19931,2606],{"emptyLinePlaceholder":260},[68,19933,19934],{"class":70,"line":16974},[68,19935,19936],{"class":393},"\u002F\u002F 之前的输出结果如下：\n",[68,19938,19939],{"class":70,"line":16988},[68,19940,19913],{"class":393},[68,19942,19943],{"class":70,"line":17001},[68,19944,19945],{"class":393},"\u002F\u002F 地址\n",[68,19947,19948],{"class":70,"line":17006},[68,19949,19950],{"class":393},"\u002F\u002F Person的拷贝构造函数调用\n",[68,19952,19953],{"class":70,"line":17020},[68,19954,19927],{"class":393},[68,19956,19957],{"class":70,"line":17025},[68,19958,19945],{"class":393},[68,19960,19961],{"class":70,"line":17031},[68,19962,19963],{"class":393},"\u002F\u002F (这两次输出的地址也是不同的) \n",[68,19965,19966],{"class":70,"line":17036},[68,19967,19968],{"class":393},"\u002F\u002F Person的析构函数调用     \n",[68,19970,19971,19973,19975],{"class":70,"line":17050},[68,19972,4296],{"class":331},[68,19974,4299],{"class":82},[68,19976,1498],{"class":335},[68,19978,19979],{"class":70,"line":17055},[68,19980,1772],{"class":335},[19,19982,19983],{},"简化版理解",[58,19985,19987],{"className":322,"code":19986,"language":324,"meta":63,"style":63},"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",[65,19988,19989,19997,20001,20007,20020,20031,20035,20047,20060,20068,20072,20088,20101,20110,20114,20119,20125,20138,20142,20146,20153,20157,20161,20166,20174,20178,20194,20207,20220,20224,20229,20237,20241,20245,20250,20255,20271,20279,20286,20292,20296,20300,20305,20313,20317,20321,20344,20351,20355,20359,20367,20371,20381,20403,20407,20411,20415,20423,20427,20432,20437,20443,20447,20457,20461,20469],{"__ignoreMap":63},[68,19990,19991,19993,19995],{"class":70,"line":71},[68,19992,14899],{"class":331},[68,19994,15774],{"class":74},[68,19996,15777],{"class":335},[68,19998,19999],{"class":70,"line":92},[68,20000,14921],{"class":331},[68,20002,20003,20005],{"class":70,"line":1387},[68,20004,18724],{"class":74},[68,20006,11058],{"class":335},[68,20008,20009,20011,20013,20016,20018],{"class":70,"line":1402},[68,20010,9874],{"class":335},[68,20012,1376],{"class":331},[68,20014,20015],{"class":78}," \"无参构造函数!\"",[68,20017,1652],{"class":331},[68,20019,9045],{"class":335},[68,20021,20022,20025,20027,20029],{"class":70,"line":1408},[68,20023,20024],{"class":335},"        mAge ",[68,20026,381],{"class":331},[68,20028,4299],{"class":82},[68,20030,1498],{"class":335},[68,20032,20033],{"class":70,"line":1422},[68,20034,2393],{"class":335},[68,20036,20037,20039,20041,20043,20045],{"class":70,"line":1428},[68,20038,18724],{"class":74},[68,20040,336],{"class":335},[68,20042,339],{"class":331},[68,20044,15894],{"class":5421},[68,20046,12647],{"class":335},[68,20048,20049,20051,20053,20056,20058],{"class":70,"line":1519},[68,20050,9874],{"class":335},[68,20052,1376],{"class":331},[68,20054,20055],{"class":78}," \"有参构造函数!\"",[68,20057,1652],{"class":331},[68,20059,9045],{"class":335},[68,20061,20062,20064,20066],{"class":70,"line":1525},[68,20063,20024],{"class":335},[68,20065,381],{"class":331},[68,20067,8002],{"class":335},[68,20069,20070],{"class":70,"line":1537},[68,20071,2393],{"class":335},[68,20073,20074,20076,20078,20080,20082,20084,20086],{"class":70,"line":1819},[68,20075,18724],{"class":74},[68,20077,336],{"class":335},[68,20079,6997],{"class":331},[68,20081,15774],{"class":74},[68,20083,686],{"class":331},[68,20085,7030],{"class":5421},[68,20087,12647],{"class":335},[68,20089,20090,20092,20094,20097,20099],{"class":70,"line":1824},[68,20091,9874],{"class":335},[68,20093,1376],{"class":331},[68,20095,20096],{"class":78}," \"拷贝构造函数!\"",[68,20098,1652],{"class":331},[68,20100,9045],{"class":335},[68,20102,20103,20105,20107],{"class":70,"line":1830},[68,20104,20024],{"class":335},[68,20106,381],{"class":331},[68,20108,20109],{"class":335}," p.mAge;\n",[68,20111,20112],{"class":70,"line":1835},[68,20113,2393],{"class":335},[68,20115,20116],{"class":70,"line":1849},[68,20117,20118],{"class":393},"    \u002F\u002F析构函数在释放内存之前调用\n",[68,20120,20121,20123],{"class":70,"line":1854},[68,20122,18757],{"class":74},[68,20124,11058],{"class":335},[68,20126,20127,20129,20131,20134,20136],{"class":70,"line":1860},[68,20128,9874],{"class":335},[68,20130,1376],{"class":331},[68,20132,20133],{"class":78}," \"析构函数!\"",[68,20135,1652],{"class":331},[68,20137,9045],{"class":335},[68,20139,20140],{"class":70,"line":1881},[68,20141,2393],{"class":335},[68,20143,20144],{"class":70,"line":1886},[68,20145,14921],{"class":331},[68,20147,20148,20150],{"class":70,"line":1900},[68,20149,2191],{"class":331},[68,20151,20152],{"class":335}," mAge;\n",[68,20154,20155],{"class":70,"line":1905},[68,20156,4201],{"class":335},[68,20158,20159],{"class":70,"line":1934},[68,20160,2606],{"emptyLinePlaceholder":260},[68,20162,20163],{"class":70,"line":1939},[68,20164,20165],{"class":393},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[68,20167,20168,20170,20172],{"class":70,"line":1956},[68,20169,5569],{"class":331},[68,20171,5793],{"class":74},[68,20173,11058],{"class":335},[68,20175,20176],{"class":70,"line":1961},[68,20177,2606],{"emptyLinePlaceholder":260},[68,20179,20180,20182,20185,20187,20189,20191],{"class":70,"line":1966},[68,20181,19636],{"class":335},[68,20183,20184],{"class":74},"man",[68,20186,336],{"class":335},[68,20188,644],{"class":82},[68,20190,6171],{"class":335},[68,20192,20193],{"class":393}," \u002F\u002Fp对象已经创建完毕\n",[68,20195,20196,20198,20201,20204],{"class":70,"line":1971},[68,20197,19636],{"class":335},[68,20199,20200],{"class":74},"newman",[68,20202,20203],{"class":335},"(man);",[68,20205,20206],{"class":393}," \u002F\u002F调用拷贝构造函数\n",[68,20208,20209,20212,20214,20217],{"class":70,"line":1985},[68,20210,20211],{"class":335},"    Person newman2 ",[68,20213,381],{"class":331},[68,20215,20216],{"class":335}," man;",[68,20218,20219],{"class":393}," \u002F\u002F拷贝构造\n",[68,20221,20222],{"class":70,"line":1990},[68,20223,2606],{"emptyLinePlaceholder":260},[68,20225,20226],{"class":70,"line":2783},[68,20227,20228],{"class":393},"    \u002F\u002FPerson newman3;\n",[68,20230,20231,20234],{"class":70,"line":2797},[68,20232,20233],{"class":393},"    \u002F\u002Fnewman3 = man;",[68,20235,20236],{"class":393}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[68,20238,20239],{"class":70,"line":2805},[68,20240,1772],{"class":335},[68,20242,20243],{"class":70,"line":2810},[68,20244,2606],{"emptyLinePlaceholder":260},[68,20246,20247],{"class":70,"line":2816},[68,20248,20249],{"class":393},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[68,20251,20252],{"class":70,"line":2822},[68,20253,20254],{"class":393},"\u002F\u002F相当于Person p1 = p;\n",[68,20256,20257,20259,20261,20263,20265,20268],{"class":70,"line":2827},[68,20258,5569],{"class":331},[68,20260,19691],{"class":74},[68,20262,336],{"class":335},[68,20264,19251],{"class":74},[68,20266,20267],{"class":5421}," p1",[68,20269,20270],{"class":335},") {}\n",[68,20272,20273,20275,20277],{"class":70,"line":8153},[68,20274,5569],{"class":331},[68,20276,5862],{"class":74},[68,20278,11058],{"class":335},[68,20280,20281,20283],{"class":70,"line":8177},[68,20282,18809],{"class":335},[68,20284,20285],{"class":393}," \u002F\u002F无参构造函数\n",[68,20287,20288,20290],{"class":70,"line":8182},[68,20289,19741],{"class":74},[68,20291,19744],{"class":335},[68,20293,20294],{"class":70,"line":8188},[68,20295,1772],{"class":335},[68,20297,20298],{"class":70,"line":8215},[68,20299,2606],{"emptyLinePlaceholder":260},[68,20301,20302],{"class":70,"line":8220},[68,20303,20304],{"class":393},"\u002F\u002F3. 以值方式返回局部对象\n",[68,20306,20307,20309,20311],{"class":70,"line":8226},[68,20308,19251],{"class":74},[68,20310,19760],{"class":74},[68,20312,2182],{"class":335},[68,20314,20315],{"class":70,"line":8238},[68,20316,1753],{"class":335},[68,20318,20319],{"class":70,"line":8250},[68,20320,19241],{"class":335},[68,20322,20323,20325,20327,20329,20331,20333,20335,20337,20340,20342],{"class":70,"line":8262},[68,20324,6734],{"class":335},[68,20326,1376],{"class":331},[68,20328,1865],{"class":335},[68,20330,339],{"class":331},[68,20332,6723],{"class":331},[68,20334,762],{"class":335},[68,20336,686],{"class":331},[68,20338,20339],{"class":335},"p1 ",[68,20341,1376],{"class":331},[68,20343,9045],{"class":335},[68,20345,20346,20348],{"class":70,"line":9921},[68,20347,4296],{"class":331},[68,20349,20350],{"class":335}," p1;\n",[68,20352,20353],{"class":70,"line":9946},[68,20354,1772],{"class":335},[68,20356,20357],{"class":70,"line":9969},[68,20358,2606],{"emptyLinePlaceholder":260},[68,20360,20361,20363,20365],{"class":70,"line":9993},[68,20362,5569],{"class":331},[68,20364,5934],{"class":74},[68,20366,2182],{"class":335},[68,20368,20369],{"class":70,"line":9998},[68,20370,1753],{"class":335},[68,20372,20373,20375,20377,20379],{"class":70,"line":10003},[68,20374,19826],{"class":335},[68,20376,381],{"class":331},[68,20378,19760],{"class":74},[68,20380,5841],{"class":335},[68,20382,20383,20385,20387,20389,20391,20393,20395,20397,20399,20401],{"class":70,"line":10008},[68,20384,6734],{"class":335},[68,20386,1376],{"class":331},[68,20388,1865],{"class":335},[68,20390,339],{"class":331},[68,20392,6723],{"class":331},[68,20394,762],{"class":335},[68,20396,686],{"class":331},[68,20398,11653],{"class":335},[68,20400,1376],{"class":331},[68,20402,9045],{"class":335},[68,20404,20405],{"class":70,"line":10017},[68,20406,1772],{"class":335},[68,20408,20409],{"class":70,"line":10022},[68,20410,2606],{"emptyLinePlaceholder":260},[68,20412,20413],{"class":70,"line":10028},[68,20414,2606],{"emptyLinePlaceholder":260},[68,20416,20417,20419,20421],{"class":70,"line":10049},[68,20418,339],{"class":331},[68,20420,2179],{"class":74},[68,20422,11058],{"class":335},[68,20424,20425],{"class":70,"line":10055},[68,20426,2606],{"emptyLinePlaceholder":260},[68,20428,20429],{"class":70,"line":10069},[68,20430,20431],{"class":393},"    \u002F\u002Ftest01();\n",[68,20433,20434],{"class":70,"line":10075},[68,20435,20436],{"class":393},"    \u002F\u002Ftest02();\n",[68,20438,20439,20441],{"class":70,"line":10102},[68,20440,19896],{"class":74},[68,20442,5841],{"class":335},[68,20444,20445],{"class":70,"line":10111},[68,20446,2606],{"emptyLinePlaceholder":260},[68,20448,20449,20451,20453,20455],{"class":70,"line":10117},[68,20450,2509],{"class":74},[68,20452,336],{"class":335},[68,20454,2514],{"class":78},[68,20456,2925],{"class":335},[68,20458,20459],{"class":70,"line":10125},[68,20460,2606],{"emptyLinePlaceholder":260},[68,20462,20463,20465,20467],{"class":70,"line":10130},[68,20464,4296],{"class":331},[68,20466,4299],{"class":82},[68,20468,1498],{"class":335},[68,20470,20471],{"class":70,"line":16809},[68,20472,1772],{"class":335},[301,20474,20476],{"id":20475},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20478,20479],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20481,20482],{},"1．默认构造函数(无参，函数体为空)",[19,20484,20485],{},"2．默认析构函数(无参，函数体为空)",[19,20487,20488],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20490,20491],{},"构造函数调用规则如下：",[42,20493,20494,20497],{},[26,20495,20496],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[26,20498,20499],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[58,20501,20503],{"className":322,"code":20502,"language":324,"meta":63,"style":63},"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",[65,20504,20505,20513,20517,20522,20528,20540,20544,20549,20561,20570,20582,20586,20590,20606,20615,20627,20631,20635,20641,20653,20657,20661,20667,20671,20675,20683,20687,20699,20704,20712,20716,20734,20738,20742,20750,20754,20759,20767,20782,20795,20799,20804,20811,20827,20840,20844,20848,20856,20860,20866,20870,20880,20884,20892],{"__ignoreMap":63},[68,20506,20507,20509,20511],{"class":70,"line":71},[68,20508,14899],{"class":331},[68,20510,15774],{"class":74},[68,20512,15777],{"class":335},[68,20514,20515],{"class":70,"line":92},[68,20516,14921],{"class":331},[68,20518,20519],{"class":70,"line":1387},[68,20520,20521],{"class":393},"    \u002F\u002F无参（默认）构造函数\n",[68,20523,20524,20526],{"class":70,"line":1402},[68,20525,18724],{"class":74},[68,20527,11058],{"class":335},[68,20529,20530,20532,20534,20536,20538],{"class":70,"line":1408},[68,20531,9874],{"class":335},[68,20533,1376],{"class":331},[68,20535,20015],{"class":78},[68,20537,1652],{"class":331},[68,20539,9045],{"class":335},[68,20541,20542],{"class":70,"line":1422},[68,20543,2393],{"class":335},[68,20545,20546],{"class":70,"line":1428},[68,20547,20548],{"class":393},"    \u002F\u002F有参构造函数\n",[68,20550,20551,20553,20555,20557,20559],{"class":70,"line":1519},[68,20552,18724],{"class":74},[68,20554,336],{"class":335},[68,20556,339],{"class":331},[68,20558,1606],{"class":5421},[68,20560,12647],{"class":335},[68,20562,20563,20566,20568],{"class":70,"line":1525},[68,20564,20565],{"class":335},"        age ",[68,20567,381],{"class":331},[68,20569,1640],{"class":335},[68,20571,20572,20574,20576,20578,20580],{"class":70,"line":1537},[68,20573,9874],{"class":335},[68,20575,1376],{"class":331},[68,20577,20055],{"class":78},[68,20579,1652],{"class":331},[68,20581,9045],{"class":335},[68,20583,20584],{"class":70,"line":1819},[68,20585,2393],{"class":335},[68,20587,20588],{"class":70,"line":1824},[68,20589,19079],{"class":393},[68,20591,20592,20594,20596,20598,20600,20602,20604],{"class":70,"line":1830},[68,20593,18724],{"class":74},[68,20595,336],{"class":335},[68,20597,6997],{"class":331},[68,20599,15774],{"class":74},[68,20601,686],{"class":331},[68,20603,7030],{"class":5421},[68,20605,12647],{"class":335},[68,20607,20608,20610,20612],{"class":70,"line":1835},[68,20609,20565],{"class":335},[68,20611,381],{"class":331},[68,20613,20614],{"class":335}," p.age;\n",[68,20616,20617,20619,20621,20623,20625],{"class":70,"line":1849},[68,20618,9874],{"class":335},[68,20620,1376],{"class":331},[68,20622,20096],{"class":78},[68,20624,1652],{"class":331},[68,20626,9045],{"class":335},[68,20628,20629],{"class":70,"line":1854},[68,20630,2393],{"class":335},[68,20632,20633],{"class":70,"line":1860},[68,20634,18752],{"class":393},[68,20636,20637,20639],{"class":70,"line":1881},[68,20638,18757],{"class":74},[68,20640,11058],{"class":335},[68,20642,20643,20645,20647,20649,20651],{"class":70,"line":1886},[68,20644,9874],{"class":335},[68,20646,1376],{"class":331},[68,20648,20133],{"class":78},[68,20650,1652],{"class":331},[68,20652,9045],{"class":335},[68,20654,20655],{"class":70,"line":1900},[68,20656,2393],{"class":335},[68,20658,20659],{"class":70,"line":1905},[68,20660,14921],{"class":331},[68,20662,20663,20665],{"class":70,"line":1934},[68,20664,2191],{"class":331},[68,20666,8002],{"class":335},[68,20668,20669],{"class":70,"line":1939},[68,20670,4201],{"class":335},[68,20672,20673],{"class":70,"line":1956},[68,20674,2606],{"emptyLinePlaceholder":260},[68,20676,20677,20679,20681],{"class":70,"line":1961},[68,20678,5569],{"class":331},[68,20680,5793],{"class":74},[68,20682,2182],{"class":335},[68,20684,20685],{"class":70,"line":1966},[68,20686,1753],{"class":335},[68,20688,20689,20691,20693,20695,20697],{"class":70,"line":1971},[68,20690,19636],{"class":335},[68,20692,7335],{"class":74},[68,20694,336],{"class":335},[68,20696,983],{"class":82},[68,20698,2925],{"class":335},[68,20700,20701],{"class":70,"line":1985},[68,20702,20703],{"class":393},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[68,20705,20706,20708,20710],{"class":70,"line":1990},[68,20707,19636],{"class":335},[68,20709,7238],{"class":74},[68,20711,17720],{"class":335},[68,20713,20714],{"class":70,"line":2783},[68,20715,2606],{"emptyLinePlaceholder":260},[68,20717,20718,20720,20722,20725,20727,20730,20732],{"class":70,"line":2797},[68,20719,6734],{"class":335},[68,20721,1376],{"class":331},[68,20723,20724],{"class":78}," \"p2的年龄为： \"",[68,20726,1652],{"class":331},[68,20728,20729],{"class":335}," p2.age ",[68,20731,1376],{"class":331},[68,20733,9045],{"class":335},[68,20735,20736],{"class":70,"line":2805},[68,20737,1772],{"class":335},[68,20739,20740],{"class":70,"line":2810},[68,20741,2606],{"emptyLinePlaceholder":260},[68,20743,20744,20746,20748],{"class":70,"line":2816},[68,20745,5569],{"class":331},[68,20747,5862],{"class":74},[68,20749,2182],{"class":335},[68,20751,20752],{"class":70,"line":2822},[68,20753,1753],{"class":335},[68,20755,20756],{"class":70,"line":2827},[68,20757,20758],{"class":393},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[68,20760,20761,20764],{"class":70,"line":8153},[68,20762,20763],{"class":335},"    Person p1;",[68,20765,20766],{"class":393}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[68,20768,20769,20771,20773,20775,20777,20779],{"class":70,"line":8177},[68,20770,19636],{"class":335},[68,20772,7238],{"class":74},[68,20774,336],{"class":335},[68,20776,779],{"class":82},[68,20778,6171],{"class":335},[68,20780,20781],{"class":393}," \u002F\u002F用户提供的有参\n",[68,20783,20784,20786,20789,20792],{"class":70,"line":8182},[68,20785,19636],{"class":335},[68,20787,20788],{"class":74},"p3",[68,20790,20791],{"class":335},"(p2);",[68,20793,20794],{"class":393}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[68,20796,20797],{"class":70,"line":8188},[68,20798,2606],{"emptyLinePlaceholder":260},[68,20800,20801],{"class":70,"line":8215},[68,20802,20803],{"class":393},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[68,20805,20806,20809],{"class":70,"line":8220},[68,20807,20808],{"class":335},"    Person p4;",[68,20810,20766],{"class":393},[68,20812,20813,20815,20818,20820,20822,20824],{"class":70,"line":8226},[68,20814,19636],{"class":335},[68,20816,20817],{"class":74},"p5",[68,20819,336],{"class":335},[68,20821,779],{"class":82},[68,20823,6171],{"class":335},[68,20825,20826],{"class":393}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[68,20828,20829,20831,20834,20837],{"class":70,"line":8238},[68,20830,19636],{"class":335},[68,20832,20833],{"class":74},"p6",[68,20835,20836],{"class":335},"(p5);",[68,20838,20839],{"class":393}," \u002F\u002F用户自己提供拷贝构造\n",[68,20841,20842],{"class":70,"line":8250},[68,20843,1772],{"class":335},[68,20845,20846],{"class":70,"line":8262},[68,20847,2606],{"emptyLinePlaceholder":260},[68,20849,20850,20852,20854],{"class":70,"line":9921},[68,20851,339],{"class":331},[68,20853,2179],{"class":74},[68,20855,11058],{"class":335},[68,20857,20858],{"class":70,"line":9946},[68,20859,2606],{"emptyLinePlaceholder":260},[68,20861,20862,20864],{"class":70,"line":9969},[68,20863,5838],{"class":74},[68,20865,5841],{"class":335},[68,20867,20868],{"class":70,"line":9993},[68,20869,2606],{"emptyLinePlaceholder":260},[68,20871,20872,20874,20876,20878],{"class":70,"line":9998},[68,20873,2509],{"class":74},[68,20875,336],{"class":335},[68,20877,2514],{"class":78},[68,20879,2925],{"class":335},[68,20881,20882],{"class":70,"line":10003},[68,20883,2606],{"emptyLinePlaceholder":260},[68,20885,20886,20888,20890],{"class":70,"line":10008},[68,20887,4296],{"class":331},[68,20889,4299],{"class":82},[68,20891,1498],{"class":335},[68,20893,20894],{"class":70,"line":10017},[68,20895,1772],{"class":335},[301,20897,20899],{"id":20898},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20901,20902],{},"浅拷贝：简单的赋值拷贝操作",[19,20904,20905],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[58,20907,20909],{"className":322,"code":20908,"language":324,"meta":63,"style":63},"#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",[65,20910,20911,20917,20927,20933,20937,20941,20946,20952,20956,20969,20973,20977,20984,20988,20998,21013,21026,21030,21035,21040,21056,21060,21073,21078,21083,21088,21097,21102,21117,21121,21125,21129,21135,21139,21144,21159,21163,21174,21188,21192,21201,21205,21211,21223,21227,21235,21239,21256,21287,21295,21323,21327,21331,21339,21343,21349],{"__ignoreMap":63},[68,20912,20913,20915],{"class":70,"line":71},[68,20914,2156],{"class":331},[68,20916,2159],{"class":78},[68,20918,20919,20921,20923,20925],{"class":70,"line":92},[68,20920,2164],{"class":331},[68,20922,2167],{"class":331},[68,20924,2170],{"class":74},[68,20926,1498],{"class":335},[68,20928,20929,20931],{"class":70,"line":1387},[68,20930,14899],{"class":331},[68,20932,15376],{"class":74},[68,20934,20935],{"class":70,"line":1402},[68,20936,1753],{"class":335},[68,20938,20939],{"class":70,"line":1408},[68,20940,14921],{"class":331},[68,20942,20943],{"class":70,"line":1422},[68,20944,20945],{"class":393},"    \u002F\u002F默认构造函数\n",[68,20947,20948,20950],{"class":70,"line":1428},[68,20949,18724],{"class":74},[68,20951,2182],{"class":335},[68,20953,20954],{"class":70,"line":1519},[68,20955,2236],{"class":335},[68,20957,20958,20960,20962,20965,20967],{"class":70,"line":1525},[68,20959,3657],{"class":335},[68,20961,1376],{"class":331},[68,20963,20964],{"class":78},"\"默认构造函数\"",[68,20966,1376],{"class":331},[68,20968,1399],{"class":335},[68,20970,20971],{"class":70,"line":1537},[68,20972,2393],{"class":335},[68,20974,20975],{"class":70,"line":1819},[68,20976,20548],{"class":393},[68,20978,20979,20981],{"class":70,"line":1824},[68,20980,18757],{"class":74},[68,20982,20983],{"class":335},"(int age,int height)\n",[68,20985,20986],{"class":70,"line":1830},[68,20987,2236],{"class":335},[68,20989,20990,20993,20995],{"class":70,"line":1835},[68,20991,20992],{"class":335},"        m_Age",[68,20994,381],{"class":331},[68,20996,20997],{"class":335},"age;\n",[68,20999,21000,21003,21005,21007,21010],{"class":70,"line":1849},[68,21001,21002],{"class":335},"        m_Height",[68,21004,11922],{"class":331},[68,21006,2588],{"class":331},[68,21008,21009],{"class":335},"(height);",[68,21011,21012],{"class":393},"\u002F\u002F放到堆区\n",[68,21014,21015,21017,21019,21022,21024],{"class":70,"line":1854},[68,21016,3657],{"class":335},[68,21018,1376],{"class":331},[68,21020,21021],{"class":78},"\"有参构造函数\"",[68,21023,1376],{"class":331},[68,21025,1399],{"class":335},[68,21027,21028],{"class":70,"line":1860},[68,21029,2393],{"class":335},[68,21031,21032],{"class":70,"line":1881},[68,21033,21034],{"class":393},"    \u002F\u002F深拷贝解决上述问题\n",[68,21036,21037],{"class":70,"line":1886},[68,21038,21039],{"class":393},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[68,21041,21042,21044,21046,21048,21050,21052,21054],{"class":70,"line":1900},[68,21043,18724],{"class":74},[68,21045,336],{"class":335},[68,21047,6997],{"class":331},[68,21049,15774],{"class":74},[68,21051,10789],{"class":331},[68,21053,19],{"class":5421},[68,21055,342],{"class":335},[68,21057,21058],{"class":70,"line":1905},[68,21059,2236],{"class":335},[68,21061,21062,21064,21066,21069,21071],{"class":70,"line":1934},[68,21063,3657],{"class":335},[68,21065,1376],{"class":331},[68,21067,21068],{"class":78},"\"拷贝构造函数\"",[68,21070,1376],{"class":331},[68,21072,1399],{"class":335},[68,21074,21075],{"class":70,"line":1939},[68,21076,21077],{"class":393},"        \u002F\u002F编译器默认的写如下注释部分\n",[68,21079,21080],{"class":70,"line":1956},[68,21081,21082],{"class":393},"        \u002F\u002Fm_Age=p.m_Age;\n",[68,21084,21085],{"class":70,"line":1961},[68,21086,21087],{"class":393},"        \u002F\u002Fm_Height=p.m_Height;\n",[68,21089,21090,21092,21094],{"class":70,"line":1966},[68,21091,20992],{"class":335},[68,21093,381],{"class":331},[68,21095,21096],{"class":335},"p.m_Age;\n",[68,21098,21099],{"class":70,"line":1971},[68,21100,21101],{"class":393},"        \u002F\u002F深拷贝操作\n",[68,21103,21104,21106,21108,21110,21112,21114],{"class":70,"line":1985},[68,21105,21002],{"class":335},[68,21107,11922],{"class":331},[68,21109,2588],{"class":331},[68,21111,336],{"class":335},[68,21113,788],{"class":331},[68,21115,21116],{"class":335},"p.m_Height);\n",[68,21118,21119],{"class":70,"line":1990},[68,21120,2393],{"class":335},[68,21122,21123],{"class":70,"line":2783},[68,21124,2606],{"emptyLinePlaceholder":260},[68,21126,21127],{"class":70,"line":2797},[68,21128,18752],{"class":393},[68,21130,21131,21133],{"class":70,"line":2805},[68,21132,18757],{"class":74},[68,21134,2182],{"class":335},[68,21136,21137],{"class":70,"line":2810},[68,21138,2236],{"class":335},[68,21140,21141],{"class":70,"line":2816},[68,21142,21143],{"class":393},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[68,21145,21146,21148,21151,21154,21157],{"class":70,"line":2822},[68,21147,2703],{"class":331},[68,21149,21150],{"class":335},"(m_Height ",[68,21152,21153],{"class":331},"!=",[68,21155,21156],{"class":82}," NULL",[68,21158,342],{"class":335},[68,21160,21161],{"class":70,"line":2827},[68,21162,2716],{"class":335},[68,21164,21165,21168,21171],{"class":70,"line":8153},[68,21166,21167],{"class":331},"            delete",[68,21169,21170],{"class":335}," m_Height;",[68,21172,21173],{"class":393}," \u002F\u002F释放堆区内存\n",[68,21175,21176,21179,21181,21183,21185],{"class":70,"line":8177},[68,21177,21178],{"class":335},"            m_Height",[68,21180,381],{"class":331},[68,21182,2598],{"class":82},[68,21184,390],{"class":335},[68,21186,21187],{"class":393}," \u002F\u002F防止野指针\n",[68,21189,21190],{"class":70,"line":8182},[68,21191,2735],{"class":335},[68,21193,21194,21196,21198],{"class":70,"line":8188},[68,21195,3657],{"class":335},[68,21197,1376],{"class":331},[68,21199,21200],{"class":78},"\"Person的析构函数调用\"\n",[68,21202,21203],{"class":70,"line":8215},[68,21204,2393],{"class":335},[68,21206,21207,21209],{"class":70,"line":8220},[68,21208,2191],{"class":331},[68,21210,15871],{"class":335},[68,21212,21213,21215,21217,21220],{"class":70,"line":8226},[68,21214,2191],{"class":331},[68,21216,6723],{"class":331},[68,21218,21219],{"class":335},"m_Height;",[68,21221,21222],{"class":393}," \u002F\u002F定义一个指针，指向身高\n",[68,21224,21225],{"class":70,"line":8238},[68,21226,4201],{"class":335},[68,21228,21229,21231,21233],{"class":70,"line":8250},[68,21230,5569],{"class":331},[68,21232,5793],{"class":74},[68,21234,2182],{"class":335},[68,21236,21237],{"class":70,"line":8262},[68,21238,1753],{"class":335},[68,21240,21241,21243,21245,21247,21249,21251,21254],{"class":70,"line":9921},[68,21242,19636],{"class":335},[68,21244,7335],{"class":74},[68,21246,336],{"class":335},[68,21248,983],{"class":82},[68,21250,711],{"class":335},[68,21252,21253],{"class":82},"160",[68,21255,2925],{"class":335},[68,21257,21258,21260,21262,21265,21267,21270,21272,21275,21277,21280,21282,21284],{"class":70,"line":9946},[68,21259,1758],{"class":335},[68,21261,1376],{"class":331},[68,21263,21264],{"class":78},"\"p1的年龄为:\"",[68,21266,1376],{"class":331},[68,21268,21269],{"class":335},"p1.m_Age",[68,21271,1376],{"class":331},[68,21273,21274],{"class":78},"\"身高为：\"",[68,21276,6624],{"class":331},[68,21278,21279],{"class":335},"p1.m_Height",[68,21281,1376],{"class":331},[68,21283,1446],{"class":335},[68,21285,21286],{"class":393},"  \u002F\u002F18\n",[68,21288,21289,21291,21293],{"class":70,"line":9969},[68,21290,19636],{"class":335},[68,21292,7238],{"class":74},[68,21294,17720],{"class":335},[68,21296,21297,21299,21301,21304,21306,21308,21310,21312,21314,21317,21319,21321],{"class":70,"line":9993},[68,21298,1758],{"class":335},[68,21300,1376],{"class":331},[68,21302,21303],{"class":78},"\"p2的年龄为：\"",[68,21305,1376],{"class":331},[68,21307,19666],{"class":335},[68,21309,1376],{"class":331},[68,21311,21274],{"class":78},[68,21313,6624],{"class":331},[68,21315,21316],{"class":335},"p2.m_Height",[68,21318,1376],{"class":331},[68,21320,1446],{"class":335},[68,21322,21286],{"class":393},[68,21324,21325],{"class":70,"line":9998},[68,21326,13415],{"class":335},[68,21328,21329],{"class":70,"line":10003},[68,21330,1772],{"class":335},[68,21332,21333,21335,21337],{"class":70,"line":10008},[68,21334,339],{"class":331},[68,21336,2179],{"class":74},[68,21338,2182],{"class":335},[68,21340,21341],{"class":70,"line":10017},[68,21342,1753],{"class":335},[68,21344,21345,21347],{"class":70,"line":10022},[68,21346,5838],{"class":74},[68,21348,5841],{"class":335},[68,21350,21351],{"class":70,"line":10028},[68,21352,1772],{"class":335},[19,21354,21355],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21357,21358],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21360,21361],{},[48,21362],{"alt":63,"src":21363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21365,21366],{},"浅拷贝问题要使用深拷贝来解决",[19,21368,21369],{},[48,21370],{"alt":63,"src":21371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21373,21374],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[301,21376,21378],{"id":21377},"_826初始化列表","8.2.6初始化列表",[19,21380,21381],{},"作用：初始化属性",[19,21383,5387],{},[58,21385,21388],{"className":21386,"code":21387,"language":5393},[5391],"构造函数():属性1(值1),属性2(值2).....{}\n",[65,21389,21387],{"__ignoreMap":63},[19,21391,21392],{},"例子",[58,21394,21396],{"className":322,"code":21395,"language":324,"meta":63,"style":63},"#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",[65,21397,21398,21404,21414,21420,21424,21429,21433,21438,21443,21448,21453,21458,21463,21467,21472,21477,21520,21529,21547,21565,21583,21587,21591,21598,21605,21612,21616,21620,21628,21632,21636,21656,21665,21669,21673,21683,21687,21695],{"__ignoreMap":63},[68,21399,21400,21402],{"class":70,"line":71},[68,21401,2156],{"class":331},[68,21403,2159],{"class":78},[68,21405,21406,21408,21410,21412],{"class":70,"line":92},[68,21407,2164],{"class":331},[68,21409,2167],{"class":331},[68,21411,2170],{"class":74},[68,21413,1498],{"class":335},[68,21415,21416,21418],{"class":70,"line":1387},[68,21417,14899],{"class":331},[68,21419,15376],{"class":74},[68,21421,21422],{"class":70,"line":1402},[68,21423,1753],{"class":335},[68,21425,21426],{"class":70,"line":1408},[68,21427,21428],{"class":331},"    public:\n",[68,21430,21431],{"class":70,"line":1422},[68,21432,2606],{"emptyLinePlaceholder":260},[68,21434,21435],{"class":70,"line":1428},[68,21436,21437],{"class":393},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[68,21439,21440],{"class":70,"line":1519},[68,21441,21442],{"class":393},"    \u002F\u002FPerson(int a, int b, int c) {\n",[68,21444,21445],{"class":70,"line":1525},[68,21446,21447],{"class":393},"    \u002F\u002F  m_A = a;\n",[68,21449,21450],{"class":70,"line":1537},[68,21451,21452],{"class":393},"    \u002F\u002F  m_B = b;\n",[68,21454,21455],{"class":70,"line":1819},[68,21456,21457],{"class":393},"    \u002F\u002F  m_C = c;\n",[68,21459,21460],{"class":70,"line":1824},[68,21461,21462],{"class":393},"    \u002F\u002F}\n",[68,21464,21465],{"class":70,"line":1830},[68,21466,2606],{"emptyLinePlaceholder":260},[68,21468,21469],{"class":70,"line":1835},[68,21470,21471],{"class":393},"    \u002F\u002F初始化列表方式初始化\n",[68,21473,21474],{"class":70,"line":1849},[68,21475,21476],{"class":393},"    \u002F\u002F使用有参构造函数\n",[68,21478,21479,21481,21483,21485,21487,21489,21491,21493,21495,21497,21499,21502,21505,21508,21511,21514,21517],{"class":70,"line":1854},[68,21480,18724],{"class":74},[68,21482,336],{"class":335},[68,21484,339],{"class":331},[68,21486,1606],{"class":5421},[68,21488,12640],{"class":335},[68,21490,339],{"class":331},[68,21492,3039],{"class":5421},[68,21494,12640],{"class":335},[68,21496,339],{"class":331},[68,21498,3055],{"class":5421},[68,21500,21501],{"class":335},") :",[68,21503,21504],{"class":74},"m_A",[68,21506,21507],{"class":335},"(a), ",[68,21509,21510],{"class":74},"m_B",[68,21512,21513],{"class":335},"(b), ",[68,21515,21516],{"class":74},"m_C",[68,21518,21519],{"class":335},"(c) {}\n",[68,21521,21522,21524,21527],{"class":70,"line":1860},[68,21523,15114],{"class":331},[68,21525,21526],{"class":74}," PrintPerson",[68,21528,11058],{"class":335},[68,21530,21531,21533,21535,21538,21540,21543,21545],{"class":70,"line":1881},[68,21532,9874],{"class":335},[68,21534,1376],{"class":331},[68,21536,21537],{"class":78}," \"mA:\"",[68,21539,1652],{"class":331},[68,21541,21542],{"class":335}," m_A ",[68,21544,1376],{"class":331},[68,21546,9045],{"class":335},[68,21548,21549,21551,21553,21556,21558,21561,21563],{"class":70,"line":1886},[68,21550,9874],{"class":335},[68,21552,1376],{"class":331},[68,21554,21555],{"class":78}," \"mB:\"",[68,21557,1652],{"class":331},[68,21559,21560],{"class":335}," m_B ",[68,21562,1376],{"class":331},[68,21564,9045],{"class":335},[68,21566,21567,21569,21571,21574,21576,21579,21581],{"class":70,"line":1900},[68,21568,9874],{"class":335},[68,21570,1376],{"class":331},[68,21572,21573],{"class":78}," \"mC:\"",[68,21575,1652],{"class":331},[68,21577,21578],{"class":335}," m_C ",[68,21580,1376],{"class":331},[68,21582,9045],{"class":335},[68,21584,21585],{"class":70,"line":1905},[68,21586,2393],{"class":335},[68,21588,21589],{"class":70,"line":1934},[68,21590,15427],{"class":331},[68,21592,21593,21595],{"class":70,"line":1939},[68,21594,2191],{"class":331},[68,21596,21597],{"class":335}," m_A;\n",[68,21599,21600,21602],{"class":70,"line":1956},[68,21601,2191],{"class":331},[68,21603,21604],{"class":335}," m_B;\n",[68,21606,21607,21609],{"class":70,"line":1961},[68,21608,2191],{"class":331},[68,21610,21611],{"class":335}," m_C;\n",[68,21613,21614],{"class":70,"line":1966},[68,21615,4201],{"class":335},[68,21617,21618],{"class":70,"line":1971},[68,21619,2606],{"emptyLinePlaceholder":260},[68,21621,21622,21624,21626],{"class":70,"line":1985},[68,21623,339],{"class":331},[68,21625,2179],{"class":74},[68,21627,6183],{"class":335},[68,21629,21630],{"class":70,"line":1990},[68,21631,1753],{"class":335},[68,21633,21634],{"class":70,"line":2783},[68,21635,2606],{"emptyLinePlaceholder":260},[68,21637,21638,21640,21642,21644,21646,21648,21650,21652,21654],{"class":70,"line":2797},[68,21639,19636],{"class":335},[68,21641,19],{"class":74},[68,21643,336],{"class":335},[68,21645,551],{"class":82},[68,21647,12640],{"class":335},[68,21649,412],{"class":82},[68,21651,12640],{"class":335},[68,21653,406],{"class":82},[68,21655,2925],{"class":335},[68,21657,21658,21660,21663],{"class":70,"line":2805},[68,21659,16071],{"class":335},[68,21661,21662],{"class":74},"PrintPerson",[68,21664,5841],{"class":335},[68,21666,21667],{"class":70,"line":2810},[68,21668,2606],{"emptyLinePlaceholder":260},[68,21670,21671],{"class":70,"line":2816},[68,21672,2606],{"emptyLinePlaceholder":260},[68,21674,21675,21677,21679,21681],{"class":70,"line":2822},[68,21676,2509],{"class":74},[68,21678,336],{"class":335},[68,21680,2514],{"class":78},[68,21682,2925],{"class":335},[68,21684,21685],{"class":70,"line":2827},[68,21686,2606],{"emptyLinePlaceholder":260},[68,21688,21689,21691,21693],{"class":70,"line":8153},[68,21690,4296],{"class":331},[68,21692,4299],{"class":82},[68,21694,1498],{"class":335},[68,21696,21697],{"class":70,"line":8177},[68,21698,1772],{"class":335},[19,21700,21701,21702,21705,21706],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[483,21703,21704],{},"参数名就是定义的对象属性","，",[483,21707,21708],{},"属性后面的值为有参构造函数的形参",[58,21710,21712],{"className":322,"code":21711,"language":324,"meta":63,"style":63},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[65,21713,21714],{"__ignoreMap":63},[68,21715,21716,21718,21720,21722,21725,21727,21730,21732,21735,21737,21740,21742,21745,21747],{"class":70,"line":71},[68,21717,19251],{"class":74},[68,21719,336],{"class":335},[68,21721,339],{"class":331},[68,21723,21724],{"class":335}," a.",[68,21726,339],{"class":331},[68,21728,21729],{"class":335}," b,",[68,21731,339],{"class":331},[68,21733,21734],{"class":335}," b):",[68,21736,21504],{"class":74},[68,21738,21739],{"class":335},"(a),",[68,21741,21510],{"class":74},[68,21743,21744],{"class":335},"(c),",[68,21746,21516],{"class":74},[68,21748,21749],{"class":335},"(b) {}\n",[301,21751,21753],{"id":21752},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21755,21756],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21758,14838],{},[58,21760,21762],{"className":322,"code":21761,"language":324,"meta":63,"style":63},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[65,21763,21764,21769,21774,21778,21783,21787],{"__ignoreMap":63},[68,21765,21766],{"class":70,"line":71},[68,21767,21768],{"class":335},"A{};\n",[68,21770,21771],{"class":70,"line":92},[68,21772,21773],{"class":335},"B\n",[68,21775,21776],{"class":70,"line":1387},[68,21777,1753],{"class":335},[68,21779,21780],{"class":70,"line":1402},[68,21781,21782],{"class":335},"    A a;\n",[68,21784,21785],{"class":70,"line":1408},[68,21786,1772],{"class":335},[68,21788,21789],{"class":70,"line":1422},[68,21790,21791],{"class":393},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21793,21794],{},"案例",[58,21796,21798],{"className":322,"code":21797,"language":324,"meta":63,"style":63},"\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",[65,21799,21800,21805,21812,21816,21821,21826,21840,21844,21854,21865,21869,21876,21880,21893,21897,21902,21907,21911,21917,21921,21925,21929,21960,21964,21975,21979,21985,21989,22002,22006,22010,22014,22019,22024,22028,22036,22040,22057,22076,22080,22088,22092,22098],{"__ignoreMap":63},[68,21801,21802],{"class":70,"line":71},[68,21803,21804],{"class":393},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[68,21806,21807,21809],{"class":70,"line":92},[68,21808,14899],{"class":331},[68,21810,21811],{"class":74}," Phone\n",[68,21813,21814],{"class":70,"line":1387},[68,21815,1753],{"class":335},[68,21817,21818],{"class":70,"line":1402},[68,21819,21820],{"class":335},"public：\n",[68,21822,21823],{"class":70,"line":1408},[68,21824,21825],{"class":393},"    \u002F\u002F 赋值(构造函数)\n",[68,21827,21828,21831,21833,21835,21838],{"class":70,"line":1422},[68,21829,21830],{"class":74},"    Phone",[68,21832,336],{"class":335},[68,21834,15122],{"class":74},[68,21836,21837],{"class":5421}," pName",[68,21839,342],{"class":335},[68,21841,21842],{"class":70,"line":1428},[68,21843,2236],{"class":335},[68,21845,21846,21849,21851],{"class":70,"line":1519},[68,21847,21848],{"class":335},"        m_pName",[68,21850,381],{"class":331},[68,21852,21853],{"class":335},"pName;\n",[68,21855,21856,21858,21860,21863],{"class":70,"line":1525},[68,21857,3657],{"class":335},[68,21859,1376],{"class":331},[68,21861,21862],{"class":78},"\"Phone的构造函数调用\"",[68,21864,1498],{"class":335},[68,21866,21867],{"class":70,"line":1537},[68,21868,2393],{"class":335},[68,21870,21871,21874],{"class":70,"line":1819},[68,21872,21873],{"class":74},"    ~Phone",[68,21875,2182],{"class":335},[68,21877,21878],{"class":70,"line":1824},[68,21879,2236],{"class":335},[68,21881,21882,21884,21886,21889,21891],{"class":70,"line":1830},[68,21883,3657],{"class":335},[68,21885,1376],{"class":331},[68,21887,21888],{"class":78},"\"Phone析构函数调用\"",[68,21890,1376],{"class":331},[68,21892,1399],{"class":335},[68,21894,21895],{"class":70,"line":1835},[68,21896,2393],{"class":335},[68,21898,21899],{"class":70,"line":1849},[68,21900,21901],{"class":393},"    \u002F\u002F\n",[68,21903,21904],{"class":70,"line":1854},[68,21905,21906],{"class":335},"    string m_PName;\n",[68,21908,21909],{"class":70,"line":1860},[68,21910,4201],{"class":335},[68,21912,21913,21915],{"class":70,"line":1881},[68,21914,14899],{"class":331},[68,21916,15376],{"class":74},[68,21918,21919],{"class":70,"line":1886},[68,21920,1753],{"class":335},[68,21922,21923],{"class":70,"line":1900},[68,21924,14921],{"class":331},[68,21926,21927],{"class":70,"line":1905},[68,21928,17199],{"class":393},[68,21930,21931,21933,21935,21937,21939,21941,21943,21946,21949,21951,21954,21957],{"class":70,"line":1934},[68,21932,18724],{"class":74},[68,21934,336],{"class":335},[68,21936,15122],{"class":74},[68,21938,15125],{"class":5421},[68,21940,711],{"class":335},[68,21942,15122],{"class":74},[68,21944,21945],{"class":5421}," pname",[68,21947,21948],{"class":335},"):",[68,21950,15215],{"class":74},[68,21952,21953],{"class":335},"(name),m_phone.",[68,21955,21956],{"class":74},"m_PName",[68,21958,21959],{"class":335},"(pname) \n",[68,21961,21962],{"class":70,"line":1939},[68,21963,2236],{"class":335},[68,21965,21966,21968,21970,21973],{"class":70,"line":1956},[68,21967,3657],{"class":335},[68,21969,1376],{"class":331},[68,21971,21972],{"class":78},"\"Person的构造函数调用\"",[68,21974,1498],{"class":335},[68,21976,21977],{"class":70,"line":1961},[68,21978,2393],{"class":335},[68,21980,21981,21983],{"class":70,"line":1966},[68,21982,18757],{"class":74},[68,21984,2182],{"class":335},[68,21986,21987],{"class":70,"line":1971},[68,21988,2236],{"class":335},[68,21990,21991,21993,21995,21998,22000],{"class":70,"line":1985},[68,21992,3657],{"class":335},[68,21994,1376],{"class":331},[68,21996,21997],{"class":78},"\"Person析构函数调用\"",[68,21999,1376],{"class":331},[68,22001,1399],{"class":335},[68,22003,22004],{"class":70,"line":1990},[68,22005,2393],{"class":335},[68,22007,22008],{"class":70,"line":2783},[68,22009,7985],{"class":393},[68,22011,22012],{"class":70,"line":2797},[68,22013,15097],{"class":335},[68,22015,22016],{"class":70,"line":2805},[68,22017,22018],{"class":393},"    \u002F\u002F手机\n",[68,22020,22021],{"class":70,"line":2810},[68,22022,22023],{"class":335},"    Phone m_Phone;\n",[68,22025,22026],{"class":70,"line":2816},[68,22027,4201],{"class":335},[68,22029,22030,22032,22034],{"class":70,"line":2822},[68,22031,5569],{"class":331},[68,22033,5793],{"class":74},[68,22035,2182],{"class":335},[68,22037,22038],{"class":70,"line":2827},[68,22039,1753],{"class":335},[68,22041,22042,22044,22046,22048,22050,22052,22055],{"class":70,"line":8153},[68,22043,19636],{"class":335},[68,22045,19],{"class":74},[68,22047,336],{"class":335},[68,22049,8121],{"class":78},[68,22051,711],{"class":335},[68,22053,22054],{"class":78},"\"安卓\"",[68,22056,2925],{"class":335},[68,22058,22059,22061,22063,22066,22068,22071,22073],{"class":70,"line":8177},[68,22060,1758],{"class":335},[68,22062,1376],{"class":331},[68,22064,22065],{"class":335},"p.Name",[68,22067,1376],{"class":331},[68,22069,22070],{"class":78},"\"拿着：\"",[68,22072,1376],{"class":331},[68,22074,22075],{"class":335},"p.m_phone.m_PName;\n",[68,22077,22078],{"class":70,"line":8182},[68,22079,1772],{"class":335},[68,22081,22082,22084,22086],{"class":70,"line":8188},[68,22083,339],{"class":331},[68,22085,2179],{"class":74},[68,22087,2182],{"class":335},[68,22089,22090],{"class":70,"line":8215},[68,22091,1753],{"class":335},[68,22093,22094,22096],{"class":70,"line":8220},[68,22095,5838],{"class":74},[68,22097,5841],{"class":335},[68,22099,22100],{"class":70,"line":8226},[68,22101,1772],{"class":335},[19,22103,9230],{},[58,22105,22107],{"className":322,"code":22106,"language":324,"meta":63,"style":63},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[65,22108,22109,22114],{"__ignoreMap":63},[68,22110,22111],{"class":70,"line":71},[68,22112,22113],{"class":393},"    \u002F\u002F不需要写这个：\n",[68,22115,22116],{"class":70,"line":92},[68,22117,22118],{"class":393},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22120,22121],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[58,22123,22125],{"className":322,"code":22124,"language":324,"meta":63,"style":63},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[65,22126,22127],{"__ignoreMap":63},[68,22128,22129,22131,22134,22136,22139,22142],{"class":70,"line":71},[68,22130,19251],{"class":74},[68,22132,22133],{"class":335},"(string name.string pname):",[68,22135,15215],{"class":74},[68,22137,22138],{"class":335},"(name),",[68,22140,22141],{"class":74},"m_phone",[68,22143,22144],{"class":335},"(pname) {}\n",[19,22146,22147,22148,381,22151],{},"采用的是隐式转换法，实际为如下：\n",[65,22149,22150],{},"m_phone(pname)",[65,22152,22153],{},"Phone m_phone=pname",[19,22155,22156,22159],{},[483,22157,22158],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22161,22162],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[301,22164,22166],{"id":22165},"_828静态对象","8.2.8静态对象",[19,22168,22169],{},"静态对象在成员对象前static，称为静态对象",[19,22171,22172],{},"静态对象分为两类：",[23,22174,22175],{},[26,22176,22177],{},"静态成员变量",[42,22179,22180,22183,22186],{},[26,22181,22182],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[26,22184,22185],{},"②在编译阶段分配内存",[26,22187,22188],{},"③类内声明，类外初始化",[23,22190,22191],{"start":92},[26,22192,22193],{},"静态成员函数",[42,22195,22196,22199],{},[26,22197,22198],{},"①所有对象共享同一个函数",[26,22200,22201],{},"②静态成员函数只能访问静态成员变量",[22203,22204,22206],"h4",{"id":22205},"_8281静态成员变量","8.2.8.1静态成员变量",[58,22208,22210],{"className":322,"code":22209,"language":324,"meta":63,"style":63},"#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",[65,22211,22212,22218,22228,22234,22238,22242,22247,22252,22257,22265,22269,22273,22277,22285,22289,22293,22298,22311,22315,22323,22327,22333],{"__ignoreMap":63},[68,22213,22214,22216],{"class":70,"line":71},[68,22215,2156],{"class":331},[68,22217,2159],{"class":78},[68,22219,22220,22222,22224,22226],{"class":70,"line":92},[68,22221,2164],{"class":331},[68,22223,2167],{"class":331},[68,22225,2170],{"class":74},[68,22227,1498],{"class":335},[68,22229,22230,22232],{"class":70,"line":1387},[68,22231,14899],{"class":331},[68,22233,15376],{"class":74},[68,22235,22236],{"class":70,"line":1402},[68,22237,1753],{"class":335},[68,22239,22240],{"class":70,"line":1408},[68,22241,14921],{"class":331},[68,22243,22244],{"class":70,"line":1422},[68,22245,22246],{"class":393},"    \u002F\u002F非静态成员变量\n",[68,22248,22249],{"class":70,"line":1428},[68,22250,22251],{"class":393},"    \u002F\u002F int m_A;\n",[68,22253,22254],{"class":70,"line":1519},[68,22255,22256],{"class":393},"    \u002F\u002F定义静态成员变量\n",[68,22258,22259,22261,22263],{"class":70,"line":1525},[68,22260,11225],{"class":331},[68,22262,2588],{"class":331},[68,22264,21597],{"class":335},[68,22266,22267],{"class":70,"line":1537},[68,22268,2606],{"emptyLinePlaceholder":260},[68,22270,22271],{"class":70,"line":1819},[68,22272,2606],{"emptyLinePlaceholder":260},[68,22274,22275],{"class":70,"line":1824},[68,22276,4201],{"class":335},[68,22278,22279,22281,22283],{"class":70,"line":1830},[68,22280,5569],{"class":331},[68,22282,5793],{"class":74},[68,22284,2182],{"class":335},[68,22286,22287],{"class":70,"line":1835},[68,22288,1753],{"class":335},[68,22290,22291],{"class":70,"line":1849},[68,22292,15518],{"class":335},[68,22294,22295],{"class":70,"line":1854},[68,22296,22297],{"class":393},"    \u002F\u002F输出类成员变量这块内存\n",[68,22299,22300,22302,22304,22307,22309],{"class":70,"line":1860},[68,22301,1758],{"class":335},[68,22303,1376],{"class":331},[68,22305,22306],{"class":335},"p.m_A",[68,22308,1376],{"class":331},[68,22310,1399],{"class":335},[68,22312,22313],{"class":70,"line":1881},[68,22314,1772],{"class":335},[68,22316,22317,22319,22321],{"class":70,"line":1886},[68,22318,339],{"class":331},[68,22320,2179],{"class":74},[68,22322,2182],{"class":335},[68,22324,22325],{"class":70,"line":1900},[68,22326,1753],{"class":335},[68,22328,22329,22331],{"class":70,"line":1905},[68,22330,5838],{"class":74},[68,22332,2182],{"class":335},[68,22334,22335],{"class":70,"line":1934},[68,22336,1772],{"class":335},[19,22338,22339],{},"此时输出是报错的：无法解析外部命令",[19,22341,22342],{},"解决这一问题：必须用到类内声明，类外初始化操作",[58,22344,22346],{"className":322,"code":22345,"language":324,"meta":63,"style":63},"#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",[65,22347,22348,22354,22364,22370,22374,22378,22383,22391,22395,22400,22415,22423,22427,22431,22436,22441,22453,22458,22469,22474,22479,22492,22496,22504,22508,22514],{"__ignoreMap":63},[68,22349,22350,22352],{"class":70,"line":71},[68,22351,2156],{"class":331},[68,22353,2159],{"class":78},[68,22355,22356,22358,22360,22362],{"class":70,"line":92},[68,22357,2164],{"class":331},[68,22359,2167],{"class":331},[68,22361,2170],{"class":74},[68,22363,1498],{"class":335},[68,22365,22366,22368],{"class":70,"line":1387},[68,22367,14899],{"class":331},[68,22369,15376],{"class":74},[68,22371,22372],{"class":70,"line":1402},[68,22373,1753],{"class":335},[68,22375,22376],{"class":70,"line":1408},[68,22377,14921],{"class":331},[68,22379,22380],{"class":70,"line":1422},[68,22381,22382],{"class":393},"    \u002F\u002F类内声明\n",[68,22384,22385,22387,22389],{"class":70,"line":1428},[68,22386,11225],{"class":331},[68,22388,2588],{"class":331},[68,22390,21597],{"class":335},[68,22392,22393],{"class":70,"line":1519},[68,22394,4201],{"class":335},[68,22396,22397],{"class":70,"line":1525},[68,22398,22399],{"class":393},"\u002F\u002F类外初始化\n",[68,22401,22402,22404,22406,22409,22411,22413],{"class":70,"line":1537},[68,22403,339],{"class":331},[68,22405,15774],{"class":74},[68,22407,22408],{"class":335},"::m_A",[68,22410,381],{"class":331},[68,22412,779],{"class":82},[68,22414,1498],{"class":335},[68,22416,22417,22419,22421],{"class":70,"line":1819},[68,22418,5569],{"class":331},[68,22420,5793],{"class":74},[68,22422,2182],{"class":335},[68,22424,22425],{"class":70,"line":1824},[68,22426,1753],{"class":335},[68,22428,22429],{"class":70,"line":1830},[68,22430,15518],{"class":335},[68,22432,22433],{"class":70,"line":1835},[68,22434,22435],{"class":393},"    \u002F\u002F访问变量的原内存空间\n",[68,22437,22438],{"class":70,"line":1849},[68,22439,22440],{"class":393},"    \u002F\u002F100\n",[68,22442,22443,22445,22447,22449,22451],{"class":70,"line":1854},[68,22444,1758],{"class":335},[68,22446,1376],{"class":331},[68,22448,22306],{"class":335},[68,22450,1376],{"class":331},[68,22452,1399],{"class":335},[68,22454,22455],{"class":70,"line":1860},[68,22456,22457],{"class":335},"    Person p2;\n",[68,22459,22460,22463,22465,22467],{"class":70,"line":1881},[68,22461,22462],{"class":335},"    p2.m_A",[68,22464,381],{"class":331},[68,22466,1929],{"class":82},[68,22468,1498],{"class":335},[68,22470,22471],{"class":70,"line":1886},[68,22472,22473],{"class":393},"    \u002F\u002F继续访问这片空间\n",[68,22475,22476],{"class":70,"line":1900},[68,22477,22478],{"class":393},"    \u002F\u002F200\n",[68,22480,22481,22483,22485,22488,22490],{"class":70,"line":1905},[68,22482,1758],{"class":335},[68,22484,1376],{"class":331},[68,22486,22487],{"class":335},"p2.m_A",[68,22489,1376],{"class":331},[68,22491,1399],{"class":335},[68,22493,22494],{"class":70,"line":1934},[68,22495,1772],{"class":335},[68,22497,22498,22500,22502],{"class":70,"line":1939},[68,22499,339],{"class":331},[68,22501,2179],{"class":74},[68,22503,2182],{"class":335},[68,22505,22506],{"class":70,"line":1956},[68,22507,1753],{"class":335},[68,22509,22510,22512],{"class":70,"line":1961},[68,22511,5838],{"class":74},[68,22513,5841],{"class":335},[68,22515,22516],{"class":70,"line":1966},[68,22517,1772],{"class":335},[19,22519,22520],{},[483,22521,22522],{},"静态变量的访问",[58,22524,22526],{"className":322,"code":22525,"language":324,"meta":63,"style":63},"#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",[65,22527,22528,22534,22544,22550,22554,22558,22562,22570,22574,22579,22587,22591,22595,22609,22624,22632,22636,22641,22646,22651,22656,22668,22673,22678,22692,22709,22713,22721,22725,22731],{"__ignoreMap":63},[68,22529,22530,22532],{"class":70,"line":71},[68,22531,2156],{"class":331},[68,22533,2159],{"class":78},[68,22535,22536,22538,22540,22542],{"class":70,"line":92},[68,22537,2164],{"class":331},[68,22539,2167],{"class":331},[68,22541,2170],{"class":74},[68,22543,1498],{"class":335},[68,22545,22546,22548],{"class":70,"line":1387},[68,22547,14899],{"class":331},[68,22549,15376],{"class":74},[68,22551,22552],{"class":70,"line":1402},[68,22553,1753],{"class":335},[68,22555,22556],{"class":70,"line":1408},[68,22557,14921],{"class":331},[68,22559,22560],{"class":70,"line":1422},[68,22561,22382],{"class":393},[68,22563,22564,22566,22568],{"class":70,"line":1428},[68,22565,11225],{"class":331},[68,22567,2588],{"class":331},[68,22569,21597],{"class":335},[68,22571,22572],{"class":70,"line":1519},[68,22573,15427],{"class":331},[68,22575,22576],{"class":70,"line":1525},[68,22577,22578],{"class":393},"    \u002F\u002F静态成员变量也是有访问权限的\n",[68,22580,22581,22583,22585],{"class":70,"line":1537},[68,22582,11225],{"class":331},[68,22584,2588],{"class":331},[68,22586,21604],{"class":335},[68,22588,22589],{"class":70,"line":1819},[68,22590,4201],{"class":335},[68,22592,22593],{"class":70,"line":1824},[68,22594,22399],{"class":393},[68,22596,22597,22599,22601,22603,22605,22607],{"class":70,"line":1830},[68,22598,339],{"class":331},[68,22600,15774],{"class":74},[68,22602,22408],{"class":335},[68,22604,381],{"class":331},[68,22606,779],{"class":82},[68,22608,1498],{"class":335},[68,22610,22611,22613,22615,22618,22620,22622],{"class":70,"line":1835},[68,22612,339],{"class":331},[68,22614,15774],{"class":74},[68,22616,22617],{"class":335},"::m_B",[68,22619,381],{"class":331},[68,22621,1033],{"class":82},[68,22623,1498],{"class":335},[68,22625,22626,22628,22630],{"class":70,"line":1849},[68,22627,5569],{"class":331},[68,22629,5862],{"class":74},[68,22631,2182],{"class":335},[68,22633,22634],{"class":70,"line":1854},[68,22635,1753],{"class":335},[68,22637,22638],{"class":70,"line":1860},[68,22639,22640],{"class":393},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[68,22642,22643],{"class":70,"line":1881},[68,22644,22645],{"class":393},"    \u002F\u002F静态成员变量有两种访问方式：\n",[68,22647,22648],{"class":70,"line":1886},[68,22649,22650],{"class":393},"    \u002F\u002F1.通过对象进行访问\n",[68,22652,22653],{"class":70,"line":1900},[68,22654,22655],{"class":335},"    Person p;  \n",[68,22657,22658,22660,22662,22664,22666],{"class":70,"line":1905},[68,22659,1758],{"class":335},[68,22661,1376],{"class":331},[68,22663,22306],{"class":335},[68,22665,1376],{"class":331},[68,22667,1399],{"class":335},[68,22669,22670],{"class":70,"line":1934},[68,22671,22672],{"class":393},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[68,22674,22675],{"class":70,"line":1939},[68,22676,22677],{"class":393},"    \u002F\u002F2.通过类名进行访问\n",[68,22679,22680,22682,22684,22686,22688,22690],{"class":70,"line":1956},[68,22681,1758],{"class":335},[68,22683,1376],{"class":331},[68,22685,19251],{"class":74},[68,22687,22408],{"class":335},[68,22689,1376],{"class":331},[68,22691,1399],{"class":335},[68,22693,22694,22696,22698,22700,22702,22704,22706],{"class":70,"line":1961},[68,22695,1758],{"class":335},[68,22697,1376],{"class":331},[68,22699,19251],{"class":74},[68,22701,22617],{"class":335},[68,22703,1376],{"class":331},[68,22705,1446],{"class":335},[68,22707,22708],{"class":393}," \u002F\u002F没有访问权限，报错\n",[68,22710,22711],{"class":70,"line":1966},[68,22712,1772],{"class":335},[68,22714,22715,22717,22719],{"class":70,"line":1971},[68,22716,339],{"class":331},[68,22718,2179],{"class":74},[68,22720,2182],{"class":335},[68,22722,22723],{"class":70,"line":1985},[68,22724,1753],{"class":335},[68,22726,22727,22729],{"class":70,"line":1990},[68,22728,5907],{"class":74},[68,22730,5841],{"class":335},[68,22732,22733],{"class":70,"line":2783},[68,22734,1772],{"class":335},[22203,22736,22738],{"id":22737},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22740,22741],{},"1.静态成员函数定义与访问",[58,22743,22745],{"className":322,"code":22744,"language":324,"meta":63,"style":63},"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",[65,22746,22747,22753,22757,22761,22766,22777,22781,22795,22799,22803,22811,22815,22820,22825,22829,22837,22842,22852],{"__ignoreMap":63},[68,22748,22749,22751],{"class":70,"line":71},[68,22750,14899],{"class":331},[68,22752,15376],{"class":74},[68,22754,22755],{"class":70,"line":92},[68,22756,1753],{"class":335},[68,22758,22759],{"class":70,"line":1387},[68,22760,14921],{"class":331},[68,22762,22763],{"class":70,"line":1402},[68,22764,22765],{"class":393},"    \u002F\u002F在公共权限下定义静态成员函数\n",[68,22767,22768,22770,22773,22775],{"class":70,"line":1408},[68,22769,11225],{"class":331},[68,22771,22772],{"class":331}," void",[68,22774,11590],{"class":74},[68,22776,2182],{"class":335},[68,22778,22779],{"class":70,"line":1422},[68,22780,2236],{"class":335},[68,22782,22783,22786,22788,22791,22793],{"class":70,"line":1428},[68,22784,22785],{"class":335},"        coout",[68,22787,1376],{"class":331},[68,22789,22790],{"class":78},"\"静态成员函数的调用\"",[68,22792,1376],{"class":331},[68,22794,1399],{"class":335},[68,22796,22797],{"class":70,"line":1519},[68,22798,2393],{"class":335},[68,22800,22801],{"class":70,"line":1525},[68,22802,4201],{"class":335},[68,22804,22805,22807,22809],{"class":70,"line":1537},[68,22806,5569],{"class":331},[68,22808,5793],{"class":74},[68,22810,2182],{"class":335},[68,22812,22813],{"class":70,"line":1819},[68,22814,1753],{"class":335},[68,22816,22817],{"class":70,"line":1824},[68,22818,22819],{"class":393},"    \u002F\u002F静态成员函数的调用方式:\n",[68,22821,22822],{"class":70,"line":1830},[68,22823,22824],{"class":393},"    \u002F\u002F1.通过对象访问\n",[68,22826,22827],{"class":70,"line":1835},[68,22828,15518],{"class":335},[68,22830,22831,22833,22835],{"class":70,"line":1849},[68,22832,16071],{"class":335},[68,22834,11756],{"class":74},[68,22836,5841],{"class":335},[68,22838,22839],{"class":70,"line":1854},[68,22840,22841],{"class":393},"    \u002F\u002F2.通过类名访问\n",[68,22843,22844,22846,22848,22850],{"class":70,"line":1860},[68,22845,18724],{"class":74},[68,22847,17937],{"class":335},[68,22849,11756],{"class":74},[68,22851,5841],{"class":335},[68,22853,22854],{"class":70,"line":1881},[68,22855,1772],{"class":335},[23,22857,22858],{"start":92},[26,22859,22860],{},"静态成员函数只能访问静态成员变量",[58,22862,22864],{"className":322,"code":22863,"language":324,"meta":63,"style":63},"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",[65,22865,22866,22872,22876,22880,22884,22894,22898,22912,22917,22929,22933,22944,22954,22958,22962,22966,22976,22980,22993,22997,23001,23005,23009,23023,23031,23035,23039,23043,23047,23055,23059,23069,23074,23078,23086,23090,23096],{"__ignoreMap":63},[68,22867,22868,22870],{"class":70,"line":71},[68,22869,14899],{"class":331},[68,22871,15376],{"class":74},[68,22873,22874],{"class":70,"line":92},[68,22875,1753],{"class":335},[68,22877,22878],{"class":70,"line":1387},[68,22879,14921],{"class":331},[68,22881,22882],{"class":70,"line":1402},[68,22883,22765],{"class":393},[68,22885,22886,22888,22890,22892],{"class":70,"line":1408},[68,22887,11225],{"class":331},[68,22889,22772],{"class":331},[68,22891,11590],{"class":74},[68,22893,2182],{"class":335},[68,22895,22896],{"class":70,"line":1422},[68,22897,2236],{"class":335},[68,22899,22900,22903,22905,22907,22909],{"class":70,"line":1428},[68,22901,22902],{"class":335},"        m_A",[68,22904,381],{"class":331},[68,22906,644],{"class":82},[68,22908,390],{"class":335},[68,22910,22911],{"class":393}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[68,22913,22914],{"class":70,"line":1519},[68,22915,22916],{"class":393},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[68,22918,22919,22921,22923,22925,22927],{"class":70,"line":1525},[68,22920,22785],{"class":335},[68,22922,1376],{"class":331},[68,22924,22790],{"class":78},[68,22926,1376],{"class":331},[68,22928,1399],{"class":335},[68,22930,22931],{"class":70,"line":1537},[68,22932,2393],{"class":335},[68,22934,22935,22937,22939,22941],{"class":70,"line":1819},[68,22936,11225],{"class":331},[68,22938,2588],{"class":331},[68,22940,15653],{"class":335},[68,22942,22943],{"class":393}," \u002F\u002F静态成员变量\n",[68,22945,22946,22948,22951],{"class":70,"line":1824},[68,22947,2191],{"class":331},[68,22949,22950],{"class":335}," m_B;",[68,22952,22953],{"class":393}," \u002F\u002F非静态成员变量\n",[68,22955,22956],{"class":70,"line":1830},[68,22957,2606],{"emptyLinePlaceholder":260},[68,22959,22960],{"class":70,"line":1835},[68,22961,15427],{"class":331},[68,22963,22964],{"class":70,"line":1849},[68,22965,22578],{"class":393},[68,22967,22968,22970,22972,22974],{"class":70,"line":1854},[68,22969,11225],{"class":331},[68,22971,22772],{"class":331},[68,22973,13823],{"class":74},[68,22975,2182],{"class":335},[68,22977,22978],{"class":70,"line":1860},[68,22979,2236],{"class":335},[68,22981,22982,22984,22986,22989,22991],{"class":70,"line":1881},[68,22983,3657],{"class":335},[68,22985,1376],{"class":331},[68,22987,22988],{"class":78},"\"这是私有权限下的静态函数调用\"",[68,22990,1376],{"class":331},[68,22992,1399],{"class":335},[68,22994,22995],{"class":70,"line":1886},[68,22996,2393],{"class":335},[68,22998,22999],{"class":70,"line":1900},[68,23000,2606],{"emptyLinePlaceholder":260},[68,23002,23003],{"class":70,"line":1905},[68,23004,2606],{"emptyLinePlaceholder":260},[68,23006,23007],{"class":70,"line":1934},[68,23008,4201],{"class":335},[68,23010,23011,23013,23015,23017,23019,23021],{"class":70,"line":1939},[68,23012,339],{"class":331},[68,23014,15774],{"class":74},[68,23016,22408],{"class":335},[68,23018,381],{"class":331},[68,23020,525],{"class":82},[68,23022,1498],{"class":335},[68,23024,23025,23027,23029],{"class":70,"line":1956},[68,23026,5569],{"class":331},[68,23028,5793],{"class":74},[68,23030,2182],{"class":335},[68,23032,23033],{"class":70,"line":1961},[68,23034,1753],{"class":335},[68,23036,23037],{"class":70,"line":1966},[68,23038,22819],{"class":393},[68,23040,23041],{"class":70,"line":1971},[68,23042,22824],{"class":393},[68,23044,23045],{"class":70,"line":1985},[68,23046,15518],{"class":335},[68,23048,23049,23051,23053],{"class":70,"line":1990},[68,23050,16071],{"class":335},[68,23052,11756],{"class":74},[68,23054,5841],{"class":335},[68,23056,23057],{"class":70,"line":2783},[68,23058,22841],{"class":393},[68,23060,23061,23063,23065,23067],{"class":70,"line":2797},[68,23062,18724],{"class":74},[68,23064,17937],{"class":335},[68,23066,11756],{"class":74},[68,23068,5841],{"class":335},[68,23070,23071],{"class":70,"line":2805},[68,23072,23073],{"class":393},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[68,23075,23076],{"class":70,"line":2810},[68,23077,1772],{"class":335},[68,23079,23080,23082,23084],{"class":70,"line":2816},[68,23081,339],{"class":331},[68,23083,2179],{"class":74},[68,23085,2182],{"class":335},[68,23087,23088],{"class":70,"line":2822},[68,23089,1753],{"class":335},[68,23091,23092,23094],{"class":70,"line":2827},[68,23093,5838],{"class":74},[68,23095,5841],{"class":335},[68,23097,23098],{"class":70,"line":8153},[68,23099,1772],{"class":335},[301,23101,23103],{"id":23102},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22203,23105,23107],{"id":23106},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23109,23110],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23112,23113],{},"只有非静态成员变量才属于类的对象上",[23115,23116,23118],"h5",{"id":23117},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[58,23120,23122],{"className":322,"code":23121,"language":324,"meta":63,"style":63},"#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",[65,23123,23124,23131,23141,23147,23151,23155,23159,23167,23171,23175,23198,23202,23210,23214,23220],{"__ignoreMap":63},[68,23125,23126,23128],{"class":70,"line":71},[68,23127,2156],{"class":331},[68,23129,23130],{"class":78},"\u003Ciostraem>\n",[68,23132,23133,23135,23137,23139],{"class":70,"line":92},[68,23134,2164],{"class":331},[68,23136,2167],{"class":331},[68,23138,2170],{"class":74},[68,23140,1498],{"class":335},[68,23142,23143,23145],{"class":70,"line":1387},[68,23144,14899],{"class":331},[68,23146,15376],{"class":74},[68,23148,23149],{"class":70,"line":1402},[68,23150,1753],{"class":335},[68,23152,23153],{"class":70,"line":1408},[68,23154,2606],{"emptyLinePlaceholder":260},[68,23156,23157],{"class":70,"line":1422},[68,23158,4201],{"class":335},[68,23160,23161,23163,23165],{"class":70,"line":1428},[68,23162,5569],{"class":331},[68,23164,5793],{"class":74},[68,23166,2182],{"class":335},[68,23168,23169],{"class":70,"line":1519},[68,23170,1753],{"class":335},[68,23172,23173],{"class":70,"line":1525},[68,23174,15518],{"class":335},[68,23176,23177,23179,23181,23184,23186,23189,23191,23193,23195],{"class":70,"line":1537},[68,23178,1758],{"class":335},[68,23180,1376],{"class":331},[68,23182,23183],{"class":78},"\"size of p=\"",[68,23185,1376],{"class":331},[68,23187,23188],{"class":74},"sizeoif",[68,23190,6744],{"class":335},[68,23192,1376],{"class":331},[68,23194,1446],{"class":335},[68,23196,23197],{"class":393}," \u002F\u002F查看这个空类的占用的内存空间\n",[68,23199,23200],{"class":70,"line":1819},[68,23201,1772],{"class":335},[68,23203,23204,23206,23208],{"class":70,"line":1824},[68,23205,339],{"class":331},[68,23207,2179],{"class":74},[68,23209,2182],{"class":335},[68,23211,23212],{"class":70,"line":1830},[68,23213,1753],{"class":335},[68,23215,23216,23218],{"class":70,"line":1835},[68,23217,5838],{"class":74},[68,23219,5841],{"class":335},[68,23221,23222],{"class":70,"line":1849},[68,23223,1772],{"class":335},[19,23225,23226],{},"输出结果为：size of p=1",[19,23228,23229],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23231,23232],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23115,23234,23236],{"id":23235},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[58,23238,23240],{"className":322,"code":23239,"language":324,"meta":63,"style":63},"#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",[65,23241,23242,23248,23258,23266,23270,23279,23283,23291,23295,23299,23318,23322,23326,23334,23338,23344],{"__ignoreMap":63},[68,23243,23244,23246],{"class":70,"line":71},[68,23245,2156],{"class":331},[68,23247,2159],{"class":78},[68,23249,23250,23252,23254,23256],{"class":70,"line":92},[68,23251,2164],{"class":331},[68,23253,2167],{"class":331},[68,23255,2170],{"class":74},[68,23257,1498],{"class":335},[68,23259,23260,23262,23264],{"class":70,"line":1387},[68,23261,14899],{"class":331},[68,23263,15774],{"class":74},[68,23265,2880],{"class":335},[68,23267,23268],{"class":70,"line":1402},[68,23269,1753],{"class":335},[68,23271,23272,23274,23276],{"class":70,"line":1408},[68,23273,2191],{"class":331},[68,23275,15653],{"class":335},[68,23277,23278],{"class":393},"\u002F\u002F非静态成员变量\n",[68,23280,23281],{"class":70,"line":1422},[68,23282,4201],{"class":335},[68,23284,23285,23287,23289],{"class":70,"line":1428},[68,23286,5569],{"class":331},[68,23288,5793],{"class":74},[68,23290,2182],{"class":335},[68,23292,23293],{"class":70,"line":1519},[68,23294,1753],{"class":335},[68,23296,23297],{"class":70,"line":1525},[68,23298,15518],{"class":335},[68,23300,23301,23303,23305,23307,23309,23311,23313,23315],{"class":70,"line":1537},[68,23302,1758],{"class":335},[68,23304,1376],{"class":331},[68,23306,23183],{"class":78},[68,23308,1580],{"class":331},[68,23310,6744],{"class":335},[68,23312,1376],{"class":331},[68,23314,1446],{"class":335},[68,23316,23317],{"class":393}," \u002F\u002F查看不是空对象时占用多少内存\n",[68,23319,23320],{"class":70,"line":1819},[68,23321,2606],{"emptyLinePlaceholder":260},[68,23323,23324],{"class":70,"line":1824},[68,23325,1772],{"class":335},[68,23327,23328,23330,23332],{"class":70,"line":1830},[68,23329,339],{"class":331},[68,23331,2179],{"class":74},[68,23333,2182],{"class":335},[68,23335,23336],{"class":70,"line":1835},[68,23337,1753],{"class":335},[68,23339,23340,23342],{"class":70,"line":1849},[68,23341,5838],{"class":74},[68,23343,5841],{"class":335},[68,23345,23346],{"class":70,"line":1854},[68,23347,1772],{"class":335},[19,23349,23350],{},"输出结果：size of p=4",[19,23352,23353],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[23,23355,23356],{},[26,23357,23358],{},"如果加上非静态成员变量，Person类修改如下",[58,23360,23362],{"className":322,"code":23361,"language":324,"meta":63,"style":63},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[65,23363,23364,23370,23374,23380,23388,23392,23397],{"__ignoreMap":63},[68,23365,23366,23368],{"class":70,"line":71},[68,23367,14899],{"class":331},[68,23369,15376],{"class":74},[68,23371,23372],{"class":70,"line":92},[68,23373,1753],{"class":335},[68,23375,23376,23378],{"class":70,"line":1387},[68,23377,2191],{"class":331},[68,23379,21597],{"class":335},[68,23381,23382,23384,23386],{"class":70,"line":1402},[68,23383,11225],{"class":331},[68,23385,2588],{"class":331},[68,23387,21604],{"class":335},[68,23389,23390],{"class":70,"line":1408},[68,23391,4201],{"class":335},[68,23393,23394],{"class":70,"line":1422},[68,23395,23396],{"class":393},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[68,23398,23399,23401,23403,23405,23407,23409],{"class":70,"line":1428},[68,23400,339],{"class":331},[68,23402,15774],{"class":74},[68,23404,22617],{"class":335},[68,23406,381],{"class":331},[68,23408,525],{"class":82},[68,23410,1498],{"class":335},[19,23412,23413],{},"输出结果：4",[19,23415,23416],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[23,23418,23419],{"start":92},[26,23420,23421],{},"加上非静态成员函数",[58,23423,23425],{"className":322,"code":23424,"language":324,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[65,23426,23427,23434,23438,23444,23452,23456,23460,23464],{"__ignoreMap":63},[68,23428,23429,23431],{"class":70,"line":71},[68,23430,14899],{"class":331},[68,23432,23433],{"class":74},"  Person\n",[68,23435,23436],{"class":70,"line":92},[68,23437,1753],{"class":335},[68,23439,23440,23442],{"class":70,"line":1387},[68,23441,2191],{"class":331},[68,23443,21597],{"class":335},[68,23445,23446,23448,23450],{"class":70,"line":1402},[68,23447,15114],{"class":331},[68,23449,11590],{"class":74},[68,23451,2182],{"class":335},[68,23453,23454],{"class":70,"line":1408},[68,23455,2236],{"class":335},[68,23457,23458],{"class":70,"line":1422},[68,23459,2606],{"emptyLinePlaceholder":260},[68,23461,23462],{"class":70,"line":1428},[68,23463,2393],{"class":335},[68,23465,23466],{"class":70,"line":1519},[68,23467,4201],{"class":335},[19,23469,23470],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[23,23472,23473],{"start":1387},[26,23474,23475],{},"加上静态成员函数",[58,23477,23479],{"className":322,"code":23478,"language":324,"meta":63,"style":63},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[65,23480,23481,23487,23491,23497,23505,23509,23513,23517,23528,23532,23536,23540],{"__ignoreMap":63},[68,23482,23483,23485],{"class":70,"line":71},[68,23484,14899],{"class":331},[68,23486,23433],{"class":74},[68,23488,23489],{"class":70,"line":92},[68,23490,1753],{"class":335},[68,23492,23493,23495],{"class":70,"line":1387},[68,23494,2191],{"class":331},[68,23496,21597],{"class":335},[68,23498,23499,23501,23503],{"class":70,"line":1402},[68,23500,15114],{"class":331},[68,23502,11590],{"class":74},[68,23504,2182],{"class":335},[68,23506,23507],{"class":70,"line":1408},[68,23508,2236],{"class":335},[68,23510,23511],{"class":70,"line":1422},[68,23512,2606],{"emptyLinePlaceholder":260},[68,23514,23515],{"class":70,"line":1428},[68,23516,2393],{"class":335},[68,23518,23519,23521,23523,23526],{"class":70,"line":1519},[68,23520,11225],{"class":331},[68,23522,22772],{"class":331},[68,23524,23525],{"class":74}," func1",[68,23527,2182],{"class":335},[68,23529,23530],{"class":70,"line":1525},[68,23531,2236],{"class":335},[68,23533,23534],{"class":70,"line":1537},[68,23535,2606],{"emptyLinePlaceholder":260},[68,23537,23538],{"class":70,"line":1819},[68,23539,2393],{"class":335},[68,23541,23542],{"class":70,"line":1824},[68,23543,4201],{"class":335},[19,23545,23413],{},[19,23547,23548],{},"解释：静态成员函数也不属于类上",[250,23550,7879],{},{"title":63,"searchDepth":92,"depth":92,"links":23552},[23553,23559],{"id":14850,"depth":92,"text":14851,"children":23554},[23555,23556,23557,23558],{"id":14854,"depth":1387,"text":14855},{"id":15579,"depth":1387,"text":15580},{"id":15751,"depth":1387,"text":15752},{"id":16210,"depth":1387,"text":16211},{"id":18582,"depth":92,"text":18583,"children":23560},[23561,23562,23563,23564,23565,23566,23567,23568,23569],{"id":18594,"depth":1387,"text":18595},{"id":18887,"depth":1387,"text":18888},{"id":19378,"depth":1387,"text":19379},{"id":20475,"depth":1387,"text":20476},{"id":20898,"depth":1387,"text":20899},{"id":21377,"depth":1387,"text":21378},{"id":21752,"depth":1387,"text":21753},{"id":22165,"depth":1387,"text":22166},{"id":23102,"depth":1387,"text":23103},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14815,"description":23570},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23577,"title":324,"body":23578,"description":257,"extension":258,"meta":23582,"navigation":260,"path":23584,"seo":23585,"stem":23586,"__hash__":23587},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23579,"toc":23580},[],{"title":63,"searchDepth":92,"depth":92,"links":23581},[],{"category":23583},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":324,"description":257},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23589,"title":23590,"body":23591,"description":63,"extension":258,"meta":24180,"navigation":260,"path":24181,"seo":24182,"stem":24183,"__hash__":24184},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23592,"toc":24162},[23593,23596,23600,23603,23606,23609,23627,23632,23635,23638,23641,23644,23649,23652,23657,23660,23663,23667,23670,23673,23679,23682,23700,23704,23708,23711,23716,23719,23723,23726,23739,23742,23746,23749,23752,23755,23780,23783,23792,23803,23818,23850,23854,23861,23869,23873,23876,23879,23884,23888,23891,23894,23899,23902,23906,23909,23912,23917,23920,23924,23929,23933,24000,24004,24007,24010,24013,24016,24019,24025,24046,24049,24063,24071,24075,24078,24081,24086,24089,24094,24099,24102,24105,24110,24115,24118,24123,24128,24131,24136,24141,24144,24147,24152,24155,24160],[10,23594,23590],{"id":23595},"_1强化学习基本认识",[14,23597,23599],{"id":23598},"_11什么是强化学习","1.1.什么是强化学习",[19,23601,23602],{},"强化学习有两部分组成：智能体和环境；",[19,23604,23605],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23607,23608],{},"强化学习与监督学习的区别:",[23,23610,23611,23614,23617,23620],{},[26,23612,23613],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[26,23615,23616],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[26,23618,23619],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[26,23621,23622,23623,23626],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[483,23624,23625],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23628,23629],{},[48,23630],{"alt":63,"src":23631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23633,23634],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23636,23637],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23639,23640],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23642,23643],{},"获取奖励",[19,23645,23646],{},[48,23647],{"alt":63,"src":23648},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23650,23651],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23653,23654],{},[48,23655],{"alt":63,"src":23656},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23658,23659],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23661,23662],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23664,23666],{"id":23665},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23668,23669],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23671,23672],{},"具身智能中的应用",[19,23674,23675,23678],{},[483,23676,23677],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23680,23681],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23683,23684,23685,23688,23689,23692,23693,23696,23697],{},"机器人是",[483,23686,23687],{},"躯体","，深度学习是",[483,23690,23691],{},"神经元****网络","，VLA是",[483,23694,23695],{},"通用的行为逻辑","，而强化学习是",[483,23698,23699],{},"教练",[14,23701,23703],{"id":23702},"_13序列决策","1.3.序列决策",[301,23705,23707],{"id":23706},"_131智能体与环境","1.3.1.智能体与环境",[19,23709,23710],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23712,23713],{},[48,23714],{"alt":63,"src":23715},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23717,23718],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[301,23720,23722],{"id":23721},"_132奖励","1.3.2.奖励",[19,23724,23725],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23727,23728,23729,23738],{},"取某个策略的表现如何。强化学习的目的就是",[483,23730,23731,23732,23737],{},"最大化",[483,23733,23734],{},[483,23735,23736],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23740,23741],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[301,23743,23745],{"id":23744},"_133序列决策","1.3.3.序列决策",[19,23747,23748],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23750,23751],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23753,23754],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23756,23757,23761,23762,23764,23765,23767,23768,23770,23771,14000,23774,14000,23777],{},[23758,23759,23760],"em",{},"Ht"," = ",[23758,23763,929],{},"1*, a",[23758,23766,551],{},", r",[23758,23769,551],{},", . . . ,* ",[23758,23772,23773],{},"ot",[23758,23775,23776],{},", at ,",[23758,23778,23779],{},"rt",[19,23781,23782],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23784,23785,23761,23788,1865,23790,762],{},[23758,23786,23787],{},"st",[23758,23789,387],{},[23758,23791,23760],{},[19,23793,23794,23795,23798,23799,23802],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[483,23796,23797],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[483,23800,23801],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23804,23805,23806,23809,23810,23813,23814,23817],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[483,23807,23808],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[483,23811,23812],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23758,23815,23816],{},"S, A, T, R, Ω, O, γ",")。",[19,23819,23820,23821,23823,23824,23826,23827,336,23829,23832,23833,23835,23836,336,23839,23842,23843,23845,23846,23849],{},"其中 ",[23758,23822,1022],{}," 表示状态空间，为隐变量，",[23758,23825,566],{}," 为动作空间，",[23758,23828,1047],{},[23758,23830,23831],{},"s ′ |s, a",") 为状态转移概率，",[23758,23834,997],{}," 为奖励函数，",[23758,23837,23838],{},"Ω",[23758,23840,23841],{},"o|s, a",") 为观测概率，",[23758,23844,923],{}," 为观测空间，",[23758,23847,23848],{},"γ"," 为折扣因子。",[14,23851,23853],{"id":23852},"_14动作空间","1.4.动作空间",[19,23855,23856,23857,23860],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[483,23858,23859],{},"动作空间"," ，动作空间分为:",[23,23862,23863,23866],{},[26,23864,23865],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[26,23867,23868],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23870,23872],{"id":23871},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23874,23875],{},"由策略、价值函数、模型三部分组成",[19,23877,23878],{},"这三者组成马尔可夫决策过程",[19,23880,23881],{},[48,23882],{"alt":63,"src":23883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[301,23885,23887],{"id":23886},"_151策略","1.5.1.策略",[19,23889,23890],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23892,23893],{},"策略可分为两种：",[19,23895,23896],{},[48,23897],{"alt":63,"src":23898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23900,23901],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[301,23903,23905],{"id":23904},"_152价值函数","1.5.2.价值函数",[19,23907,23908],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23910,23911],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23913,23914],{},[48,23915],{"alt":63,"src":23916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23918,23919],{},"进入某个状态采取的最优动作可以通过Q函数得到",[301,23921,23923],{"id":23922},"_153模型","1.5.3.模型",[19,23925,23926],{},[48,23927],{"alt":63,"src":23928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23930,23932],{"id":23931},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[471,23934,23935,23946],{},[474,23936,23937],{},[477,23938,23939,23943],{},[480,23940,23942],{"align":23941},"left","类型",[480,23944,23945],{"align":23941},"特点",[518,23947,23948,23958,23968,23978,23990],{},[477,23949,23950,23955],{},[523,23951,23952],{"align":23941},[483,23953,23954],{},"基于价值的智能体",[523,23956,23957],{"align":23941},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[477,23959,23960,23965],{},[523,23961,23962],{"align":23941},[483,23963,23964],{},"基于策略的智能体",[523,23966,23967],{"align":23941},"直接学习策略，没有学习价值函数",[477,23969,23970,23975],{},[523,23971,23972],{"align":23941},[483,23973,23974],{},"演员-评论员智能体",[523,23976,23977],{"align":23941},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[477,23979,23980,23985],{},[523,23981,23982],{"align":23941},[483,23983,23984],{},"有模型强化学习智能体",[523,23986,23987],{"align":23941},[48,23988],{"alt":63,"src":23989},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[477,23991,23992,23997],{},[523,23993,23994],{"align":23941},[483,23995,23996],{},"免模型强化学习智能体",[523,23998,23999],{"align":23941},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24001,24003],{"id":24002},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24005,24006],{},"学习和规划是序列决策的两个基本问题",[19,24008,24009],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24011,24012],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24014,24015],{},"强化学习用到的库：Gym",[19,24017,24018],{},"Gym可以检验强化学习算法的优劣",[19,24020,24021,24024],{},[483,24022,24023],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[58,24026,24030],{"className":24027,"code":24028,"language":24029,"meta":63,"style":63},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[65,24031,24032],{"__ignoreMap":63},[68,24033,24034,24037,24040,24043],{"class":70,"line":71},[68,24035,24036],{"class":74},"pip",[68,24038,24039],{"class":78}," install",[68,24041,24042],{"class":78}," gym==",[68,24044,24045],{"class":82},"0.25.2\n",[19,24047,24048],{},"显示图形界面需要",[58,24050,24052],{"className":24027,"code":24051,"language":24029,"meta":63,"style":63},"pip install pygame\n",[65,24053,24054],{"__ignoreMap":63},[68,24055,24056,24058,24060],{"class":70,"line":71},[68,24057,24036],{"class":74},[68,24059,24039],{"class":78},[68,24061,24062],{"class":78}," pygame\n",[19,24064,24065,24066],{},"有关Gym库的相关文档介绍：",[30,24067,24070],{"href":24068,"rel":24069},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[34],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24072,24074],{"id":24073},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24076,24077],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24079,24080],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24082,24083],{},[48,24084],{"alt":63,"src":24085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24087,24088],{},"折扣率需要自己来设定",[19,24090,24091],{},[48,24092],{"alt":63,"src":24093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[23,24095,24096],{},[26,24097,24098],{},"状态转移函数：",[19,24100,24101],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24103,24104],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24106,24107],{},[48,24108],{"alt":63,"src":24109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[23,24111,24112],{"start":92},[26,24113,24114],{},"动作价值函数：",[19,24116,24117],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24119,24120],{},[48,24121],{"alt":63,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[23,24124,24125],{"start":1387},[26,24126,24127],{},"最优动作价值函数：",[19,24129,24130],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,24132,24133],{},[48,24134],{"alt":63,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[23,24137,24138],{"start":1402},[26,24139,24140],{},"状态价值函数:",[19,24142,24143],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24145,24146],{},"它衡量的是“一个具体动作”的长期价值",[19,24148,24149],{},[48,24150],{"alt":63,"src":24151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24153,24154],{},"几个价值函数之间的比较：",[19,24156,24157],{},[48,24158],{"alt":63,"src":24159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[250,24161,252],{},{"title":63,"searchDepth":92,"depth":92,"links":24163},[24164,24165,24166,24171,24172,24177,24178,24179],{"id":23598,"depth":92,"text":23599},{"id":23665,"depth":92,"text":23666},{"id":23702,"depth":92,"text":23703,"children":24167},[24168,24169,24170],{"id":23706,"depth":1387,"text":23707},{"id":23721,"depth":1387,"text":23722},{"id":23744,"depth":1387,"text":23745},{"id":23852,"depth":92,"text":23853},{"id":23871,"depth":92,"text":23872,"children":24173},[24174,24175,24176],{"id":23886,"depth":1387,"text":23887},{"id":23904,"depth":1387,"text":23905},{"id":23922,"depth":1387,"text":23923},{"id":23931,"depth":92,"text":23932},{"id":24002,"depth":92,"text":24003},{"id":24073,"depth":92,"text":24074},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23590,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24186,"title":24187,"body":24188,"description":24195,"extension":258,"meta":24206,"navigation":260,"path":24207,"seo":24208,"stem":24209,"__hash__":24210},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24189,"toc":24204},[24190,24193,24196,24201],[10,24191,24187],{"id":24192},"_2马尔可夫决策过程",[19,24194,24195],{},"这是强化学习的基本框架",[19,24197,24198],{},[48,24199],{"alt":63,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24202,24203],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":63,"searchDepth":92,"depth":92,"links":24205},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24187,"description":24195},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24212,"title":24213,"body":24214,"description":63,"extension":258,"meta":24330,"navigation":260,"path":24331,"seo":24332,"stem":24333,"__hash__":24334},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24215,"toc":24325},[24216,24219,24223,24226,24231,24236,24239,24244,24247,24252,24255,24259,24264,24267,24272,24277,24282,24285,24289,24294,24297,24302,24307,24312,24317,24320],[10,24217,24213],{"id":24218},"_3动作价值函数",[14,24220,24222],{"id":24221},"_31dqn","3.1.DQN",[19,24224,24225],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24227,24228],{},[48,24229],{"alt":63,"src":24230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24232,24233],{},[48,24234],{"alt":63,"src":24235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24237,24238],{},"DQN算法的描述：",[19,24240,24241],{},[48,24242],{"alt":63,"src":24243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24245,24246],{},"这里的Dense指的是全连接层",[19,24248,24249],{},[48,24250],{"alt":63,"src":24251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24253,24254],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24256,24258],{"id":24257},"_32dqn的举例","3.2.DQN的举例",[19,24260,24261],{},[48,24262],{"alt":63,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24265,24266],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24268,24269],{},[48,24270],{"alt":63,"src":24271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24273,24274],{},[48,24275],{"alt":63,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24278,24279],{},[48,24280],{"alt":63,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24283,24284],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24286,24288],{"id":24287},"_33td算法","3.3.TD算法",[19,24290,24291],{},[48,24292],{"alt":63,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24295,24296],{},"强化学习TD算法公式的粗略解释：",[19,24298,24299],{},[48,24300],{"alt":63,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24303,24304],{},[48,24305],{"alt":63,"src":24306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24308,24309],{},[48,24310],{"alt":63,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24313,24314],{},[48,24315],{"alt":63,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24318,24319],{},"TD算法总结：",[19,24321,24322],{},[48,24323],{"alt":63,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":63,"searchDepth":92,"depth":92,"links":24326},[24327,24328,24329],{"id":24221,"depth":92,"text":24222},{"id":24257,"depth":92,"text":24258},{"id":24287,"depth":92,"text":24288},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24213,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24336,"title":24337,"body":24338,"description":63,"extension":258,"meta":24571,"navigation":260,"path":24572,"seo":24573,"stem":24574,"__hash__":24575},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24339,"toc":24567},[24340,24343,24347,24350,24353,24358,24363,24366,24371,24376,24379,24384,24387,24392,24395,24400,24403,24408,24411,24416,24421,24424,24429,24432,24435,24440,24443,24448,24453,24457,24460,24463,24468,24473,24476,24481,24486,24489,24494,24497,24500,24505,24508,24513,24516,24521,24526,24529,24534,24539,24542,24547,24550,24555,24558],[10,24341,24337],{"id":24342},"_4策略学习",[14,24344,24346],{"id":24345},"_41概念描述","4.1.概念描述",[19,24348,24349],{},"用神经网络（策略网络）近似策略函数",[19,24351,24352],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24354,24355],{},[48,24356],{"alt":63,"src":24357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24359,24360],{},[48,24361],{"alt":63,"src":24362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24364,24365],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24367,24368],{},[48,24369],{"alt":63,"src":24370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24372,24373],{},[48,24374],{"alt":63,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24377,24378],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24380,24381],{},[48,24382],{"alt":63,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24385,24386],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24388,24389],{},[48,24390],{"alt":63,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24393,24394],{},"改进theta要用到策略梯度算法",[19,24396,24397],{},[48,24398],{"alt":63,"src":24399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24401,24402],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24404,24405],{},[48,24406],{"alt":63,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24409,24410],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24412,24413],{},[48,24414],{"alt":63,"src":24415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24417,24418],{},[48,24419],{"alt":63,"src":24420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24422,24423],{},"梯度公式总结：",[19,24425,24426],{},[48,24427],{"alt":63,"src":24428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24430,24431],{},"两个公式的分别应用场景：",[19,24433,24434],{},"对于离散的动作：",[19,24436,24437],{},[48,24438],{"alt":63,"src":24439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24441,24442],{},"对于连续的动作：",[19,24444,24445],{},[48,24446],{"alt":63,"src":24447},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24449,24450],{},[48,24451],{"alt":63,"src":24452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24454,24456],{"id":24455},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24458,24459],{},"使用蒙特卡洛来近似计算策略梯度",[19,24461,24462],{},"蒙特卡洛法的解释如下：",[19,24464,24465],{},[48,24466],{"alt":63,"src":24467},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24469,24470],{},[48,24471],{"alt":63,"src":24472},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24474,24475],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[23,24477,24478],{},[26,24479,24480],{},"方法一：reinforce算法",[19,24482,24483],{},[48,24484],{"alt":63,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24487,24488],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[23,24490,24491],{"start":92},[26,24492,24493],{},"方法二：actor-critic算法",[19,24495,24496],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24498,24499],{},"两个网络的构建：",[19,24501,24502],{},[48,24503],{"alt":63,"src":24504},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24506,24507],{},"actor网路：",[19,24509,24510],{},[48,24511],{"alt":63,"src":24512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24514,24515],{},"critic网络",[19,24517,24518],{},[48,24519],{"alt":63,"src":24520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[23,24522,24523],{"start":1387},[26,24524,24525],{},"网络的训练",[19,24527,24528],{},"网络描述",[19,24530,24531],{},[48,24532],{"alt":63,"src":24533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24535,24536],{},[48,24537],{"alt":63,"src":24538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24540,24541],{},"TD算法更新梯度：",[19,24543,24544],{},[48,24545],{"alt":63,"src":24546},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24548,24549],{},"策略网络更新梯度：",[19,24551,24552],{},[48,24553],{"alt":63,"src":24554},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24556,24557],{},"训练整个流程的具体描述：",[19,24559,24560,24563,24564],{},[48,24561],{"alt":63,"src":24562},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[48,24565],{"alt":63,"src":24566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":63,"searchDepth":92,"depth":92,"links":24568},[24569,24570],{"id":24345,"depth":92,"text":24346},{"id":24455,"depth":92,"text":24456},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24337,"description":63},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24577,"title":24578,"body":24579,"description":24586,"extension":258,"meta":24636,"navigation":260,"path":24637,"seo":24638,"stem":24639,"__hash__":24640},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24580,"toc":24632},[24581,24584,24587,24591,24594,24599,24603,24606,24611,24614,24619,24624,24627],[10,24582,24578],{"id":24583},"_5alphago算法",[19,24585,24586],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24588,24590],{"id":24589},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24592,24593],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24595,24596],{},[48,24597],{"alt":63,"src":24598},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24600,24602],{"id":24601},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24604,24605],{},"采用强化学习的方式训练策略网络",[19,24607,24608],{},[48,24609],{"alt":63,"src":24610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24612,24613],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24615,24616],{},[48,24617],{"alt":63,"src":24618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24620,24621],{},[48,24622],{"alt":63,"src":24623},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24625,24626],{},"强化学习训练策略网络的总结：",[19,24628,24629],{},[48,24630],{"alt":63,"src":24631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":63,"searchDepth":92,"depth":92,"links":24633},[24634,24635],{"id":24589,"depth":92,"text":24590},{"id":24601,"depth":92,"text":24602},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24578,"description":24586},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24642,"title":24643,"body":24644,"description":24651,"extension":258,"meta":24654,"navigation":260,"path":24655,"seo":24656,"stem":24657,"__hash__":24658},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24645,"toc":24652},[24646,24649],[10,24647,24643],{"id":24648},"_6价值网络",[19,24650,24651],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":63,"searchDepth":92,"depth":92,"links":24653},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24643,"description":24651},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24660,"title":24661,"body":24662,"description":24666,"extension":258,"meta":24667,"navigation":260,"path":24668,"seo":24669,"stem":24670,"__hash__":24671},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24663,"toc":24664},[],{"title":63,"searchDepth":92,"depth":92,"links":24665},[],"记录自己的强化学习笔记。",{"category":23583},"\u002Fwiki\u002F2025-12-04",{"title":24661,"description":24666},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24673,"title":24674,"body":24675,"description":257,"extension":258,"meta":24714,"navigation":260,"path":24715,"seo":24716,"stem":24717,"__hash__":24718},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24676,"toc":24712},[24677,24680,24683,24689,24692,24698,24701,24706,24709],[10,24678,24674],{"id":24679},"_1-项目概览与官方资源",[19,24681,24682],{},"官方文档：",[19,24684,24685],{},[30,24686,24687],{"href":24687,"rel":24688},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[34],[19,24690,24691],{},"官方代码仓库：",[19,24693,24694],{},[30,24695,24696],{"href":24696,"rel":24697},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[34],[19,24699,24700],{},"复现大体流程：",[19,24702,24703],{},[48,24704],{"alt":63,"src":24705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24707,24708],{},"本教程的目标是打通这条链路：",[19,24710,24711],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":63,"searchDepth":92,"depth":92,"links":24713},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24674,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24720,"title":24721,"body":24722,"description":257,"extension":258,"meta":24838,"navigation":260,"path":24839,"seo":24840,"stem":24841,"__hash__":24842},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24723,"toc":24833},[24724,24727,24731,24734,24741,24745,24748,24757,24767,24771,24801,24804,24830],[10,24725,24721],{"id":24726},"_2-环境准备与设备连接",[14,24728,24730],{"id":24729},"_21-系统与环境","2.1 系统与环境",[19,24732,24733],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24735,24736,24737,24740],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[65,24738,24739],{},"lerobot"," 依赖。",[14,24742,24744],{"id":24743},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24746,24747],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[58,24749,24751],{"className":24027,"code":24750,"language":24029,"meta":63,"style":63},"lerobot-find-out\n",[65,24752,24753],{"__ignoreMap":63},[68,24754,24755],{"class":70,"line":71},[68,24756,24750],{"class":74},[19,24758,24759,24760,546,24763,24766],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[65,24761,24762],{},"\u002Fdev\u002FttyACM0",[65,24764,24765],{},"\u002Fdev\u002FttyACM1","）。",[14,24768,24770],{"id":24769},"_23-串口授权","2.3 串口授权",[58,24772,24774],{"className":24027,"code":24773,"language":24029,"meta":63,"style":63},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[65,24775,24776,24790],{"__ignoreMap":63},[68,24777,24778,24781,24784,24787],{"class":70,"line":71},[68,24779,24780],{"class":74},"sudo",[68,24782,24783],{"class":78}," chmod",[68,24785,24786],{"class":82}," 666",[68,24788,24789],{"class":78}," \u002Fdev\u002FttyACM0\n",[68,24791,24792,24794,24796,24798],{"class":70,"line":92},[68,24793,24780],{"class":74},[68,24795,24783],{"class":78},[68,24797,24786],{"class":82},[68,24799,24800],{"class":78}," \u002Fdev\u002FttyACM1\n",[19,24802,24803],{},"说明：",[42,24805,24806,24811,24817,24827],{},[26,24807,24808,24810],{},[65,24809,24780],{},"：以 root 权限执行命令。",[26,24812,24813,24816],{},[65,24814,24815],{},"chmod","：修改设备节点权限。",[26,24818,24819,24822,24823,24826],{},[65,24820,24821],{},"666","：",[65,24824,24825],{},"rw-rw-rw-","，所有用户可读写。",[26,24828,24829],{},"串口号必须替换为你机器上的真实端口。",[250,24831,24832],{},"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":63,"searchDepth":92,"depth":92,"links":24834},[24835,24836,24837],{"id":24729,"depth":92,"text":24730},{"id":24743,"depth":92,"text":24744},{"id":24769,"depth":92,"text":24770},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24721,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24844,"title":24845,"body":24846,"description":257,"extension":258,"meta":25007,"navigation":260,"path":25008,"seo":25009,"stem":25010,"__hash__":25011},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24847,"toc":25003},[24848,24852,24856,24862,24865,24922,24925,24929,24932,25000],[10,24849,24851],{"id":24850},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24853,24855],{"id":24854},"_31-配置电机-id","3.1 配置电机 ID",[19,24857,24858,24859,24861],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[65,24860,551],{},"，需要改成机械臂链路里不冲突的编号。",[19,24863,24864],{},"方式一：用 LeRobot 命令逐步写入。",[58,24866,24868],{"className":24027,"code":24867,"language":24029,"meta":63,"style":63},"# 主臂舵机配置 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",[65,24869,24870,24875,24883,24890,24895,24899,24904,24910,24917],{"__ignoreMap":63},[68,24871,24872],{"class":70,"line":71},[68,24873,24874],{"class":393},"# 主臂舵机配置 ID\n",[68,24876,24877,24880],{"class":70,"line":92},[68,24878,24879],{"class":74},"lerobot-setup-motors",[68,24881,24882],{"class":82}," \\\n",[68,24884,24885,24888],{"class":70,"line":1387},[68,24886,24887],{"class":82},"  --teleop.type=so101_leader",[68,24889,24882],{"class":82},[68,24891,24892],{"class":70,"line":1402},[68,24893,24894],{"class":82},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[68,24896,24897],{"class":70,"line":1408},[68,24898,2606],{"emptyLinePlaceholder":260},[68,24900,24901],{"class":70,"line":1422},[68,24902,24903],{"class":393},"# 从臂舵机配置 ID\n",[68,24905,24906,24908],{"class":70,"line":1428},[68,24907,24879],{"class":74},[68,24909,24882],{"class":82},[68,24911,24912,24915],{"class":70,"line":1519},[68,24913,24914],{"class":82},"  --robot.type=so101_follower",[68,24916,24882],{"class":82},[68,24918,24919],{"class":70,"line":1525},[68,24920,24921],{"class":82},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24923,24924],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24926,24928],{"id":24927},"_32-机械臂校准","3.2 机械臂校准",[19,24930,24931],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[58,24933,24935],{"className":24027,"code":24934,"language":24029,"meta":63,"style":63},"# 主臂校准\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",[65,24936,24937,24942,24949,24955,24962,24967,24971,24976,24982,24988,24995],{"__ignoreMap":63},[68,24938,24939],{"class":70,"line":71},[68,24940,24941],{"class":393},"# 主臂校准\n",[68,24943,24944,24947],{"class":70,"line":92},[68,24945,24946],{"class":74},"lerobot-calibrate",[68,24948,24882],{"class":82},[68,24950,24951,24953],{"class":70,"line":1387},[68,24952,24887],{"class":82},[68,24954,24882],{"class":82},[68,24956,24957,24960],{"class":70,"line":1402},[68,24958,24959],{"class":82},"  --teleop.port=\u002Fdev\u002FttyACM0",[68,24961,24882],{"class":82},[68,24963,24964],{"class":70,"line":1408},[68,24965,24966],{"class":82},"  --teleop.id=my_awesome_leader_arm\n",[68,24968,24969],{"class":70,"line":1422},[68,24970,2606],{"emptyLinePlaceholder":260},[68,24972,24973],{"class":70,"line":1428},[68,24974,24975],{"class":393},"# 从臂校准\n",[68,24977,24978,24980],{"class":70,"line":1519},[68,24979,24946],{"class":74},[68,24981,24882],{"class":82},[68,24983,24984,24986],{"class":70,"line":1525},[68,24985,24914],{"class":82},[68,24987,24882],{"class":82},[68,24989,24990,24993],{"class":70,"line":1537},[68,24991,24992],{"class":82},"  --robot.port=\u002Fdev\u002FttyACM1",[68,24994,24882],{"class":82},[68,24996,24997],{"class":70,"line":1819},[68,24998,24999],{"class":82},"  --robot.id=my_awesome_follower_arm\n",[250,25001,25002],{},"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":63,"searchDepth":92,"depth":92,"links":25004},[25005,25006],{"id":24854,"depth":92,"text":24855},{"id":24927,"depth":92,"text":24928},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24845,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25013,"title":25014,"body":25015,"description":257,"extension":258,"meta":25206,"navigation":260,"path":25207,"seo":25208,"stem":25209,"__hash__":25210},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25016,"toc":25202},[25017,25020,25024,25071,25075,25088,25151,25154,25199],[10,25018,25014],{"id":25019},"_4-遥操与相机接入",[14,25021,25023],{"id":25022},"_41-不带相机遥操","4.1 不带相机遥操",[58,25025,25027],{"className":24027,"code":25026,"language":24029,"meta":63,"style":63},"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",[65,25028,25029,25036,25042,25048,25055,25061,25067],{"__ignoreMap":63},[68,25030,25031,25034],{"class":70,"line":71},[68,25032,25033],{"class":74},"lerobot-teleoperate",[68,25035,24882],{"class":82},[68,25037,25038,25040],{"class":70,"line":92},[68,25039,24914],{"class":82},[68,25041,24882],{"class":82},[68,25043,25044,25046],{"class":70,"line":1387},[68,25045,24992],{"class":82},[68,25047,24882],{"class":82},[68,25049,25050,25053],{"class":70,"line":1402},[68,25051,25052],{"class":82},"  --robot.id=my_awesome_follower_arm",[68,25054,24882],{"class":82},[68,25056,25057,25059],{"class":70,"line":1408},[68,25058,24887],{"class":82},[68,25060,24882],{"class":82},[68,25062,25063,25065],{"class":70,"line":1422},[68,25064,24959],{"class":82},[68,25066,24882],{"class":82},[68,25068,25069],{"class":70,"line":1428},[68,25070,24966],{"class":82},[14,25072,25074],{"id":25073},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[58,25076,25078],{"className":24027,"code":25077,"language":24029,"meta":63,"style":63},"lerobot-find-cameras opencv\n",[65,25079,25080],{"__ignoreMap":63},[68,25081,25082,25085],{"class":70,"line":71},[68,25083,25084],{"class":74},"lerobot-find-cameras",[68,25086,25087],{"class":78}," opencv\n",[58,25089,25091],{"className":24027,"code":25090,"language":24029,"meta":63,"style":63},"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",[65,25092,25093,25099,25105,25111,25117,25127,25133,25139,25146],{"__ignoreMap":63},[68,25094,25095,25097],{"class":70,"line":71},[68,25096,25033],{"class":74},[68,25098,24882],{"class":82},[68,25100,25101,25103],{"class":70,"line":92},[68,25102,24914],{"class":82},[68,25104,24882],{"class":82},[68,25106,25107,25109],{"class":70,"line":1387},[68,25108,24992],{"class":82},[68,25110,24882],{"class":82},[68,25112,25113,25115],{"class":70,"line":1402},[68,25114,25052],{"class":82},[68,25116,24882],{"class":82},[68,25118,25119,25122,25125],{"class":70,"line":1408},[68,25120,25121],{"class":82},"  --robot.cameras=",[68,25123,25124],{"class":78},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[68,25126,24882],{"class":82},[68,25128,25129,25131],{"class":70,"line":1422},[68,25130,24887],{"class":82},[68,25132,24882],{"class":82},[68,25134,25135,25137],{"class":70,"line":1428},[68,25136,24959],{"class":82},[68,25138,24882],{"class":82},[68,25140,25141,25144],{"class":70,"line":1519},[68,25142,25143],{"class":82},"  --teleop.id=my_awesome_leader_arm",[68,25145,24882],{"class":82},[68,25147,25148],{"class":70,"line":1525},[68,25149,25150],{"class":82},"  --display_data=true\n",[19,25152,25153],{},"相机参数说明：",[42,25155,25156,25162,25168,25177,25187,25193],{},[26,25157,25158,25161],{},[65,25159,25160],{},"front","：相机名称。",[26,25163,25164,25167],{},[65,25165,25166],{},"type: opencv","：相机驱动类型。",[26,25169,25170,25173,25174,24766],{},[65,25171,25172],{},"index_or_path","：设备编号或设备路径（如 ",[65,25175,25176],{},"\u002Fdev\u002Fvideo4",[26,25178,25179,25182,25183,25186],{},[65,25180,25181],{},"width"," \u002F ",[65,25184,25185],{},"height","：图像分辨率。",[26,25188,25189,25192],{},[65,25190,25191],{},"fps","：采样帧率。",[26,25194,25195,25198],{},[65,25196,25197],{},"--display_data=true","：启用实时可视化。",[250,25200,25201],{},"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":63,"searchDepth":92,"depth":92,"links":25203},[25204,25205],{"id":25022,"depth":92,"text":25023},{"id":25073,"depth":92,"text":25074},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25014,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25212,"title":25213,"body":25214,"description":257,"extension":258,"meta":25386,"navigation":260,"path":25387,"seo":25388,"stem":25389,"__hash__":25390},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25215,"toc":25381},[25216,25220,25224,25229,25234,25237,25279,25285,25289,25338,25343,25347,25350,25358,25363,25368,25373,25378],[10,25217,25219],{"id":25218},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25221,25223],{"id":25222},"_51-生成访问令牌","5.1 生成访问令牌",[19,25225,25226],{},[48,25227],{"alt":63,"src":25228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25230,25231],{},[48,25232],{"alt":63,"src":25233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25235,25236],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[58,25238,25240],{"className":24027,"code":25239,"language":24029,"meta":63,"style":63},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[65,25241,25242,25255],{"__ignoreMap":63},[68,25243,25244,25247,25250,25252],{"class":70,"line":71},[68,25245,25246],{"class":331},"export",[68,25248,25249],{"class":335}," HF_TOKEN",[68,25251,381],{"class":331},[68,25253,25254],{"class":78},"\"your_huggingface_token\"\n",[68,25256,25257,25260,25263,25266,25269,25271,25274,25276],{"class":70,"line":92},[68,25258,25259],{"class":74},"hf",[68,25261,25262],{"class":78}," auth",[68,25264,25265],{"class":78}," login",[68,25267,25268],{"class":82}," --token",[68,25270,9929],{"class":78},[68,25272,25273],{"class":335},"$HF_TOKEN",[68,25275,584],{"class":78},[68,25277,25278],{"class":82}," --add-to-git-credential\n",[19,25280,25281,25284],{},[65,25282,25283],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25286,25288],{"id":25287},"_52-验证登录","5.2 验证登录",[58,25290,25292],{"className":24027,"code":25291,"language":24029,"meta":63,"style":63},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[65,25293,25294,25325],{"__ignoreMap":63},[68,25295,25296,25299,25301,25304,25306,25308,25311,25314,25317,25320,25323],{"class":70,"line":71},[68,25297,25298],{"class":335},"HF_USER",[68,25300,381],{"class":331},[68,25302,25303],{"class":335},"$(",[68,25305,25259],{"class":74},[68,25307,25262],{"class":78},[68,25309,25310],{"class":78}," whoami",[68,25312,25313],{"class":331}," |",[68,25315,25316],{"class":74}," head",[68,25318,25319],{"class":82}," -n",[68,25321,25322],{"class":82}," 1",[68,25324,342],{"class":335},[68,25326,25327,25330,25332,25335],{"class":70,"line":92},[68,25328,25329],{"class":82},"echo",[68,25331,9929],{"class":78},[68,25333,25334],{"class":335},"$HF_USER",[68,25336,25337],{"class":78},"\"\n",[19,25339,25340],{},[48,25341],{"alt":63,"src":25342},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25344,25346],{"id":25345},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25348,25349],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[42,25351,25352,25355],{},[26,25353,25354],{},"Dataset Repo（用于上传演示数据）",[26,25356,25357],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25359,25360],{},[48,25361],{"alt":63,"src":25362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25364,25365],{},[48,25366],{"alt":63,"src":25367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25369,25370],{},[48,25371],{"alt":63,"src":25372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25374,25375],{},[48,25376],{"alt":63,"src":25377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[250,25379,25380],{},"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":63,"searchDepth":92,"depth":92,"links":25382},[25383,25384,25385],{"id":25222,"depth":92,"text":25223},{"id":25287,"depth":92,"text":25288},{"id":25345,"depth":92,"text":25346},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25213,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25392,"title":25393,"body":25394,"description":257,"extension":258,"meta":25591,"navigation":260,"path":25592,"seo":25593,"stem":25594,"__hash__":25595},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25395,"toc":25586},[25396,25400,25404,25500,25508,25513,25517,25533,25536,25540,25583],[10,25397,25399],{"id":25398},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25401,25403],{"id":25402},"_61-录制示教数据","6.1 录制示教数据",[58,25405,25407],{"className":24027,"code":25406,"language":24029,"meta":63,"style":63},"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",[65,25408,25409,25416,25422,25428,25434,25443,25449,25455,25461,25468,25478,25485,25495],{"__ignoreMap":63},[68,25410,25411,25414],{"class":70,"line":71},[68,25412,25413],{"class":74},"lerobot-record",[68,25415,24882],{"class":82},[68,25417,25418,25420],{"class":70,"line":92},[68,25419,24914],{"class":82},[68,25421,24882],{"class":82},[68,25423,25424,25426],{"class":70,"line":1387},[68,25425,24992],{"class":82},[68,25427,24882],{"class":82},[68,25429,25430,25432],{"class":70,"line":1402},[68,25431,25052],{"class":82},[68,25433,24882],{"class":82},[68,25435,25436,25438,25441],{"class":70,"line":1408},[68,25437,25121],{"class":82},[68,25439,25440],{"class":78},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[68,25442,24882],{"class":82},[68,25444,25445,25447],{"class":70,"line":1422},[68,25446,24887],{"class":82},[68,25448,24882],{"class":82},[68,25450,25451,25453],{"class":70,"line":1428},[68,25452,24959],{"class":82},[68,25454,24882],{"class":82},[68,25456,25457,25459],{"class":70,"line":1519},[68,25458,25143],{"class":82},[68,25460,24882],{"class":82},[68,25462,25463,25466],{"class":70,"line":1525},[68,25464,25465],{"class":82},"  --display_data=true",[68,25467,24882],{"class":82},[68,25469,25470,25473,25476],{"class":70,"line":1537},[68,25471,25472],{"class":82},"  --dataset.repo_id=",[68,25474,25475],{"class":78},"\"Embodied-AI-6\u002Fso101_test\"",[68,25477,24882],{"class":82},[68,25479,25480,25483],{"class":70,"line":1819},[68,25481,25482],{"class":82},"  --dataset.num_episodes=10",[68,25484,24882],{"class":82},[68,25486,25487,25490,25493],{"class":70,"line":1824},[68,25488,25489],{"class":82},"  --dataset.single_task=",[68,25491,25492],{"class":78},"\"Grab the green cube\"",[68,25494,24882],{"class":82},[68,25496,25497],{"class":70,"line":1830},[68,25498,25499],{"class":82},"  --resume=true\n",[42,25501,25502],{},[26,25503,25504,25507],{},[65,25505,25506],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25509,25510],{},[48,25511],{"alt":63,"src":25512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25514,25516],{"id":25515},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[58,25518,25520],{"className":24027,"code":25519,"language":24029,"meta":63,"style":63},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[65,25521,25522],{"__ignoreMap":63},[68,25523,25524,25527,25530],{"class":70,"line":71},[68,25525,25526],{"class":74},"rm",[68,25528,25529],{"class":82}," -rf",[68,25531,25532],{"class":78}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25534,25535],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25537,25539],{"id":25538},"_63-回放指定-episode","6.3 回放指定 episode",[58,25541,25543],{"className":24027,"code":25542,"language":24029,"meta":63,"style":63},"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",[65,25544,25545,25552,25558,25564,25570,25578],{"__ignoreMap":63},[68,25546,25547,25550],{"class":70,"line":71},[68,25548,25549],{"class":74},"lerobot-replay",[68,25551,24882],{"class":82},[68,25553,25554,25556],{"class":70,"line":92},[68,25555,24914],{"class":82},[68,25557,24882],{"class":82},[68,25559,25560,25562],{"class":70,"line":1387},[68,25561,24992],{"class":82},[68,25563,24882],{"class":82},[68,25565,25566,25568],{"class":70,"line":1402},[68,25567,25052],{"class":82},[68,25569,24882],{"class":82},[68,25571,25572,25574,25576],{"class":70,"line":1408},[68,25573,25472],{"class":82},[68,25575,25475],{"class":78},[68,25577,24882],{"class":82},[68,25579,25580],{"class":70,"line":1422},[68,25581,25582],{"class":82},"  --dataset.episode=0\n",[250,25584,25585],{},"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":63,"searchDepth":92,"depth":92,"links":25587},[25588,25589,25590],{"id":25402,"depth":92,"text":25403},{"id":25515,"depth":92,"text":25516},{"id":25538,"depth":92,"text":25539},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25393,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25597,"title":25598,"body":25599,"description":257,"extension":258,"meta":25727,"navigation":260,"path":25728,"seo":25729,"stem":25730,"__hash__":25731},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25600,"toc":25725},[25601,25605,25668,25671,25718,25723],[10,25602,25604],{"id":25603},"_7-act-模型训练","7. ACT 模型训练",[58,25606,25608],{"className":24027,"code":25607,"language":24029,"meta":63,"style":63},"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",[65,25609,25610,25617,25625,25632,25639,25646,25653,25660],{"__ignoreMap":63},[68,25611,25612,25615],{"class":70,"line":71},[68,25613,25614],{"class":74},"lerobot-train",[68,25616,24882],{"class":82},[68,25618,25619,25621,25623],{"class":70,"line":92},[68,25620,25472],{"class":82},[68,25622,25475],{"class":78},[68,25624,24882],{"class":82},[68,25626,25627,25630],{"class":70,"line":1387},[68,25628,25629],{"class":82},"  --policy.type=act",[68,25631,24882],{"class":82},[68,25633,25634,25637],{"class":70,"line":1402},[68,25635,25636],{"class":82},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[68,25638,24882],{"class":82},[68,25640,25641,25644],{"class":70,"line":1408},[68,25642,25643],{"class":82},"  --job_name=act_so101_test",[68,25645,24882],{"class":82},[68,25647,25648,25651],{"class":70,"line":1422},[68,25649,25650],{"class":82},"  --policy.device=cuda",[68,25652,24882],{"class":82},[68,25654,25655,25658],{"class":70,"line":1428},[68,25656,25657],{"class":82},"  --wandb.enable=false",[68,25659,24882],{"class":82},[68,25661,25662,25665],{"class":70,"line":1519},[68,25663,25664],{"class":82},"  --policy.repo_id=",[68,25666,25667],{"class":78},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25669,25670],{},"参数说明：",[42,25672,25673,25679,25685,25691,25697,25706,25712],{},[26,25674,25675,25678],{},[65,25676,25677],{},"--dataset.repo_id","：训练数据集仓库。",[26,25680,25681,25684],{},[65,25682,25683],{},"--policy.type=act","：策略模型类型为 ACT。",[26,25686,25687,25690],{},[65,25688,25689],{},"--output_dir","：本地训练输出目录。",[26,25692,25693,25696],{},[65,25694,25695],{},"--job_name","：训练任务名称。",[26,25698,25699,25702,25703,24766],{},[65,25700,25701],{},"--policy.device","：训练设备（如 ",[65,25704,25705],{},"cuda",[26,25707,25708,25711],{},[65,25709,25710],{},"--wandb.enable","：是否启用 WandB 可视化。",[26,25713,25714,25717],{},[65,25715,25716],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25719,25720],{},[48,25721],{"alt":63,"src":25722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[250,25724,25585],{},{"title":63,"searchDepth":92,"depth":92,"links":25726},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25598,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25733,"title":25734,"body":25735,"description":257,"extension":258,"meta":25822,"navigation":260,"path":25823,"seo":25824,"stem":25825,"__hash__":25826},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25736,"toc":25820},[25737,25740,25743,25810,25818],[10,25738,25734],{"id":25739},"_8-策略部署与自动采集",[19,25741,25742],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[58,25744,25746],{"className":24027,"code":25745,"language":24029,"meta":63,"style":63},"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",[65,25747,25748,25754,25760,25766,25774,25780,25787,25795,25803],{"__ignoreMap":63},[68,25749,25750,25752],{"class":70,"line":71},[68,25751,25413],{"class":74},[68,25753,24882],{"class":82},[68,25755,25756,25758],{"class":70,"line":92},[68,25757,24914],{"class":82},[68,25759,24882],{"class":82},[68,25761,25762,25764],{"class":70,"line":1387},[68,25763,24992],{"class":82},[68,25765,24882],{"class":82},[68,25767,25768,25770,25772],{"class":70,"line":1402},[68,25769,25121],{"class":82},[68,25771,25440],{"class":78},[68,25773,24882],{"class":82},[68,25775,25776,25778],{"class":70,"line":1408},[68,25777,25052],{"class":82},[68,25779,24882],{"class":82},[68,25781,25782,25785],{"class":70,"line":1422},[68,25783,25784],{"class":82},"  --display_data=false",[68,25786,24882],{"class":82},[68,25788,25789,25791,25793],{"class":70,"line":1428},[68,25790,25472],{"class":82},[68,25792,25475],{"class":78},[68,25794,24882],{"class":82},[68,25796,25797,25799,25801],{"class":70,"line":1519},[68,25798,25489],{"class":82},[68,25800,25492],{"class":78},[68,25802,24882],{"class":82},[68,25804,25805,25808],{"class":70,"line":1525},[68,25806,25807],{"class":82},"  --policy.path=",[68,25809,25667],{"class":78},[42,25811,25812],{},[26,25813,25814,25817],{},[65,25815,25816],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[250,25819,25585],{},{"title":63,"searchDepth":92,"depth":92,"links":25821},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25734,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25828,"title":25829,"body":25830,"description":257,"extension":258,"meta":25859,"navigation":260,"path":25860,"seo":25861,"stem":25862,"__hash__":25863},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25831,"toc":25857},[25832,25836,25839,25845,25848,25854],[10,25833,25835],{"id":25834},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25837,25838],{},"项目地址：",[19,25840,25841],{},[30,25842,25843],{"href":25843,"rel":25844},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[34],[19,25846,25847],{},"参考教程：",[19,25849,25850],{},[30,25851,25852],{"href":25852,"rel":25853},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[34],[19,25855,25856],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":63,"searchDepth":92,"depth":92,"links":25858},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25829,"description":257},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25865,"title":25866,"body":25867,"description":25871,"extension":258,"meta":25872,"navigation":260,"path":25873,"seo":25874,"stem":25875,"__hash__":25876},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25868,"toc":25869},[],{"title":63,"searchDepth":92,"depth":92,"links":25870},[],"act复现",{"category":23583},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25866,"description":25871},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25878,"title":25879,"body":25880,"description":63,"extension":258,"meta":26182,"navigation":260,"path":26183,"seo":26184,"stem":26185,"__hash__":26186},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25881,"toc":26174},[25882,25885,25889,25899,25906,25913,25916,25923,25926,25929,25933,25945,25949,25995,25998,26001,26004,26007,26010,26014,26052,26058,26062,26116,26121,26124,26127,26132,26135,26140,26143,26146,26150,26153,26156,26160],[10,25883,25879],{"id":25884},"_1简介",[301,25886,25888],{"id":25887},"_11什么是-docker","1.1什么是 Docker？",[19,25890,25891,25892,25895,25896],{},"Docker 是一个开源的 ",[483,25893,25894],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[483,25897,25898],{},"一次构建，到处运行。",[19,25900,25901,25902,25905],{},"“ ",[483,25903,25904],{},"一次构建，到处运行"," ”也就是说：",[23,25907,25908],{},[26,25909,25910],{},[483,25911,25912],{},"之前：",[19,25914,25915],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[23,25917,25918],{},[26,25919,25920],{},[483,25921,25922],{},"使用docker后：",[19,25924,25925],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25927,25928],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[301,25930,25932],{"id":25931},"_12它是怎么工作的","1.2.它是怎么工作的？",[42,25934,25935,25938],{},[26,25936,25937],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[26,25939,25940,25941,25944],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[483,25942,25943],{},"无论在哪运行都一样稳定"," 。",[301,25946,25948],{"id":25947},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[471,25950,25951,25961],{},[474,25952,25953],{},[477,25954,25955,25958],{},[480,25956,25957],{"align":23941},"概念",[480,25959,25960],{"align":23941},"解释",[518,25962,25963,25971,25979,25987],{},[477,25964,25965,25968],{},[523,25966,25967],{"align":23941},"镜像",[523,25969,25970],{"align":23941},"Image，运行容器的模板，像是一个应用快照",[477,25972,25973,25976],{},[523,25974,25975],{"align":23941},"容器",[523,25977,25978],{"align":23941},"Container，运行中的镜像实例，有自己的文件系统、网络等",[477,25980,25981,25984],{},[523,25982,25983],{"align":23941},"Dockerfile",[523,25985,25986],{"align":23941},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[477,25988,25989,25992],{},[523,25990,25991],{"align":23941},"仓库",[523,25993,25994],{"align":23941},"Registry，存放镜像的地方，比如 Docker Hub",[19,25996,25997],{},"抽象化理解:",[19,25999,26000],{},"Docker镜像≈C++类",[19,26002,26003],{},"Docker容器≈C++类实例(即对象)",[19,26005,26006],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26008,26009],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[301,26011,26013],{"id":26012},"_14类比理解","1.4.类比理解",[471,26015,26016,26026],{},[474,26017,26018],{},[477,26019,26020,26023],{},[480,26021,26022],{"align":23941},"传统部署",[480,26024,26025],{"align":23941},"Docker部署",[518,26027,26028,26036,26044],{},[477,26029,26030,26033],{},[523,26031,26032],{"align":23941},"手动安装依赖、调试版本不一致问题",[523,26034,26035],{"align":23941},"一次打包环境和代码",[477,26037,26038,26041],{},[523,26039,26040],{"align":23941},"程序“裸奔”跑在系统上",[523,26042,26043],{"align":23941},"程序“穿着容器”隔离运行",[477,26045,26046,26049],{},[523,26047,26048],{"align":23941},"容易“在我电脑上能跑”",[523,26050,26051],{"align":23941},"保证“无论在哪都能跑”",[19,26053,26054,26055],{},"就像快递包裹： ",[483,26056,26057],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[301,26059,26061],{"id":26060},"_15docker-的核心优势","1.5.Docker 的核心优势",[471,26063,26064,26074],{},[474,26065,26066],{},[477,26067,26068,26071],{},[480,26069,26070],{"align":23941},"优势",[480,26072,26073],{"align":23941},"说明",[518,26075,26076,26084,26092,26100,26108],{},[477,26077,26078,26081],{},[523,26079,26080],{"align":23941},"轻量级",[523,26082,26083],{"align":23941},"基于系统内核共享，启动速度快，占资源少",[477,26085,26086,26089],{},[523,26087,26088],{"align":23941},"跨平台",[523,26090,26091],{"align":23941},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[477,26093,26094,26097],{},[523,26095,26096],{"align":23941},"易于迁移部署",[523,26098,26099],{"align":23941},"应用和环境一起封装，不怕依赖不一致",[477,26101,26102,26105],{},[523,26103,26104],{"align":23941},"易于版本控制",[523,26106,26107],{"align":23941},"镜像版本可控，支持回滚",[477,26109,26110,26113],{},[523,26111,26112],{"align":23941},"生态丰富",[523,26114,26115],{"align":23941},"Docker Hub 上有成千上万的现成镜像可用",[23,26117,26118],{},[26,26119,26120],{},"在Linux上可以几乎实现无性能损失。",[19,26122,26123],{},"docker里的发行版和本机共用Linux内核。",[19,26125,26126],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[23,26128,26129],{},[26,26130,26131],{},"可以快速部署在绝大多数Linux发行版",[19,26133,26134],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[23,26136,26137],{},[26,26138,26139],{},"配置环境简单",[19,26141,26142],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26144,26145],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[23,26147,26148],{},[26,26149,26112],{},[19,26151,26152],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26154,26155],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[301,26157,26159],{"id":26158},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[42,26161,26162,26165,26168,26171],{},[26,26163,26164],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[26,26166,26167],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[26,26169,26170],{},"微服务架构：每个服务一个容器，灵活组合",[26,26172,26173],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":63,"searchDepth":92,"depth":92,"links":26175},[26176,26177,26178,26179,26180,26181],{"id":25887,"depth":1387,"text":25888},{"id":25931,"depth":1387,"text":25932},{"id":25947,"depth":1387,"text":25948},{"id":26012,"depth":1387,"text":26013},{"id":26060,"depth":1387,"text":26061},{"id":26158,"depth":1387,"text":26159},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25879,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26188,"title":26189,"body":26190,"description":63,"extension":258,"meta":26923,"navigation":260,"path":26924,"seo":26925,"stem":26926,"__hash__":26927},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26191,"toc":26918},[26192,26195,26199,26202,26205,26211,26217,26221,26230,26233,26290,26293,26344,26347,26430,26433,26470,26474,26485,26498,26505,26508,26588,26591,26641,26644,26667,26671,26678,26681,26697,26703,26706,26722,26728,26731,26747,26761,26767,26787,26793,26796,26808,26814,26817,26831,26837,26840,26860,26865,26868,26871,26875,26878,26881,26884,26891,26894,26897,26900,26905,26910,26915],[10,26193,26189],{"id":26194},"_2安装docker",[301,26196,26198],{"id":26197},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26200,26201],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26203,26204],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26206,26207],{},[30,26208,26209],{"href":26209,"rel":26210},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[34],[19,26212,26213],{},[30,26214,26215],{"href":26215,"rel":26216},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[34],[22203,26218,26220],{"id":26219},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26222,26223,26224,26229],{},"以下内容根据 ",[30,26225,26228],{"href":26226,"rel":26227},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[34],"官方文档"," 修改而来。",[19,26231,26232],{},"如果你过去安装过 docker，先删掉：",[58,26234,26236],{"className":24027,"code":26235,"language":24029,"meta":63,"style":63},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[65,26237,26238],{"__ignoreMap":63},[68,26239,26240,26242,26245,26248,26251,26254,26257,26260,26263,26266,26269,26272,26275,26278,26281,26284,26287],{"class":70,"line":71},[68,26241,3231],{"class":331},[68,26243,26244],{"class":335}," pkg ",[68,26246,26247],{"class":331},"in",[68,26249,26250],{"class":78}," docker.io",[68,26252,26253],{"class":78}," docker-doc",[68,26255,26256],{"class":78}," docker-compose",[68,26258,26259],{"class":78}," docker-compose-v2",[68,26261,26262],{"class":78}," podman-docker",[68,26264,26265],{"class":78}," containerd",[68,26267,26268],{"class":78}," runc",[68,26270,26271],{"class":335},"; ",[68,26273,26274],{"class":331},"do",[68,26276,26277],{"class":74}," sudo",[68,26279,26280],{"class":78}," apt-get",[68,26282,26283],{"class":78}," remove",[68,26285,26286],{"class":335}," $pkg; ",[68,26288,26289],{"class":331},"done\n",[19,26291,26292],{},"首先安装依赖和GPG：",[58,26294,26298],{"className":26295,"code":26296,"language":26297,"meta":63,"style":63},"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",[65,26299,26300,26305,26310,26315,26320,26325,26330,26334,26339],{"__ignoreMap":63},[68,26301,26302],{"class":70,"line":71},[68,26303,26304],{},"# Add Docker's official GPG key:\n",[68,26306,26307],{"class":70,"line":92},[68,26308,26309],{},"sudo apt-get update\n",[68,26311,26312],{"class":70,"line":1387},[68,26313,26314],{},"sudo apt-get install ca-certificates curl\n",[68,26316,26317],{"class":70,"line":1402},[68,26318,26319],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[68,26321,26322],{"class":70,"line":1408},[68,26323,26324],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[68,26326,26327],{"class":70,"line":1422},[68,26328,26329],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[68,26331,26332],{"class":70,"line":1428},[68,26333,2606],{"emptyLinePlaceholder":260},[68,26335,26336],{"class":70,"line":1519},[68,26337,26338],{},"# 如果上面这行报错就弄下面这行\n",[68,26340,26341],{"class":70,"line":1525},[68,26342,26343],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26345,26346],{},"信任 Docker 的 GPG 公钥并添加仓库：",[58,26348,26350],{"className":24027,"code":26349,"language":24029,"meta":63,"style":63},"# 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",[65,26351,26352,26357,26363,26380,26413],{"__ignoreMap":63},[68,26353,26354],{"class":70,"line":71},[68,26355,26356],{"class":393},"# Add the repository to Apt sources:\n",[68,26358,26359,26361],{"class":70,"line":92},[68,26360,25329],{"class":82},[68,26362,24882],{"class":82},[68,26364,26365,26368,26371,26374,26377],{"class":70,"line":1387},[68,26366,26367],{"class":78},"  \"deb [arch=$(",[68,26369,26370],{"class":74},"dpkg",[68,26372,26373],{"class":82}," --print-architecture",[68,26375,26376],{"class":78},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[68,26378,26379],{"class":82},"\\\n",[68,26381,26382,26385,26387,26389,26392,26395,26397,26399,26402,26404,26406,26409,26411],{"class":70,"line":1402},[68,26383,26384],{"class":78},"  \"",[68,26386,25303],{"class":335},[68,26388,891],{"class":82},[68,26390,26391],{"class":78}," \u002Fetc\u002Fos-release",[68,26393,26394],{"class":335}," && ",[68,26396,25329],{"class":82},[68,26398,9929],{"class":78},[68,26400,26401],{"class":335},"$VERSION_CODENAME",[68,26403,584],{"class":78},[68,26405,762],{"class":335},[68,26407,26408],{"class":78},"\" stable\"",[68,26410,25313],{"class":331},[68,26412,24882],{"class":82},[68,26414,26415,26418,26421,26424,26427],{"class":70,"line":1408},[68,26416,26417],{"class":74},"  sudo",[68,26419,26420],{"class":78}," tee",[68,26422,26423],{"class":78}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[68,26425,26426],{"class":331}," >",[68,26428,26429],{"class":78}," \u002Fdev\u002Fnull\n",[19,26431,26432],{},"最后安装",[58,26434,26436],{"className":24027,"code":26435,"language":24029,"meta":63,"style":63},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[65,26437,26438,26447],{"__ignoreMap":63},[68,26439,26440,26442,26444],{"class":70,"line":71},[68,26441,24780],{"class":74},[68,26443,26280],{"class":78},[68,26445,26446],{"class":78}," update\n",[68,26448,26449,26451,26453,26455,26458,26461,26464,26467],{"class":70,"line":92},[68,26450,24780],{"class":74},[68,26452,26280],{"class":78},[68,26454,24039],{"class":78},[68,26456,26457],{"class":78}," docker-ce",[68,26459,26460],{"class":78}," docker-ce-cli",[68,26462,26463],{"class":78}," containerd.io",[68,26465,26466],{"class":78}," docker-buildx-plugin",[68,26468,26469],{"class":78}," docker-compose-plugin\n",[22203,26471,26473],{"id":26472},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26475,26476,26477,26480,26481,26484],{},"查看自己自己包管理工具版本（dnf是 ",[483,26478,26479],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[483,26482,26483],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[58,26486,26488],{"className":24027,"code":26487,"language":24029,"meta":63,"style":63},"dnf --version\n",[65,26489,26490],{"__ignoreMap":63},[68,26491,26492,26495],{"class":70,"line":71},[68,26493,26494],{"class":74},"dnf",[68,26496,26497],{"class":82}," --version\n",[19,26499,26223,26500,26504],{},[30,26501,26228],{"href":26502,"rel":26503},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[34]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26506,26507],{},"如果你之前安装过 docker，请先删掉",[58,26509,26511],{"className":24027,"code":26510,"language":24029,"meta":63,"style":63},"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",[65,26512,26513,26527,26534,26541,26548,26555,26562,26569,26576,26583],{"__ignoreMap":63},[68,26514,26515,26517,26520,26522,26525],{"class":70,"line":71},[68,26516,24780],{"class":74},[68,26518,26519],{"class":78}," dnf",[68,26521,26283],{"class":78},[68,26523,26524],{"class":78}," docker",[68,26526,24882],{"class":82},[68,26528,26529,26532],{"class":70,"line":92},[68,26530,26531],{"class":78},"                  docker-client",[68,26533,24882],{"class":82},[68,26535,26536,26539],{"class":70,"line":1387},[68,26537,26538],{"class":78},"                  docker-client-latest",[68,26540,24882],{"class":82},[68,26542,26543,26546],{"class":70,"line":1402},[68,26544,26545],{"class":78},"                  docker-common",[68,26547,24882],{"class":82},[68,26549,26550,26553],{"class":70,"line":1408},[68,26551,26552],{"class":78},"                  docker-latest",[68,26554,24882],{"class":82},[68,26556,26557,26560],{"class":70,"line":1422},[68,26558,26559],{"class":78},"                  docker-latest-logrotate",[68,26561,24882],{"class":82},[68,26563,26564,26567],{"class":70,"line":1428},[68,26565,26566],{"class":78},"                  docker-logrotate",[68,26568,24882],{"class":82},[68,26570,26571,26574],{"class":70,"line":1519},[68,26572,26573],{"class":78},"                  docker-selinux",[68,26575,24882],{"class":82},[68,26577,26578,26581],{"class":70,"line":1525},[68,26579,26580],{"class":78},"                  docker-engine-selinux",[68,26582,24882],{"class":82},[68,26584,26585],{"class":70,"line":1537},[68,26586,26587],{"class":78},"                  docker-engine\n",[19,26589,26590],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[58,26592,26594],{"className":24027,"code":26593,"language":24029,"meta":63,"style":63},"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",[65,26595,26596,26610,26625],{"__ignoreMap":63},[68,26597,26598,26600,26602,26605,26607],{"class":70,"line":71},[68,26599,24780],{"class":74},[68,26601,26519],{"class":78},[68,26603,26604],{"class":82}," -y",[68,26606,24039],{"class":78},[68,26608,26609],{"class":78}," dnf-plugins-core\n",[68,26611,26612,26614,26616,26619,26622],{"class":70,"line":92},[68,26613,24780],{"class":74},[68,26615,26519],{"class":78},[68,26617,26618],{"class":78}," config-manager",[68,26620,26621],{"class":78}," addrepo",[68,26623,26624],{"class":82}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[68,26626,26627,26629,26632,26635,26638],{"class":70,"line":1387},[68,26628,24780],{"class":74},[68,26630,26631],{"class":78}," sed",[68,26633,26634],{"class":82}," -i",[68,26636,26637],{"class":78}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[68,26639,26640],{"class":78}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26642,26643],{},"最后安装：",[58,26645,26647],{"className":24027,"code":26646,"language":24029,"meta":63,"style":63},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[65,26648,26649],{"__ignoreMap":63},[68,26650,26651,26653,26655,26657,26659,26661,26663,26665],{"class":70,"line":71},[68,26652,24780],{"class":74},[68,26654,26519],{"class":78},[68,26656,24039],{"class":78},[68,26658,26457],{"class":78},[68,26660,26460],{"class":78},[68,26662,26463],{"class":78},[68,26664,26466],{"class":78},[68,26666,26469],{"class":78},[301,26668,26670],{"id":26669},"_22配置环境","2.2.配置环境",[22203,26672,26674,26677],{"id":26673},"_221检查-docker-服务状态",[483,26675,26676],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26679,26680],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[58,26682,26684],{"className":24027,"code":26683,"language":24029,"meta":63,"style":63},"systemctl status docker\n",[65,26685,26686],{"__ignoreMap":63},[68,26687,26688,26691,26694],{"class":70,"line":71},[68,26689,26690],{"class":74},"systemctl",[68,26692,26693],{"class":78}," status",[68,26695,26696],{"class":78}," docker\n",[22203,26698,26700,26677],{"id":26699},"_222启动-docker-服务",[483,26701,26702],{},"2.2.2.启动 Docker 服务",[19,26704,26705],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[58,26707,26709],{"className":24027,"code":26708,"language":24029,"meta":63,"style":63},"sudo systemctl start docker\n",[65,26710,26711],{"__ignoreMap":63},[68,26712,26713,26715,26718,26720],{"class":70,"line":71},[68,26714,24780],{"class":74},[68,26716,26717],{"class":78}," systemctl",[68,26719,4390],{"class":78},[68,26721,26696],{"class":78},[22203,26723,26725,26677],{"id":26724},"_223设置-docker-开机自启",[483,26726,26727],{},"2.2.3.设置 Docker 开机自启",[19,26729,26730],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[58,26732,26734],{"className":24027,"code":26733,"language":24029,"meta":63,"style":63},"sudo systemctl enable docker\n",[65,26735,26736],{"__ignoreMap":63},[68,26737,26738,26740,26742,26745],{"class":70,"line":71},[68,26739,24780],{"class":74},[68,26741,26717],{"class":78},[68,26743,26744],{"class":78}," enable",[68,26746,26696],{"class":78},[22203,26748,26750,14000,26753,14000,26758,26677],{"id":26749},"_224将用户添加到-docker-组",[483,26751,26752],{},"2.2.4.将用户添加到",[483,26754,26755],{},[65,26756,26757],{},"docker",[483,26759,26760],{},"组",[19,26762,26763,26764,26766],{},"使用以下命令将当前用户添加到 ",[65,26765,26757],{}," 组：",[58,26768,26770],{"className":24027,"code":26769,"language":24029,"meta":63,"style":63},"sudo usermod -aG docker $USER\n",[65,26771,26772],{"__ignoreMap":63},[68,26773,26774,26776,26779,26782,26784],{"class":70,"line":71},[68,26775,24780],{"class":74},[68,26777,26778],{"class":78}," usermod",[68,26780,26781],{"class":82}," -aG",[68,26783,26524],{"class":78},[68,26785,26786],{"class":335}," $USER\n",[22203,26788,26790,26677],{"id":26789},"_225退出并重新登录",[483,26791,26792],{},"2.2.5.退出并重新登录",[19,26794,26795],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[58,26797,26799],{"className":24027,"code":26798,"language":24029,"meta":63,"style":63},"newgrp docker\n",[65,26800,26801],{"__ignoreMap":63},[68,26802,26803,26806],{"class":70,"line":71},[68,26804,26805],{"class":74},"newgrp",[68,26807,26696],{"class":78},[22203,26809,26811,26677],{"id":26810},"_226重新启动-docker-服务如果需要",[483,26812,26813],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26815,26816],{},"确保 Docker 服务正在运行，可以使用以下命令：",[58,26818,26819],{"className":24027,"code":26708,"language":24029,"meta":63,"style":63},[65,26820,26821],{"__ignoreMap":63},[68,26822,26823,26825,26827,26829],{"class":70,"line":71},[68,26824,24780],{"class":74},[68,26826,26717],{"class":78},[68,26828,4390],{"class":78},[68,26830,26696],{"class":78},[22203,26832,26834,26677],{"id":26833},"_227重启电脑后检查-docker-服务状态",[483,26835,26836],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26838,26839],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[58,26841,26843],{"className":24027,"code":26842,"language":24029,"meta":63,"style":63},"sudo reboot\nsystemctl status docker\n",[65,26844,26845,26852],{"__ignoreMap":63},[68,26846,26847,26849],{"class":70,"line":71},[68,26848,24780],{"class":74},[68,26850,26851],{"class":78}," reboot\n",[68,26853,26854,26856,26858],{"class":70,"line":92},[68,26855,26690],{"class":74},[68,26857,26693],{"class":78},[68,26859,26696],{"class":78},[19,26861,26862],{},[48,26863],{"alt":63,"src":26864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26866,26867],{},"第三行显示enabled说明开机自启动成功",[19,26869,26870],{},"按q退出",[301,26872,26874],{"id":26873},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26876,26877],{},"优先使用linux来使用docker是比较好的",[19,26879,26880],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26882,26883],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26885,26886,26887],{},"官方下载安装:",[30,26888,26889],{"href":26889,"rel":26890},"https:\u002F\u002Fwww.docker.com\u002F",[34],[19,26892,26893],{},"Windows的Docker显卡直通与USB直通:",[19,26895,26896],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26898,26899],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26901,26902],{},[48,26903],{"alt":63,"src":26904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26906,26907],{},[48,26908],{"alt":63,"src":26909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26911,26912],{},[48,26913],{"alt":63,"src":26914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[250,26916,26917],{},"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":63,"searchDepth":92,"depth":92,"links":26919},[26920,26921,26922],{"id":26197,"depth":1387,"text":26198},{"id":26669,"depth":1387,"text":26670},{"id":26873,"depth":1387,"text":26874},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26189,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26929,"title":26930,"body":26931,"description":26938,"extension":258,"meta":27631,"navigation":260,"path":27632,"seo":27633,"stem":27634,"__hash__":27635},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26932,"toc":27625},[26933,26936,26939,26943,26948,26953,26956,26984,26989,26998,27001,27006,27010,27017,27022,27028,27032,27035,27039,27044,27136,27141,27159,27164,27185,27190,27206,27210,27215,27244,27249,27295,27300,27344,27352,27369,27374,27390,27395,27409,27412,27415,27418,27421,27450,27453,27458,27462,27465,27468,27474,27477,27480,27483,27545,27552,27557,27560,27578,27582,27585,27602,27605,27608,27622],[10,26934,26930],{"id":26935},"_3docker直通",[19,26937,26938],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[301,26940,26942],{"id":26941},"_31usb直通","3.1.USB直通",[19,26944,26945],{},[48,26946],{"alt":63,"src":26947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[23,26949,26950],{},[26,26951,26952],{},"方法一(不是很推荐新手)：",[19,26954,26955],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[58,26957,26959],{"className":24027,"code":26958,"language":24029,"meta":63,"style":63},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[65,26960,26961,26969,26974],{"__ignoreMap":63},[68,26962,26963,26966],{"class":70,"line":71},[68,26964,26965],{"class":74},"ls",[68,26967,26968],{"class":78}," \u002Fdev\n",[68,26970,26971],{"class":70,"line":92},[68,26972,26973],{"class":393},"#例如\n",[68,26975,26976,26979,26981],{"class":70,"line":1387},[68,26977,26978],{"class":335},"--device",[68,26980,381],{"class":331},[68,26982,26983],{"class":78},"\u002Fdev\u002Ftty_USB0\n",[23,26985,26986],{"start":92},[26,26987,26988],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[58,26990,26992],{"className":24027,"code":26991,"language":24029,"meta":63,"style":63},"--privileged\n",[65,26993,26994],{"__ignoreMap":63},[68,26995,26996],{"class":70,"line":71},[68,26997,26991],{"class":74},[19,26999,27000],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27002,27003],{},[48,27004],{"alt":63,"src":27005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[301,27007,27009],{"id":27008},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27011,27012,27013,27016],{},"NVIDIA Container Toolkit使用户 ",[483,27014,27015],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27018,27019],{},[48,27020],{"alt":63,"src":27021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27023,27024],{},[30,27025,27026],{"href":27026,"rel":27027},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[34],[22203,27029,27031],{"id":27030},"_321安装","3.2.1.安装",[19,27033,27034],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23115,27036,27038],{"id":27037},"_3211ubuntu","3.2.1.1.Ubuntu",[23,27040,27041],{},[26,27042,27043],{},"配置存储库 并更新",[58,27045,27047],{"className":24027,"code":27046,"language":24029,"meta":63,"style":63},"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",[65,27048,27049,27078,27098,27110,27122,27128],{"__ignoreMap":63},[68,27050,27051,27054,27057,27060,27062,27064,27067,27070,27073,27076],{"class":70,"line":71},[68,27052,27053],{"class":74},"curl",[68,27055,27056],{"class":82}," -fsSL",[68,27058,27059],{"class":78}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[68,27061,25313],{"class":331},[68,27063,26277],{"class":74},[68,27065,27066],{"class":78}," gpg",[68,27068,27069],{"class":82}," --dearmor",[68,27071,27072],{"class":82}," -o",[68,27074,27075],{"class":78}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[68,27077,24882],{"class":82},[68,27079,27080,27083,27085,27088,27091,27094,27096],{"class":70,"line":92},[68,27081,27082],{"class":335},"  && ",[68,27084,27053],{"class":74},[68,27086,27087],{"class":82}," -s",[68,27089,27090],{"class":82}," -L",[68,27092,27093],{"class":78}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[68,27095,25313],{"class":331},[68,27097,24882],{"class":82},[68,27099,27100,27103,27106,27108],{"class":70,"line":1387},[68,27101,27102],{"class":74},"    sed",[68,27104,27105],{"class":78}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[68,27107,25313],{"class":331},[68,27109,24882],{"class":82},[68,27111,27112,27115,27117,27120],{"class":70,"line":1402},[68,27113,27114],{"class":74},"    sudo",[68,27116,26420],{"class":78},[68,27118,27119],{"class":78}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[68,27121,24882],{"class":82},[68,27123,27124,27126],{"class":70,"line":1408},[68,27125,27082],{"class":335},[68,27127,26379],{"class":82},[68,27129,27130,27132,27134],{"class":70,"line":1422},[68,27131,27114],{"class":74},[68,27133,26280],{"class":78},[68,27135,26446],{"class":78},[23,27137,27138],{"start":92},[26,27139,27140],{},"安装nvidia-docker2",[58,27142,27144],{"className":24027,"code":27143,"language":24029,"meta":63,"style":63},"sudo apt-get install -y nvidia-docker2\n",[65,27145,27146],{"__ignoreMap":63},[68,27147,27148,27150,27152,27154,27156],{"class":70,"line":71},[68,27149,24780],{"class":74},[68,27151,26280],{"class":78},[68,27153,24039],{"class":78},[68,27155,26604],{"class":82},[68,27157,27158],{"class":78}," nvidia-docker2\n",[23,27160,27161],{"start":1387},[26,27162,27163],{},"使用nvidia-ctk命令配置container runtime",[58,27165,27167],{"className":24027,"code":27166,"language":24029,"meta":63,"style":63},"sudo nvidia-ctk runtime configure --runtime=docker\n",[65,27168,27169],{"__ignoreMap":63},[68,27170,27171,27173,27176,27179,27182],{"class":70,"line":71},[68,27172,24780],{"class":74},[68,27174,27175],{"class":78}," nvidia-ctk",[68,27177,27178],{"class":78}," runtime",[68,27180,27181],{"class":78}," configure",[68,27183,27184],{"class":82}," --runtime=docker\n",[23,27186,27187],{"start":1402},[26,27188,27189],{},"重启docker服务:",[58,27191,27193],{"className":24027,"code":27192,"language":24029,"meta":63,"style":63},"sudo systemctl restart docker\n",[65,27194,27195],{"__ignoreMap":63},[68,27196,27197,27199,27201,27204],{"class":70,"line":71},[68,27198,24780],{"class":74},[68,27200,26717],{"class":78},[68,27202,27203],{"class":78}," restart",[68,27205,26696],{"class":78},[23115,27207,27209],{"id":27208},"_3212fedora","3.2.1.2.Fedora",[23,27211,27212],{},[26,27213,27214],{},"配置存储库",[58,27216,27218],{"className":24027,"code":27217,"language":24029,"meta":63,"style":63},"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",[65,27219,27220,27235],{"__ignoreMap":63},[68,27221,27222,27224,27226,27228,27231,27233],{"class":70,"line":71},[68,27223,27053],{"class":74},[68,27225,27087],{"class":82},[68,27227,27090],{"class":82},[68,27229,27230],{"class":78}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[68,27232,25313],{"class":331},[68,27234,24882],{"class":82},[68,27236,27237,27239,27241],{"class":70,"line":92},[68,27238,24780],{"class":74},[68,27240,26420],{"class":78},[68,27242,27243],{"class":78}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[23,27245,27246],{"start":92},[26,27247,27248],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[58,27250,27252],{"className":24027,"code":27251,"language":24029,"meta":63,"style":63},"# 如果是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",[65,27253,27254,27259,27273,27277,27282],{"__ignoreMap":63},[68,27255,27256],{"class":70,"line":71},[68,27257,27258],{"class":393},"# 如果是RHEL或者Rocky（DNF4）\n",[68,27260,27261,27263,27265,27267,27270],{"class":70,"line":92},[68,27262,24780],{"class":74},[68,27264,26519],{"class":78},[68,27266,26618],{"class":78},[68,27268,27269],{"class":82}," --add-repo",[68,27271,27272],{"class":78}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[68,27274,27275],{"class":70,"line":1387},[68,27276,2606],{"emptyLinePlaceholder":260},[68,27278,27279],{"class":70,"line":1402},[68,27280,27281],{"class":393},"# 如果是Feodra41+（DNF5）\n",[68,27283,27284,27286,27288,27290,27292],{"class":70,"line":1408},[68,27285,24780],{"class":74},[68,27287,26519],{"class":78},[68,27289,26618],{"class":78},[68,27291,26621],{"class":78},[68,27293,27294],{"class":82}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[23,27296,27297],{"start":1387},[26,27298,27299],{},"安装NVIDIA Container Toolki包",[58,27301,27303],{"className":24027,"code":27302,"language":24029,"meta":63,"style":63},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[65,27304,27305,27310,27323,27327,27332],{"__ignoreMap":63},[68,27306,27307],{"class":70,"line":71},[68,27308,27309],{"class":393},"# 如果是RHEL或者Rocky\n",[68,27311,27312,27314,27316,27318,27320],{"class":70,"line":92},[68,27313,24780],{"class":74},[68,27315,26519],{"class":78},[68,27317,24039],{"class":78},[68,27319,26604],{"class":82},[68,27321,27322],{"class":78}," nvidia-container-toolkit\n",[68,27324,27325],{"class":70,"line":1387},[68,27326,2606],{"emptyLinePlaceholder":260},[68,27328,27329],{"class":70,"line":1402},[68,27330,27331],{"class":393},"# 如果是Fedora\n",[68,27333,27334,27336,27338,27340,27342],{"class":70,"line":1408},[68,27335,24780],{"class":74},[68,27337,26519],{"class":78},[68,27339,24039],{"class":78},[68,27341,26604],{"class":82},[68,27343,27322],{"class":78},[23,27345,27346],{"start":1402},[26,27347,27348,27349,27351],{},"安装nvidia-docker2 ： 在Fedora上使用",[65,27350,26494],{},"进行安装",[58,27353,27355],{"className":24027,"code":27354,"language":24029,"meta":63,"style":63},"sudo dnf install -y nvidia-docker2\n",[65,27356,27357],{"__ignoreMap":63},[68,27358,27359,27361,27363,27365,27367],{"class":70,"line":71},[68,27360,24780],{"class":74},[68,27362,26519],{"class":78},[68,27364,24039],{"class":78},[68,27366,26604],{"class":82},[68,27368,27158],{"class":78},[23,27370,27371],{"start":1408},[26,27372,27373],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[58,27375,27376],{"className":24027,"code":27166,"language":24029,"meta":63,"style":63},[65,27377,27378],{"__ignoreMap":63},[68,27379,27380,27382,27384,27386,27388],{"class":70,"line":71},[68,27381,24780],{"class":74},[68,27383,27175],{"class":78},[68,27385,27178],{"class":78},[68,27387,27181],{"class":78},[68,27389,27184],{"class":82},[23,27391,27392],{"start":1422},[26,27393,27394],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[58,27396,27397],{"className":24027,"code":27192,"language":24029,"meta":63,"style":63},[65,27398,27399],{"__ignoreMap":63},[68,27400,27401,27403,27405,27407],{"class":70,"line":71},[68,27402,24780],{"class":74},[68,27404,26717],{"class":78},[68,27406,27203],{"class":78},[68,27408,26696],{"class":78},[19,27410,27411],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27413,27414],{},"方法：",[19,27416,27417],{},"1️⃣nvidia-smi",[19,27419,27420],{},"2️⃣运行nvidia cuda 容器进行测试",[58,27422,27424],{"className":24027,"code":27423,"language":24029,"meta":63,"style":63},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[65,27425,27426],{"__ignoreMap":63},[68,27427,27428,27430,27432,27435,27438,27441,27444,27447],{"class":70,"line":71},[68,27429,24780],{"class":74},[68,27431,26524],{"class":78},[68,27433,27434],{"class":78}," run",[68,27436,27437],{"class":82}," --rm",[68,27439,27440],{"class":82}," --gpus",[68,27442,27443],{"class":78}," all",[68,27445,27446],{"class":78}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[68,27448,27449],{"class":78}," nvidia-smi\n",[19,27451,27452],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27454,27455],{},[48,27456],{"alt":63,"src":27457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[301,27459,27461],{"id":27460},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27463,27464],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27466,27467],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27469,27470],{},[30,27471,27472],{"href":27472,"rel":27473},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[34],[19,27475,27476],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27478,27479],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27481,27482],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[471,27484,27485,27501],{},[474,27486,27487],{},[477,27488,27489,27492,27495,27498],{},[480,27490,27491],{"align":23941},"镜像类型",[480,27493,27494],{"align":23941},"适用场景",[480,27496,27497],{"align":23941},"示例标签",[480,27499,27500],{"align":23941},"大小",[518,27502,27503,27517,27531],{},[477,27504,27505,27508,27511,27514],{},[523,27506,27507],{"align":23941},"base",[523,27509,27510],{"align":23941},"仅需 CUDA 运行时库",[523,27512,27513],{"align":23941},"12.4.0-base-ubuntu22.04",[523,27515,27516],{"align":23941},"~240MB",[477,27518,27519,27522,27525,27528],{},[523,27520,27521],{"align":23941},"runtime",[523,27523,27524],{"align":23941},"部署编译后的应用（含数学库）",[523,27526,27527],{"align":23941},"12.4.0-runtime-ubuntu22.04",[523,27529,27530],{"align":23941},"~2GB",[477,27532,27533,27536,27539,27542],{},[523,27534,27535],{"align":23941},"devel",[523,27537,27538],{"align":23941},"开发环境（含编译工具）",[523,27540,27541],{"align":23941},"12.4.0-devel-ubuntu22.04",[523,27543,27544],{"align":23941},"~3GB",[19,27546,27547,27548,27551],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[65,27549,27550],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27553,27554],{},[48,27555],{"alt":63,"src":27556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27558,27559],{},"在dockerfile里就可以开头这么写：",[58,27561,27563],{"className":24027,"code":27562,"language":24029,"meta":63,"style":63},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[65,27564,27565,27570],{"__ignoreMap":63},[68,27566,27567],{"class":70,"line":71},[68,27568,27569],{"class":393},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[68,27571,27572,27575],{"class":70,"line":92},[68,27573,27574],{"class":74},"FROM",[68,27576,27577],{"class":78}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[301,27579,27581],{"id":27580},"_34配置以太网","3.4.配置以太网",[19,27583,27584],{},"指定网络模式",[58,27586,27588],{"className":24027,"code":27587,"language":24029,"meta":63,"style":63},"--net=host \\\n",[65,27589,27590],{"__ignoreMap":63},[68,27591,27592,27595,27597,27600],{"class":70,"line":71},[68,27593,27594],{"class":335},"--net",[68,27596,381],{"class":331},[68,27598,27599],{"class":78},"host",[68,27601,24882],{"class":74},[19,27603,27604],{},"启动参数里加上这行即可。具体在下方",[19,27606,27607],{},"--net选项：指定网络模式，该选项有以下参数可选：",[42,27609,27610,27613,27616,27619],{},[26,27611,27612],{},"--net=bridge:默认选项，表示连接到默认的网桥",[26,27614,27615],{},"--net=host:容器使用宿主机的网络",[26,27617,27618],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[26,27620,27621],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[250,27623,27624],{},"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":63,"searchDepth":92,"depth":92,"links":27626},[27627,27628,27629,27630],{"id":26941,"depth":1387,"text":26942},{"id":27008,"depth":1387,"text":27009},{"id":27460,"depth":1387,"text":27461},{"id":27580,"depth":1387,"text":27581},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26930,"description":26938},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27637,"title":27638,"body":27639,"description":27646,"extension":258,"meta":27652,"navigation":260,"path":27653,"seo":27654,"stem":27655,"__hash__":27656},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27640,"toc":27650},[27641,27644,27647],[10,27642,27638],{"id":27643},"_4dockerhub换源",[19,27645,27646],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27648,27649],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":63,"searchDepth":92,"depth":92,"links":27651},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27638,"description":27646},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27658,"title":27659,"body":27660,"description":63,"extension":258,"meta":28671,"navigation":260,"path":28672,"seo":28673,"stem":28674,"__hash__":28675},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27661,"toc":28666},[27662,27665,27669,27675,27679,27682,28022,28025,28028,28031,28036,28041,28044,28047,28050,28053,28072,28075,28086,28092,28274,28284,28300,28562,28564,28589,28604,28613,28663],[10,27663,27659],{"id":27664},"_5docker命令学习",[301,27666,27668],{"id":27667},"_51参考文档","5.1.参考文档",[19,27670,27671],{},[30,27672,27673],{"href":27673,"rel":27674},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[34],[301,27676,27678],{"id":27677},"_52常用命令","5.2.常用命令",[19,27680,27681],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[471,27683,27684,27697],{},[474,27685,27686],{},[477,27687,27688,27691,27694],{},[480,27689,27690],{"align":23941},"命令",[480,27692,27693],{"align":23941},"描述",[480,27695,27696],{"align":23941},"示例",[518,27698,27699,27710,27721,27732,27743,27754,27765,27776,27786,27797,27808,27819,27829,27840,27851,27862,27872,27882,27892,27902,27913,27924,27935,27946,27957,27968,27978,27989,28000,28011],{},[477,27700,27701,27704,27707],{},[523,27702,27703],{"align":23941},"docker run",[523,27705,27706],{"align":23941},"创建并启动一个新的容器。",[523,27708,27709],{"align":23941},"docker run -it ubuntu bash",[477,27711,27712,27715,27718],{},[523,27713,27714],{"align":23941},"docker build",[523,27716,27717],{"align":23941},"通过指定的 Dockerfile 创建一个新的镜像。",[523,27719,27720],{"align":23941},"docker build -t myimage .",[477,27722,27723,27726,27729],{},[523,27724,27725],{"align":23941},"docker pull",[523,27727,27728],{"align":23941},"从 Docker 仓库拉取镜像。",[523,27730,27731],{"align":23941},"docker pull ubuntu",[477,27733,27734,27737,27740],{},[523,27735,27736],{"align":23941},"docker push",[523,27738,27739],{"align":23941},"将本地镜像推送到 Docker 仓库。",[523,27741,27742],{"align":23941},"docker push myimage",[477,27744,27745,27748,27751],{},[523,27746,27747],{"align":23941},"docker stop",[523,27749,27750],{"align":23941},"停止一个正在运行的容器。",[523,27752,27753],{"align":23941},"docker stop container_id",[477,27755,27756,27759,27762],{},[523,27757,27758],{"align":23941},"docker start",[523,27760,27761],{"align":23941},"启动一个已经存在的容器。",[523,27763,27764],{"align":23941},"docker start container_id",[477,27766,27767,27770,27773],{},[523,27768,27769],{"align":23941},"docker restart",[523,27771,27772],{"align":23941},"重新启动容器。",[523,27774,27775],{"align":23941},"docker restart container_id",[477,27777,27778,27781,27784],{},[523,27779,27780],{"align":23941},"docker ps",[523,27782,27783],{"align":23941},"列出当前正在运行的容器。",[523,27785,27780],{"align":23941},[477,27787,27788,27791,27794],{},[523,27789,27790],{"align":23941},"docker rm",[523,27792,27793],{"align":23941},"删除一个或多个停止的容器。",[523,27795,27796],{"align":23941},"docker rm container_id",[477,27798,27799,27802,27805],{},[523,27800,27801],{"align":23941},"docker exec",[523,27803,27804],{"align":23941},"在一个正在运行的容器中执行命令。",[523,27806,27807],{"align":23941},"docker exec -it container_id bash",[477,27809,27810,27813,27816],{},[523,27811,27812],{"align":23941},"docker logs",[523,27814,27815],{"align":23941},"查看容器的日志输出。",[523,27817,27818],{"align":23941},"docker logs container_id",[477,27820,27821,27824,27827],{},[523,27822,27823],{"align":23941},"docker images",[523,27825,27826],{"align":23941},"列出本地所有镜像。",[523,27828,27823],{"align":23941},[477,27830,27831,27834,27837],{},[523,27832,27833],{"align":23941},"docker rmi",[523,27835,27836],{"align":23941},"删除一个或多个镜像。",[523,27838,27839],{"align":23941},"docker rmi myimage",[477,27841,27842,27845,27848],{},[523,27843,27844],{"align":23941},"docker network",[523,27846,27847],{"align":23941},"管理 Docker 网络。",[523,27849,27850],{"align":23941},"docker network ls",[477,27852,27853,27856,27859],{},[523,27854,27855],{"align":23941},"docker volume",[523,27857,27858],{"align":23941},"管理 Docker 数据卷。",[523,27860,27861],{"align":23941},"docker volume ls",[477,27863,27864,27867,27870],{},[523,27865,27866],{"align":23941},"docker-compose up",[523,27868,27869],{"align":23941},"启动 docker-compose.yml 中定义的所有服务。",[523,27871,27866],{"align":23941},[477,27873,27874,27877,27880],{},[523,27875,27876],{"align":23941},"docker-compose down",[523,27878,27879],{"align":23941},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[523,27881,27876],{"align":23941},[477,27883,27884,27887,27890],{},[523,27885,27886],{"align":23941},"docker info",[523,27888,27889],{"align":23941},"显示 Docker 系统的详细信息。",[523,27891,27886],{"align":23941},[477,27893,27894,27897,27900],{},[523,27895,27896],{"align":23941},"docker stats",[523,27898,27899],{"align":23941},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[523,27901,27896],{"align":23941},[477,27903,27904,27907,27910],{},[523,27905,27906],{"align":23941},"docker inspect",[523,27908,27909],{"align":23941},"查看容器或镜像的详细信息（JSON 格式）。",[523,27911,27912],{"align":23941},"docker inspect container_id",[477,27914,27915,27918,27921],{},[523,27916,27917],{"align":23941},"docker save",[523,27919,27920],{"align":23941},"将一个镜像保存为 tar 文件。",[523,27922,27923],{"align":23941},"docker save -o myimage.tar myimage",[477,27925,27926,27929,27932],{},[523,27927,27928],{"align":23941},"docker load",[523,27930,27931],{"align":23941},"从 tar 文件中加载镜像。",[523,27933,27934],{"align":23941},"docker load -i myimage.tar",[477,27936,27937,27940,27943],{},[523,27938,27939],{"align":23941},"docker tag",[523,27941,27942],{"align":23941},"为镜像添加标签（tag）。",[523,27944,27945],{"align":23941},"docker tag myimage myimage:v1",[477,27947,27948,27951,27954],{},[523,27949,27950],{"align":23941},"docker buildx build",[523,27952,27953],{"align":23941},"使用 Buildx 构建多架构镜像。",[523,27955,27956],{"align":23941},"docker buildx build -t myimage .",[477,27958,27959,27962,27965],{},[523,27960,27961],{"align":23941},"docker buildx create",[523,27963,27964],{"align":23941},"创建一个新的 Buildx 构建实例。",[523,27966,27967],{"align":23941},"docker buildx create –use",[477,27969,27970,27973,27976],{},[523,27971,27972],{"align":23941},"docker buildx ls",[523,27974,27975],{"align":23941},"列出所有可用的 Buildx 构建实例。",[523,27977,27972],{"align":23941},[477,27979,27980,27983,27986],{},[523,27981,27982],{"align":23941},"docker buildx use",[523,27984,27985],{"align":23941},"设置当前的 Buildx 构建实例。",[523,27987,27988],{"align":23941},"docker buildx use mybuilder",[477,27990,27991,27994,27997],{},[523,27992,27993],{"align":23941},"docker buildx bake",[523,27995,27996],{"align":23941},"使用 Bake 文件批量构建镜像。",[523,27998,27999],{"align":23941},"docker buildx bake -f bake.hcl",[477,28001,28002,28005,28008],{},[523,28003,28004],{"align":23941},"docker buildx build –push",[523,28006,28007],{"align":23941},"构建镜像并推送到镜像仓库。",[523,28009,28010],{"align":23941},"docker buildx build –push -t myimage .",[477,28012,28013,28016,28019],{},[523,28014,28015],{"align":23941},"docker buildx build –platform",[523,28017,28018],{"align":23941},"构建镜像并为多个平台生成支持。",[523,28020,28021],{"align":23941},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28023,28024],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28026,28027],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28029,28030],{},"docker images 可以查看已经下载的镜像",[19,28032,28033],{},[48,28034],{"alt":63,"src":28035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28037,28038],{},[483,28039,28040],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28042,28043],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28045,28046],{},"docker container logs 查看容器日志",[19,28048,28049],{},"docker top 查看容器里的进程",[19,28051,28052],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[58,28054,28056],{"className":24027,"code":28055,"language":24029,"meta":63,"style":63},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[65,28057,28058],{"__ignoreMap":63},[68,28059,28060,28063,28066,28069],{"class":70,"line":71},[68,28061,28062],{"class":74},"如：docker",[68,28064,28065],{"class":78}," cp",[68,28067,28068],{"class":78}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[68,28070,28071],{"class":78}," \u002Fmydata\u002Fnginx\n",[19,28073,28074],{},"docker run时在启动容器的时候会有几个常用的选项：",[42,28076,28077,28080,28083],{},[26,28078,28079],{},"-d选项：表示后台运行",[26,28081,28082],{},"-P选项：随机端口映射",[26,28084,28085],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[301,28087,28089],{"id":28088},"_53run命令的参数非常重要",[483,28090,28091],{},"5.3.run命令的参数（非常重要）",[471,28093,28094,28107],{},[474,28095,28096],{},[477,28097,28098,28101,28104],{},[480,28099,28100],{"align":23941},"参数\u002F配置",[480,28102,28103],{"align":23941},"功能说明",[480,28105,28106],{"align":23941},"重要性与参考依据",[518,28108,28109,28120,28131,28142,28153,28164,28175,28186,28197,28208,28219,28230,28241,28252,28263],{},[477,28110,28111,28114,28117],{},[523,28112,28113],{"align":23941},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[523,28115,28116],{"align":23941},"指定容器名称，便于后续管理",[523,28118,28119],{"align":23941},"替代随机生成的容器名。",[477,28121,28122,28125,28128],{},[523,28123,28124],{"align":23941},"–gpus all",[523,28126,28127],{"align":23941},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[523,28129,28130],{"align":23941},"用于CUDA加速等GPU依赖任务。",[477,28132,28133,28136,28139],{},[523,28134,28135],{"align":23941},"-e NVIDIA_DRIVER_CAPABILITIES=all",[523,28137,28138],{"align":23941},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[523,28140,28141],{"align":23941},"确保容器内GPU功能完整67。",[477,28143,28144,28147,28150],{},[523,28145,28146],{"align":23941},"-dit",[523,28148,28149],{"align":23941},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[523,28151,28152],{"align":23941},"允许容器在后台运行并支持交互操作。",[477,28154,28155,28158,28161],{},[523,28156,28157],{"align":23941},"–privileged",[523,28159,28160],{"align":23941},"赋予容器完全主机权限（可访问设备、内核模块等）",[523,28162,28163],{"align":23941},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[477,28165,28166,28169,28172],{},[523,28167,28168],{"align":23941},"–net=host",[523,28170,28171],{"align":23941},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[523,28173,28174],{"align":23941},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[477,28176,28177,28180,28183],{},[523,28178,28179],{"align":23941},"–group-add audio–group-add video–group-add dialout",[523,28181,28182],{"align":23941},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[523,28184,28185],{"align":23941},"避免权限问题（如避免无法调用摄像头、麦克风）。",[477,28187,28188,28191,28194],{},[523,28189,28190],{"align":23941},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[523,28192,28193],{"align":23941},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[523,28195,28196],{"align":23941},"支持容器内运行图形界面应用（如OpenCV可视化）。",[477,28198,28199,28202,28205],{},[523,28200,28201],{"align":23941},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[523,28203,28204],{"align":23941},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[523,28206,28207],{"align":23941},"实现容器内图形显示。",[477,28209,28210,28213,28216],{},[523,28211,28212],{"align":23941},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[523,28214,28215],{"align":23941},"挂载X11认证文件（只读）",[523,28217,28218],{"align":23941},"确保容器有权连接宿主机显示服务。",[477,28220,28221,28224,28227],{},[523,28222,28223],{"align":23941},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[523,28225,28226],{"align":23941},"挂载Wayland显示协议相关目录",[523,28228,28229],{"align":23941},"支持Wayland协议的图形显示。",[477,28231,28232,28235,28238],{},[523,28233,28234],{"align":23941},"–ulimit nofile=1024:524288",[523,28236,28237],{"align":23941},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[523,28239,28240],{"align":23941},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[477,28242,28243,28246,28249],{},[523,28244,28245],{"align":23941},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[523,28247,28248],{"align":23941},"挂载宿主机用户目录到容器内同名路径",[523,28250,28251],{"align":23941},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[477,28253,28254,28257,28260],{},[523,28255,28256],{"align":23941},"-w \u002Fhome\u002Ftungchiahui",[523,28258,28259],{"align":23941},"设置容器启动后的默认工作目录",[523,28261,28262],{"align":23941},"直接进入项目路径，方便执行命令2324。",[477,28264,28265,28268,28271],{},[523,28266,28267],{"align":23941},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[523,28269,28270],{"align":23941},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[523,28272,28273],{"align":23941},"提供预配置的深度学习与机器人开发环境。",[19,28275,28276,28277,28279,28280,28283],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[65,28278,24780],{},"加不加",[65,28281,28282],{},"sudo -E","都无所谓。",[19,28285,28286,28287,28289,28290,28292,28293,28296,28297,28299],{},"用户已经被加到docker组了，不用",[65,28288,24780],{},"也行跑，其次，",[65,28291,24780],{},"运行的话，你的",[65,28294,28295],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[65,28298,28295],{},"更不可能变了。",[58,28301,28303],{"className":24027,"code":28302,"language":24029,"meta":63,"style":63},"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",[65,28304,28305,28318,28328,28338,28350,28357,28364,28371,28381,28390,28399,28413,28425,28437,28446,28456,28465,28480,28512,28539,28550,28557],{"__ignoreMap":63},[68,28306,28307,28309,28311,28313,28316],{"class":70,"line":71},[68,28308,24780],{"class":74},[68,28310,26524],{"class":78},[68,28312,27434],{"class":78},[68,28314,28315],{"class":82}," --name=ros_opencv_cuda",[68,28317,24882],{"class":82},[68,28319,28320,28323,28326],{"class":70,"line":92},[68,28321,28322],{"class":335},"--gpus ",[68,28324,28325],{"class":78},"all",[68,28327,24882],{"class":82},[68,28329,28330,28333,28336],{"class":70,"line":1387},[68,28331,28332],{"class":335},"-e ",[68,28334,28335],{"class":78},"NVIDIA_DRIVER_CAPABILITIES=all",[68,28337,24882],{"class":82},[68,28339,28340,28342,28345,28348],{"class":70,"line":1402},[68,28341,28332],{"class":335},[68,28343,28344],{"class":78},"DISPLAY=",[68,28346,28347],{"class":335},"$DISPLAY ",[68,28349,26379],{"class":82},[68,28351,28352,28355],{"class":70,"line":1408},[68,28353,28354],{"class":335},"-dit ",[68,28356,26379],{"class":82},[68,28358,28359,28362],{"class":70,"line":1422},[68,28360,28361],{"class":335},"--privileged ",[68,28363,26379],{"class":82},[68,28365,28366,28369],{"class":70,"line":1428},[68,28367,28368],{"class":335},"--net=host ",[68,28370,26379],{"class":82},[68,28372,28373,28376,28379],{"class":70,"line":1519},[68,28374,28375],{"class":335},"--group-add ",[68,28377,28378],{"class":78},"audio",[68,28380,24882],{"class":82},[68,28382,28383,28385,28388],{"class":70,"line":1525},[68,28384,28375],{"class":335},[68,28386,28387],{"class":78},"video",[68,28389,24882],{"class":82},[68,28391,28392,28394,28397],{"class":70,"line":1537},[68,28393,28375],{"class":335},[68,28395,28396],{"class":78},"dialout",[68,28398,24882],{"class":82},[68,28400,28401,28403,28406,28408,28411],{"class":70,"line":1819},[68,28402,28332],{"class":335},[68,28404,28405],{"class":78},"XAUTHORITY=",[68,28407,28295],{"class":335},[68,28409,28410],{"class":78},"\u002F.Xauthority",[68,28412,24882],{"class":82},[68,28414,28415,28417,28420,28423],{"class":70,"line":1824},[68,28416,28332],{"class":335},[68,28418,28419],{"class":78},"WAYLAND_DISPLAY=",[68,28421,28422],{"class":335},"$WAYLAND_DISPLAY ",[68,28424,26379],{"class":82},[68,28426,28427,28429,28432,28435],{"class":70,"line":1830},[68,28428,28332],{"class":335},[68,28430,28431],{"class":78},"XDG_RUNTIME_DIR=",[68,28433,28434],{"class":335},"$XDG_RUNTIME_DIR ",[68,28436,26379],{"class":82},[68,28438,28439,28441,28444],{"class":70,"line":1835},[68,28440,28332],{"class":335},[68,28442,28443],{"class":78},"QT_QPA_PLATFORM=xcb",[68,28445,24882],{"class":82},[68,28447,28448,28451,28454],{"class":70,"line":1849},[68,28449,28450],{"class":335},"-v ",[68,28452,28453],{"class":78},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[68,28455,24882],{"class":82},[68,28457,28458,28460,28463],{"class":70,"line":1854},[68,28459,28450],{"class":335},[68,28461,28462],{"class":78},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[68,28464,24882],{"class":82},[68,28466,28467,28470,28473,28475,28478],{"class":70,"line":1860},[68,28468,28469],{"class":335},"-v $HOME",[68,28471,28472],{"class":78},"\u002F.Xauthority:",[68,28474,28295],{"class":335},[68,28476,28477],{"class":78},"\u002F.Xauthority:ro",[68,28479,24882],{"class":82},[68,28481,28482,28484,28487,28489,28492,28494,28496,28499,28501,28503,28505,28507,28510],{"class":70,"line":1881},[68,28483,28450],{"class":335},[68,28485,28486],{"class":78},"\u002Frun\u002Fuser\u002F",[68,28488,25303],{"class":335},[68,28490,28491],{"class":74},"id",[68,28493,209],{"class":82},[68,28495,762],{"class":335},[68,28497,28498],{"class":78},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[68,28500,25303],{"class":335},[68,28502,28491],{"class":74},[68,28504,209],{"class":82},[68,28506,762],{"class":335},[68,28508,28509],{"class":78},"\u002Fwayland-0",[68,28511,24882],{"class":82},[68,28513,28514,28516,28518,28520,28522,28524,28526,28529,28531,28533,28535,28537],{"class":70,"line":1886},[68,28515,28450],{"class":335},[68,28517,28486],{"class":78},[68,28519,25303],{"class":335},[68,28521,28491],{"class":74},[68,28523,209],{"class":82},[68,28525,762],{"class":335},[68,28527,28528],{"class":78},":\u002Frun\u002Fuser\u002F",[68,28530,25303],{"class":335},[68,28532,28491],{"class":74},[68,28534,209],{"class":82},[68,28536,13919],{"class":335},[68,28538,26379],{"class":82},[68,28540,28541,28543,28545,28548],{"class":70,"line":1900},[68,28542,28469],{"class":335},[68,28544,1192],{"class":78},[68,28546,28547],{"class":335},"$HOME ",[68,28549,26379],{"class":82},[68,28551,28552,28555],{"class":70,"line":1905},[68,28553,28554],{"class":335},"-w $HOME ",[68,28556,26379],{"class":82},[68,28558,28559],{"class":70,"line":1934},[68,28560,28561],{"class":335},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28563,9230],{},[23,28565,28566,28574,28577,28580],{},[26,28567,28568,14000,28570,28573],{},[65,28569,28335],{},[65,28571,28572],{},"--gpus all","没有英伟达显卡请注释。",[26,28575,28576],{},"--name后面请自己为容器起名。",[26,28578,28579],{},"最后一行仓库名称请你自己找对应的镜像填上。",[26,28581,28582,28583,28588],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23758,28584,28585],{},[483,28586,28587],{},"请不要加","。",[58,28590,28592],{"className":24027,"code":28591,"language":24029,"meta":63,"style":63},"--ulimit nofile=1024:524288 \\\n",[65,28593,28594],{"__ignoreMap":63},[68,28595,28596,28599,28602],{"class":70,"line":71},[68,28597,28598],{"class":74},"--ulimit",[68,28600,28601],{"class":78}," nofile=1024:524288",[68,28603,24882],{"class":82},[19,28605,28606,28607,28612],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23758,28608,28609],{},[483,28610,28611],{},"不建议","**.**",[58,28614,28616],{"className":24027,"code":28615,"language":24029,"meta":63,"style":63},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[65,28617,28618,28645,28654],{"__ignoreMap":63},[68,28619,28620,28623,28626,28628,28630,28632,28634,28636,28638,28641,28643],{"class":70,"line":71},[68,28621,28622],{"class":74},"--user",[68,28624,28625],{"class":335}," $(",[68,28627,28491],{"class":74},[68,28629,209],{"class":82},[68,28631,762],{"class":335},[68,28633,1192],{"class":78},[68,28635,25303],{"class":335},[68,28637,28491],{"class":74},[68,28639,28640],{"class":82}," -g",[68,28642,13919],{"class":335},[68,28644,26379],{"class":82},[68,28646,28647,28649,28652],{"class":70,"line":92},[68,28648,28450],{"class":335},[68,28650,28651],{"class":78},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[68,28653,24882],{"class":82},[68,28655,28656,28658,28661],{"class":70,"line":1387},[68,28657,28450],{"class":335},[68,28659,28660],{"class":78},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[68,28662,24882],{"class":82},[250,28664,28665],{},"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":63,"searchDepth":92,"depth":92,"links":28667},[28668,28669,28670],{"id":27667,"depth":1387,"text":27668},{"id":27677,"depth":1387,"text":27678},{"id":28088,"depth":1387,"text":28091},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27659,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28677,"title":28678,"body":28679,"description":63,"extension":258,"meta":30300,"navigation":260,"path":30301,"seo":30302,"stem":30303,"__hash__":30304},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28680,"toc":30295},[28681,28684,28688,28691,28913,28917,28921,28924,29029,29034,29037,29042,29045,29050,29053,29058,29061,29073,29076,29081,29088,29116,29123,29199,29204,29207,29229,29231,29306,29311,29314,29318,29326,29331,29336,29340,29351,29357,29360,29363,29387,29390,29393,29421,29424,29427,29892,29895,29900,29905,29909,29932,29937,29941,29945,29948,29951,29954,29981,29984,29987,30005,30008,30011,30033,30041,30046,30051,30055,30058,30061,30064,30067,30112,30115,30133,30136,30141,30144,30165,30168,30224,30227,30232,30236,30239,30246,30249,30252,30257,30260,30276,30279,30292],[10,28682,28678],{"id":28683},"_6手动创建docker镜像",[301,28685,28687],{"id":28686},"_61dockerfile","6.1.DockerFile",[19,28689,28690],{},"常用命令：",[471,28692,28693,28704],{},[474,28694,28695],{},[477,28696,28697,28700,28702],{},[480,28698,28699],{"align":23941},"指令",[480,28701,26073],{"align":23941},[480,28703,27696],{"align":23941},[518,28705,28706,28716,28732,28743,28754,28765,28776,28787,28798,28812,28826,28837,28851,28862,28873,28887,28902],{},[477,28707,28708,28710,28713],{},[523,28709,27574],{"align":23941},[523,28711,28712],{"align":23941},"指定基础镜像，是 Dockerfile 的起点",[523,28714,28715],{"align":23941},"FROM ubuntu:22.04",[477,28717,28718,28721,28724],{},[523,28719,28720],{"align":23941},"LABEL",[523,28722,28723],{"align":23941},"添加元数据（如作者、版本等）",[523,28725,28726,28727,28731],{"align":23941},"LABEL maintainer=”",[30,28728,28730],{"href":28729},"mailto:you@example.com","you@example.com","”",[477,28733,28734,28737,28740],{},[523,28735,28736],{"align":23941},"ENV",[523,28738,28739],{"align":23941},"设置环境变量",[523,28741,28742],{"align":23941},"ENV PORT=8080",[477,28744,28745,28748,28751],{},[523,28746,28747],{"align":23941},"ARG",[523,28749,28750],{"align":23941},"构建参数，只在构建期间可用",[523,28752,28753],{"align":23941},"ARG VERSION=1.0",[477,28755,28756,28759,28762],{},[523,28757,28758],{"align":23941},"RUN",[523,28760,28761],{"align":23941},"构建镜像时运行命令",[523,28763,28764],{"align":23941},"RUN apt-get update && apt-get install -y curl",[477,28766,28767,28770,28773],{},[523,28768,28769],{"align":23941},"COPY",[523,28771,28772],{"align":23941},"复制文件到镜像中",[523,28774,28775],{"align":23941},"COPY . \u002Fapp",[477,28777,28778,28781,28784],{},[523,28779,28780],{"align":23941},"ADD",[523,28782,28783],{"align":23941},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[523,28785,28786],{"align":23941},"ADD archive.tar.gz \u002Fdata\u002F",[477,28788,28789,28792,28795],{},[523,28790,28791],{"align":23941},"WORKDIR",[523,28793,28794],{"align":23941},"设置工作目录",[523,28796,28797],{"align":23941},"WORKDIR \u002Fopt",[477,28799,28800,28803,28806],{},[523,28801,28802],{"align":23941},"CMD",[523,28804,28805],{"align":23941},"设置容器启动时默认命令（可被 docker run 覆盖）",[523,28807,28808,28809],{"align":23941},"CMD ",[68,28810,28811],{},"“node”, “index.js”",[477,28813,28814,28817,28820],{},[523,28815,28816],{"align":23941},"ENTRYPOINT",[523,28818,28819],{"align":23941},"设置容器启动时固定命令（通常用于 CLI 工具等）",[523,28821,28822,28823],{"align":23941},"ENTRYPOINT ",[68,28824,28825],{},"“python3”",[477,28827,28828,28831,28834],{},[523,28829,28830],{"align":23941},"EXPOSE",[523,28832,28833],{"align":23941},"声明镜像内服务监听的端口（不会自动映射）",[523,28835,28836],{"align":23941},"EXPOSE 80",[477,28838,28839,28842,28845],{},[523,28840,28841],{"align":23941},"VOLUME",[523,28843,28844],{"align":23941},"声明数据卷挂载点",[523,28846,28847,28848],{"align":23941},"VOLUME ",[68,28849,28850],{},"“\u002Fdata”",[477,28852,28853,28856,28859],{},[523,28854,28855],{"align":23941},"USER",[523,28857,28858],{"align":23941},"设置后续命令执行的用户",[523,28860,28861],{"align":23941},"USER appuser",[477,28863,28864,28867,28870],{},[523,28865,28866],{"align":23941},"ONBUILD",[523,28868,28869],{"align":23941},"当镜像作为其他镜像基础镜像时触发的构建指令",[523,28871,28872],{"align":23941},"ONBUILD COPY . \u002Fsrc",[477,28874,28875,28878,28881],{},[523,28876,28877],{"align":23941},"SHELL",[523,28879,28880],{"align":23941},"更改默认 shell，比如将 sh -c 改为 bash -c",[523,28882,28883,28884],{"align":23941},"SHELL ",[68,28885,28886],{},"“\u002Fbin\u002Fbash”, “-c”",[477,28888,28889,28892,28895],{},[523,28890,28891],{"align":23941},"HEALTHCHECK",[523,28893,28894],{"align":23941},"定义容器运行时的健康检查命令",[523,28896,28897,28898],{"align":23941},"`HEALTHCHECK CMD curl –fail ",[30,28899,28900],{"href":28900,"rel":28901},"http:\u002F\u002Flocalhost:8080",[34],[477,28903,28904,28907,28910],{},[523,28905,28906],{"align":23941},"STOPSIGNAL",[523,28908,28909],{"align":23941},"容器停止时发送的信号",[523,28911,28912],{"align":23941},"STOPSIGNAL SIGKILL",[301,28914,28916],{"id":28915},"_62自己创建容器","6.2.自己创建容器",[22203,28918,28920],{"id":28919},"_621手动创建","6.2.1.手动创建",[19,28922,28923],{},"在x86电脑上编译x86的：",[58,28925,28927],{"className":24027,"code":28926,"language":24029,"meta":63,"style":63},"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",[65,28928,28929,28944,28948,28961,28965,28978,28982,28995,28999,29012,29016],{"__ignoreMap":63},[68,28930,28931,28933,28936,28939,28942],{"class":70,"line":71},[68,28932,26757],{"class":74},[68,28934,28935],{"class":78}," build",[68,28937,28938],{"class":82}," -t",[68,28940,28941],{"class":78}," ros-melodic-cuda118-cudnn8-bionic:latest",[68,28943,141],{"class":78},[68,28945,28946],{"class":70,"line":92},[68,28947,2606],{"emptyLinePlaceholder":260},[68,28949,28950,28952,28954,28956,28959],{"class":70,"line":1387},[68,28951,26757],{"class":74},[68,28953,28935],{"class":78},[68,28955,28938],{"class":82},[68,28957,28958],{"class":78}," ros-noetic-focal:latest",[68,28960,141],{"class":78},[68,28962,28963],{"class":70,"line":1402},[68,28964,2606],{"emptyLinePlaceholder":260},[68,28966,28967,28969,28971,28973,28976],{"class":70,"line":1408},[68,28968,26757],{"class":74},[68,28970,28935],{"class":78},[68,28972,28938],{"class":82},[68,28974,28975],{"class":78}," ros-humble-jammy:latest",[68,28977,141],{"class":78},[68,28979,28980],{"class":70,"line":1422},[68,28981,2606],{"emptyLinePlaceholder":260},[68,28983,28984,28986,28988,28990,28993],{"class":70,"line":1428},[68,28985,26757],{"class":74},[68,28987,28935],{"class":78},[68,28989,28938],{"class":82},[68,28991,28992],{"class":78}," ros-jazzy-noble:latest",[68,28994,141],{"class":78},[68,28996,28997],{"class":70,"line":1519},[68,28998,2606],{"emptyLinePlaceholder":260},[68,29000,29001,29003,29005,29007,29010],{"class":70,"line":1525},[68,29002,26757],{"class":74},[68,29004,28935],{"class":78},[68,29006,28938],{"class":82},[68,29008,29009],{"class":78}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[68,29011,141],{"class":78},[68,29013,29014],{"class":70,"line":1537},[68,29015,2606],{"emptyLinePlaceholder":260},[68,29017,29018,29020,29022,29024,29027],{"class":70,"line":1819},[68,29019,26757],{"class":74},[68,29021,28935],{"class":78},[68,29023,28938],{"class":82},[68,29025,29026],{"class":78}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[68,29028,141],{"class":78},[19,29030,29031],{},[48,29032],{"alt":63,"src":29033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29035,29036],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29038,29039],{},[48,29040],{"alt":63,"src":29041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29043,29044],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[23,29046,29047],{},[26,29048,29049],{},"创建 Docker Hub 账户",[19,29051,29052],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[23,29054,29055],{"start":92},[26,29056,29057],{},"登录 Docker Hub",[19,29059,29060],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[58,29062,29064],{"className":24027,"code":29063,"language":24029,"meta":63,"style":63},"docker login\n",[65,29065,29066],{"__ignoreMap":63},[68,29067,29068,29070],{"class":70,"line":71},[68,29069,26757],{"class":74},[68,29071,29072],{"class":78}," login\n",[19,29074,29075],{},"输入你的 Docker Hub 用户名和密码进行验证。",[23,29077,29078],{},[26,29079,29080],{},"为你的镜像打标签",[19,29082,29083,29084,29087],{},"Docker Hub 使用 ",[65,29085,29086],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[58,29089,29091],{"className":24027,"code":29090,"language":24029,"meta":63,"style":63},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[65,29092,29093],{"__ignoreMap":63},[68,29094,29095,29097,29100,29102,29105,29108,29111,29113],{"class":70,"line":71},[68,29096,26757],{"class":74},[68,29098,29099],{"class":78}," tag",[68,29101,28992],{"class":78},[68,29103,29104],{"class":331}," \u003C",[68,29106,29107],{"class":78},"你的用户",[68,29109,29110],{"class":335},"名",[68,29112,1293],{"class":331},[68,29114,29115],{"class":78},"\u002Fros-jazzy-noble:latest\n",[19,29117,29118,29119,29122],{},"例如，如果你的 Docker Hub 用户名是 ",[65,29120,29121],{},"tungchiahui","，你应该执行：",[58,29124,29126],{"className":24027,"code":29125,"language":24029,"meta":63,"style":63},"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",[65,29127,29128,29139,29143,29154,29158,29169,29173,29184,29188],{"__ignoreMap":63},[68,29129,29130,29132,29134,29136],{"class":70,"line":71},[68,29131,26757],{"class":74},[68,29133,29099],{"class":78},[68,29135,28958],{"class":78},[68,29137,29138],{"class":78}," tungchiahui\u002Fros-noetic-focal:latest\n",[68,29140,29141],{"class":70,"line":92},[68,29142,2606],{"emptyLinePlaceholder":260},[68,29144,29145,29147,29149,29151],{"class":70,"line":1387},[68,29146,26757],{"class":74},[68,29148,29099],{"class":78},[68,29150,28975],{"class":78},[68,29152,29153],{"class":78}," tungchiahui\u002Fros-humble-jammy:latest\n",[68,29155,29156],{"class":70,"line":1402},[68,29157,2606],{"emptyLinePlaceholder":260},[68,29159,29160,29162,29164,29166],{"class":70,"line":1408},[68,29161,26757],{"class":74},[68,29163,29099],{"class":78},[68,29165,28992],{"class":78},[68,29167,29168],{"class":78}," tungchiahui\u002Fros-jazzy-noble:latest\n",[68,29170,29171],{"class":70,"line":1422},[68,29172,2606],{"emptyLinePlaceholder":260},[68,29174,29175,29177,29179,29181],{"class":70,"line":1428},[68,29176,26757],{"class":74},[68,29178,29099],{"class":78},[68,29180,29009],{"class":78},[68,29182,29183],{"class":78}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[68,29185,29186],{"class":70,"line":1519},[68,29187,2606],{"emptyLinePlaceholder":260},[68,29189,29190,29192,29194,29196],{"class":70,"line":1525},[68,29191,26757],{"class":74},[68,29193,29099],{"class":78},[68,29195,29026],{"class":78},[68,29197,29198],{"class":78}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[23,29200,29201],{"start":92},[26,29202,29203],{},"推送镜像到 Docker Hub",[19,29205,29206],{},"使用以下命令将镜像推送到 Docker Hub：",[58,29208,29210],{"className":24027,"code":29209,"language":24029,"meta":63,"style":63},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[65,29211,29212],{"__ignoreMap":63},[68,29213,29214,29216,29218,29220,29222,29224,29226],{"class":70,"line":71},[68,29215,26757],{"class":74},[68,29217,206],{"class":78},[68,29219,29104],{"class":331},[68,29221,29107],{"class":78},[68,29223,29110],{"class":335},[68,29225,1293],{"class":331},[68,29227,29228],{"class":78},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29230,14838],{},[58,29232,29234],{"className":24027,"code":29233,"language":24029,"meta":63,"style":63},"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",[65,29235,29236,29244,29248,29256,29260,29268,29272,29281,29285,29293,29297],{"__ignoreMap":63},[68,29237,29238,29240,29242],{"class":70,"line":71},[68,29239,26757],{"class":74},[68,29241,206],{"class":78},[68,29243,29138],{"class":78},[68,29245,29246],{"class":70,"line":92},[68,29247,2606],{"emptyLinePlaceholder":260},[68,29249,29250,29252,29254],{"class":70,"line":1387},[68,29251,26757],{"class":74},[68,29253,206],{"class":78},[68,29255,29153],{"class":78},[68,29257,29258],{"class":70,"line":1402},[68,29259,2606],{"emptyLinePlaceholder":260},[68,29261,29262,29264,29266],{"class":70,"line":1408},[68,29263,26757],{"class":74},[68,29265,206],{"class":78},[68,29267,29168],{"class":78},[68,29269,29270],{"class":70,"line":1422},[68,29271,2606],{"emptyLinePlaceholder":260},[68,29273,29274,29276,29278],{"class":70,"line":1428},[68,29275,26757],{"class":74},[68,29277,206],{"class":78},[68,29279,29280],{"class":78}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[68,29282,29283],{"class":70,"line":1519},[68,29284,2606],{"emptyLinePlaceholder":260},[68,29286,29287,29289,29291],{"class":70,"line":1525},[68,29288,26757],{"class":74},[68,29290,206],{"class":78},[68,29292,29198],{"class":78},[68,29294,29295],{"class":70,"line":1537},[68,29296,2606],{"emptyLinePlaceholder":260},[68,29298,29299,29301,29303],{"class":70,"line":1819},[68,29300,26757],{"class":74},[68,29302,206],{"class":78},[68,29304,29305],{"class":78}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[23,29307,29308],{"start":1387},[26,29309,29310],{},"验证推送成功",[19,29312,29313],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29315,29316],{},[483,29317,3990],{},[42,29319,29320,29323],{},[26,29321,29322],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[26,29324,29325],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29327,29328],{},[48,29329],{"alt":63,"src":29330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29332,29333],{},[48,29334],{"alt":63,"src":29335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22203,29337,29339],{"id":29338},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29341,29342,29343,29346,29347,29350],{},"如果您想在 ",[483,29344,29345],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[483,29348,29349],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29352,29353,29354],{},"1. ",[483,29355,29356],{},"启用 Docker 跨平台构建",[19,29358,29359],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29361,29362],{},"第一步：启用 buildx（只需执行一次）",[58,29364,29366],{"className":24027,"code":29365,"language":24029,"meta":63,"style":63},"docker buildx create --name multiarch_builder --use\n",[65,29367,29368],{"__ignoreMap":63},[68,29369,29370,29372,29375,29378,29381,29384],{"class":70,"line":71},[68,29371,26757],{"class":74},[68,29373,29374],{"class":78}," buildx",[68,29376,29377],{"class":78}," create",[68,29379,29380],{"class":82}," --name",[68,29382,29383],{"class":78}," multiarch_builder",[68,29385,29386],{"class":82}," --use\n",[19,29388,29389],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29391,29392],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[58,29394,29396],{"className":24027,"code":29395,"language":24029,"meta":63,"style":63},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[65,29397,29398],{"__ignoreMap":63},[68,29399,29400,29402,29404,29406,29409,29412,29415,29418],{"class":70,"line":71},[68,29401,26757],{"class":74},[68,29403,27434],{"class":78},[68,29405,27437],{"class":82},[68,29407,29408],{"class":82}," --privileged",[68,29410,29411],{"class":78}," multiarch\u002Fqemu-user-static",[68,29413,29414],{"class":82}," --reset",[68,29416,29417],{"class":82}," -p",[68,29419,29420],{"class":78}," yes\n",[19,29422,29423],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29425,29426],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[58,29428,29430],{"className":24027,"code":29429,"language":24029,"meta":63,"style":63},"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",[65,29431,29432,29474,29478,29483,29493,29503,29512,29518,29522,29526,29536,29544,29553,29559,29563,29567,29577,29585,29594,29600,29604,29608,29618,29626,29635,29641,29645,29649,29659,29667,29676,29682,29686,29690,29700,29708,29717,29723,29727,29731,29741,29749,29758,29764,29768,29772,29782,29790,29799,29805,29809,29813,29823,29831,29840,29846,29850,29854,29865,29873,29882,29888],{"__ignoreMap":63},[68,29433,29434,29436,29438,29440,29443,29446,29448,29450,29453,29455,29457,29459,29461,29464,29467,29469,29472],{"class":70,"line":71},[68,29435,26757],{"class":74},[68,29437,29374],{"class":78},[68,29439,28935],{"class":78},[68,29441,29442],{"class":82}," --platform",[68,29444,29445],{"class":78}," linux\u002Famd64,linux\u002Farm64",[68,29447,28938],{"class":82},[68,29449,29104],{"class":331},[68,29451,29452],{"class":78},"你的镜像",[68,29454,29110],{"class":335},[68,29456,1293],{"class":331},[68,29458,1192],{"class":78},[68,29460,1243],{"class":331},[68,29462,29463],{"class":78},"标",[68,29465,29466],{"class":335},"签",[68,29468,1293],{"class":331},[68,29470,29471],{"class":82}," --push",[68,29473,141],{"class":78},[68,29475,29476],{"class":70,"line":92},[68,29477,2606],{"emptyLinePlaceholder":260},[68,29479,29480],{"class":70,"line":1387},[68,29481,29482],{"class":393},"# 例子：\n",[68,29484,29485,29487,29489,29491],{"class":70,"line":1402},[68,29486,26757],{"class":74},[68,29488,29374],{"class":78},[68,29490,28935],{"class":78},[68,29492,24882],{"class":82},[68,29494,29495,29498,29501],{"class":70,"line":1408},[68,29496,29497],{"class":335},"--platform ",[68,29499,29500],{"class":78},"linux\u002Famd64,linux\u002Farm64",[68,29502,24882],{"class":82},[68,29504,29505,29507,29510],{"class":70,"line":1422},[68,29506,28938],{"class":82},[68,29508,29509],{"class":78}," tungchiahui\u002Fros:noetic-focal",[68,29511,24882],{"class":82},[68,29513,29514,29516],{"class":70,"line":1428},[68,29515,29471],{"class":82},[68,29517,24882],{"class":82},[68,29519,29520],{"class":70,"line":1519},[68,29521,141],{"class":78},[68,29523,29524],{"class":70,"line":1525},[68,29525,2606],{"emptyLinePlaceholder":260},[68,29527,29528,29530,29532,29534],{"class":70,"line":1537},[68,29529,26757],{"class":74},[68,29531,29374],{"class":78},[68,29533,28935],{"class":78},[68,29535,24882],{"class":82},[68,29537,29538,29540,29542],{"class":70,"line":1819},[68,29539,29497],{"class":335},[68,29541,29500],{"class":78},[68,29543,24882],{"class":82},[68,29545,29546,29548,29551],{"class":70,"line":1824},[68,29547,28938],{"class":82},[68,29549,29550],{"class":78}," tungchiahui\u002Fros:humble-jammy",[68,29552,24882],{"class":82},[68,29554,29555,29557],{"class":70,"line":1830},[68,29556,29471],{"class":82},[68,29558,24882],{"class":82},[68,29560,29561],{"class":70,"line":1835},[68,29562,141],{"class":78},[68,29564,29565],{"class":70,"line":1849},[68,29566,2606],{"emptyLinePlaceholder":260},[68,29568,29569,29571,29573,29575],{"class":70,"line":1854},[68,29570,26757],{"class":74},[68,29572,29374],{"class":78},[68,29574,28935],{"class":78},[68,29576,24882],{"class":82},[68,29578,29579,29581,29583],{"class":70,"line":1860},[68,29580,29497],{"class":335},[68,29582,29500],{"class":78},[68,29584,24882],{"class":82},[68,29586,29587,29589,29592],{"class":70,"line":1881},[68,29588,28938],{"class":82},[68,29590,29591],{"class":78}," tungchiahui\u002Fros:jazzy-noble",[68,29593,24882],{"class":82},[68,29595,29596,29598],{"class":70,"line":1886},[68,29597,29471],{"class":82},[68,29599,24882],{"class":82},[68,29601,29602],{"class":70,"line":1900},[68,29603,141],{"class":78},[68,29605,29606],{"class":70,"line":1905},[68,29607,2606],{"emptyLinePlaceholder":260},[68,29609,29610,29612,29614,29616],{"class":70,"line":1934},[68,29611,26524],{"class":74},[68,29613,29374],{"class":78},[68,29615,28935],{"class":78},[68,29617,24882],{"class":82},[68,29619,29620,29622,29624],{"class":70,"line":1939},[68,29621,29497],{"class":335},[68,29623,29500],{"class":78},[68,29625,24882],{"class":82},[68,29627,29628,29630,29633],{"class":70,"line":1956},[68,29629,28938],{"class":82},[68,29631,29632],{"class":78}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[68,29634,24882],{"class":82},[68,29636,29637,29639],{"class":70,"line":1961},[68,29638,29471],{"class":82},[68,29640,24882],{"class":82},[68,29642,29643],{"class":70,"line":1966},[68,29644,141],{"class":78},[68,29646,29647],{"class":70,"line":1971},[68,29648,2606],{"emptyLinePlaceholder":260},[68,29650,29651,29653,29655,29657],{"class":70,"line":1985},[68,29652,26757],{"class":74},[68,29654,29374],{"class":78},[68,29656,28935],{"class":78},[68,29658,24882],{"class":82},[68,29660,29661,29663,29665],{"class":70,"line":1990},[68,29662,29497],{"class":335},[68,29664,29500],{"class":78},[68,29666,24882],{"class":82},[68,29668,29669,29671,29674],{"class":70,"line":2783},[68,29670,28938],{"class":82},[68,29672,29673],{"class":78}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[68,29675,24882],{"class":82},[68,29677,29678,29680],{"class":70,"line":2797},[68,29679,29471],{"class":82},[68,29681,24882],{"class":82},[68,29683,29684],{"class":70,"line":2805},[68,29685,141],{"class":78},[68,29687,29688],{"class":70,"line":2810},[68,29689,2606],{"emptyLinePlaceholder":260},[68,29691,29692,29694,29696,29698],{"class":70,"line":2816},[68,29693,26524],{"class":74},[68,29695,29374],{"class":78},[68,29697,28935],{"class":78},[68,29699,24882],{"class":82},[68,29701,29702,29704,29706],{"class":70,"line":2822},[68,29703,29497],{"class":335},[68,29705,29500],{"class":78},[68,29707,24882],{"class":82},[68,29709,29710,29712,29715],{"class":70,"line":2827},[68,29711,28938],{"class":82},[68,29713,29714],{"class":78}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[68,29716,24882],{"class":82},[68,29718,29719,29721],{"class":70,"line":8153},[68,29720,29471],{"class":82},[68,29722,24882],{"class":82},[68,29724,29725],{"class":70,"line":8177},[68,29726,141],{"class":78},[68,29728,29729],{"class":70,"line":8182},[68,29730,2606],{"emptyLinePlaceholder":260},[68,29732,29733,29735,29737,29739],{"class":70,"line":8188},[68,29734,26757],{"class":74},[68,29736,29374],{"class":78},[68,29738,28935],{"class":78},[68,29740,24882],{"class":82},[68,29742,29743,29745,29747],{"class":70,"line":8215},[68,29744,29497],{"class":335},[68,29746,29500],{"class":78},[68,29748,24882],{"class":82},[68,29750,29751,29753,29756],{"class":70,"line":8220},[68,29752,28938],{"class":82},[68,29754,29755],{"class":78}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[68,29757,24882],{"class":82},[68,29759,29760,29762],{"class":70,"line":8226},[68,29761,29471],{"class":82},[68,29763,24882],{"class":82},[68,29765,29766],{"class":70,"line":8238},[68,29767,141],{"class":78},[68,29769,29770],{"class":70,"line":8250},[68,29771,2606],{"emptyLinePlaceholder":260},[68,29773,29774,29776,29778,29780],{"class":70,"line":8262},[68,29775,26757],{"class":74},[68,29777,29374],{"class":78},[68,29779,28935],{"class":78},[68,29781,24882],{"class":82},[68,29783,29784,29786,29788],{"class":70,"line":9921},[68,29785,29497],{"class":335},[68,29787,29500],{"class":78},[68,29789,24882],{"class":82},[68,29791,29792,29794,29797],{"class":70,"line":9946},[68,29793,28938],{"class":82},[68,29795,29796],{"class":78}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[68,29798,24882],{"class":82},[68,29800,29801,29803],{"class":70,"line":9969},[68,29802,29471],{"class":82},[68,29804,24882],{"class":82},[68,29806,29807],{"class":70,"line":9993},[68,29808,141],{"class":78},[68,29810,29811],{"class":70,"line":9998},[68,29812,2606],{"emptyLinePlaceholder":260},[68,29814,29815,29817,29819,29821],{"class":70,"line":10003},[68,29816,26524],{"class":74},[68,29818,29374],{"class":78},[68,29820,28935],{"class":78},[68,29822,24882],{"class":82},[68,29824,29825,29827,29829],{"class":70,"line":10008},[68,29826,29497],{"class":335},[68,29828,29500],{"class":78},[68,29830,24882],{"class":82},[68,29832,29833,29835,29838],{"class":70,"line":10017},[68,29834,28938],{"class":82},[68,29836,29837],{"class":78}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[68,29839,24882],{"class":82},[68,29841,29842,29844],{"class":70,"line":10022},[68,29843,29471],{"class":82},[68,29845,24882],{"class":82},[68,29847,29848],{"class":70,"line":10028},[68,29849,141],{"class":78},[68,29851,29852],{"class":70,"line":10049},[68,29853,2606],{"emptyLinePlaceholder":260},[68,29855,29856,29859,29861,29863],{"class":70,"line":10055},[68,29857,29858],{"class":74},"  docker",[68,29860,29374],{"class":78},[68,29862,28935],{"class":78},[68,29864,24882],{"class":82},[68,29866,29867,29869,29871],{"class":70,"line":10069},[68,29868,29497],{"class":335},[68,29870,29500],{"class":78},[68,29872,24882],{"class":82},[68,29874,29875,29877,29880],{"class":70,"line":10075},[68,29876,28938],{"class":82},[68,29878,29879],{"class":78}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[68,29881,24882],{"class":82},[68,29883,29884,29886],{"class":70,"line":10102},[68,29885,29471],{"class":82},[68,29887,24882],{"class":82},[68,29889,29890],{"class":70,"line":10111},[68,29891,141],{"class":78},[19,29893,29894],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29896,29897],{},[48,29898],{"alt":63,"src":29899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29901,29902],{},[48,29903],{"alt":63,"src":29904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22203,29906,29908],{"id":29907},"_623清除构建缓存","6.2.3.清除构建缓存",[58,29910,29912],{"className":24027,"code":29911,"language":24029,"meta":63,"style":63},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[65,29913,29914,29919],{"__ignoreMap":63},[68,29915,29916],{"class":70,"line":71},[68,29917,29918],{"class":393},"# 清理BuildKit构建缓存\n",[68,29920,29921,29923,29926,29929],{"class":70,"line":92},[68,29922,26757],{"class":74},[68,29924,29925],{"class":78}," builder",[68,29927,29928],{"class":78}," prune",[68,29930,29931],{"class":82}," -f\n",[19,29933,29934],{},[48,29935],{"alt":63,"src":29936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[301,29938,29940],{"id":29939},"_63补充","6.3.补充",[22203,29942,29944],{"id":29943},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29946,29947],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29949,29950],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29952,29953],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[58,29955,29957],{"className":24027,"code":29956,"language":24029,"meta":63,"style":63},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[65,29958,29959,29966],{"__ignoreMap":63},[68,29960,29961,29963],{"class":70,"line":71},[68,29962,27574],{"class":74},[68,29964,29965],{"class":78}," nginx\n",[68,29967,29968,29970,29973,29976,29978],{"class":70,"line":92},[68,29969,28758],{"class":74},[68,29971,29972],{"class":78}," echo",[68,29974,29975],{"class":78}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[68,29977,26426],{"class":331},[68,29979,29980],{"class":78}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29982,29983],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29985,29986],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[58,29988,29990],{"className":24027,"code":29989,"language":24029,"meta":63,"style":63},"docker build -t nginx:tuling .\n",[65,29991,29992],{"__ignoreMap":63},[68,29993,29994,29996,29998,30000,30003],{"class":70,"line":71},[68,29995,26757],{"class":74},[68,29997,28935],{"class":78},[68,29999,28938],{"class":82},[68,30001,30002],{"class":78}," nginx:tuling",[68,30004,141],{"class":78},[19,30006,30007],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30009,30010],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[58,30012,30014],{"className":24027,"code":30013,"language":24029,"meta":63,"style":63},"docker run -d -p 92:80 nginx:tuling\n",[65,30015,30016],{"__ignoreMap":63},[68,30017,30018,30020,30022,30025,30027,30030],{"class":70,"line":71},[68,30019,26757],{"class":74},[68,30021,27434],{"class":78},[68,30023,30024],{"class":82}," -d",[68,30026,29417],{"class":82},[68,30028,30029],{"class":78}," 92:80",[68,30031,30032],{"class":78}," nginx:tuling\n",[19,30034,30035,30036],{},"4、访问 ",[30,30037,30040],{"href":30038,"rel":30039},"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",[34],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30042,30043],{},[48,30044],{"alt":63,"src":30045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30047,30048],{},[48,30049],{"alt":63,"src":30050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22203,30052,30054],{"id":30053},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30056,30057],{},"只需要知道大体流程即可",[19,30059,30060],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30062,30063],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30065,30066],{},"2、在Dockerfile中添加以下内容",[58,30068,30070],{"className":26295,"code":30069,"language":26297,"meta":63,"style":63},"# 基于哪个镜像\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",[65,30071,30072,30077,30082,30087,30092,30097,30102,30107],{"__ignoreMap":63},[68,30073,30074],{"class":70,"line":71},[68,30075,30076],{},"# 基于哪个镜像\n",[68,30078,30079],{"class":70,"line":92},[68,30080,30081],{},"From java:8\n",[68,30083,30084],{"class":70,"line":1387},[68,30085,30086],{},"# 复制文件到容器\n",[68,30088,30089],{"class":70,"line":1402},[68,30090,30091],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[68,30093,30094],{"class":70,"line":1408},[68,30095,30096],{},"# 声明需要暴露的端口\n",[68,30098,30099],{"class":70,"line":1422},[68,30100,30101],{},"EXPOSE 8877\n",[68,30103,30104],{"class":70,"line":1428},[68,30105,30106],{},"# 配置容器启动后执行的命令\n",[68,30108,30109],{"class":70,"line":1519},[68,30110,30111],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30113,30114],{},"3、使用docker build命令构建镜像",[58,30116,30118],{"className":24027,"code":30117,"language":24029,"meta":63,"style":63},"docker build -t tulingmall-member:0.0.5 .\n",[65,30119,30120],{"__ignoreMap":63},[68,30121,30122,30124,30126,30128,30131],{"class":70,"line":71},[68,30123,26757],{"class":74},[68,30125,28935],{"class":78},[68,30127,28938],{"class":82},[68,30129,30130],{"class":78}," tulingmall-member:0.0.5",[68,30132,141],{"class":78},[19,30134,30135],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30137,30138],{},[48,30139],{"alt":63,"src":30140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30142,30143],{},"4、启动镜像，加-d可在后台启动",[58,30145,30147],{"className":24027,"code":30146,"language":24029,"meta":63,"style":63},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[65,30148,30149],{"__ignoreMap":63},[68,30150,30151,30153,30155,30157,30159,30162],{"class":70,"line":71},[68,30152,26757],{"class":74},[68,30154,27434],{"class":78},[68,30156,30024],{"class":82},[68,30158,29417],{"class":82},[68,30160,30161],{"class":78}," 8877:8877",[68,30163,30164],{"class":78}," tulingmall-member:0.0.5\n",[19,30166,30167],{},"加上JVM参数：",[58,30169,30171],{"className":24027,"code":30170,"language":24029,"meta":63,"style":63},"# --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",[65,30172,30173,30178,30193,30203,30212,30219],{"__ignoreMap":63},[68,30174,30175],{"class":70,"line":71},[68,30176,30177],{"class":393},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[68,30179,30180,30182,30184,30187,30189,30191],{"class":70,"line":92},[68,30181,26757],{"class":74},[68,30183,27434],{"class":78},[68,30185,30186],{"class":82},"  -d",[68,30188,29417],{"class":82},[68,30190,30161],{"class":78},[68,30192,24882],{"class":82},[68,30194,30195,30197,30200],{"class":70,"line":1387},[68,30196,28332],{"class":335},[68,30198,30199],{"class":78},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[68,30201,30202],{"class":82},"  \\\n",[68,30204,30205,30207,30210],{"class":70,"line":1402},[68,30206,28332],{"class":335},[68,30208,30209],{"class":78},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[68,30211,30202],{"class":82},[68,30213,30214,30217],{"class":70,"line":1408},[68,30215,30216],{"class":335},"--cap-add=SYS_PTRACE  ",[68,30218,26379],{"class":82},[68,30220,30221],{"class":70,"line":1422},[68,30222,30223],{"class":335},"tulingmall-member:0.0.5\n",[19,30225,30226],{},"5、访问会员服务接口",[19,30228,30229],{},[48,30230],{"alt":63,"src":30231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22203,30233,30235],{"id":30234},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30237,30238],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30240,30241,30242],{},"阿里云docker镜像仓库：",[30,30243,30244],{"href":30244,"rel":30245},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[34],[19,30247,30248],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30250,30251],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30253,30254],{},[48,30255],{"alt":63,"src":30256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30258,30259],{},"要把镜像推送到镜像仓库",[58,30261,30263],{"className":24027,"code":30262,"language":24029,"meta":63,"style":63},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[65,30264,30265],{"__ignoreMap":63},[68,30266,30267,30269,30271,30273],{"class":70,"line":71},[68,30268,26757],{"class":74},[68,30270,29099],{"class":78},[68,30272,30130],{"class":78},[68,30274,30275],{"class":78}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30277,30278],{},"最后将镜像推送到远程仓库",[58,30280,30282],{"className":24027,"code":30281,"language":24029,"meta":63,"style":63},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[65,30283,30284],{"__ignoreMap":63},[68,30285,30286,30288,30290],{"class":70,"line":71},[68,30287,26757],{"class":74},[68,30289,206],{"class":78},[68,30291,30275],{"class":78},[250,30293,30294],{},"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":63,"searchDepth":92,"depth":92,"links":30296},[30297,30298,30299],{"id":28686,"depth":1387,"text":28687},{"id":28915,"depth":1387,"text":28916},{"id":29939,"depth":1387,"text":29940},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28678,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30306,"title":30307,"body":30308,"description":63,"extension":258,"meta":30451,"navigation":260,"path":30452,"seo":30453,"stem":30454,"__hash__":30455},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30309,"toc":30449},[30310,30313,30318,30323,30326,30331,30336,30339,30344,30349,30352,30357,30360,30363,30366,30369,30372,30375,30395,30417,30420,30423,30443,30446],[10,30311,30307],{"id":30312},"_7vscode远程开发",[23,30314,30315],{},[26,30316,30317],{},"插件1：微软Docker工具",[19,30319,30320],{},[48,30321],{"alt":63,"src":30322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30324,30325],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30327,30328],{},[48,30329],{"alt":63,"src":30330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[23,30332,30333],{"start":92},[26,30334,30335],{},"插件2：微软Docker远程开发工具",[19,30337,30338],{},"下面这是远程开发的插件。",[19,30340,30341],{},[48,30342],{"alt":63,"src":30343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30345,30346],{},[48,30347],{"alt":63,"src":30348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30350,30351],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30353,30354],{},[48,30355],{"alt":63,"src":30356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30358,30359],{},"安装完拓展之后，vscode进行链接：",[19,30361,30362],{},"1.按ctrl+shift+p",[19,30364,30365],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30367,30368],{},"3.选择目前运行的容器",[19,30370,30371],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30373,30374],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[58,30376,30378],{"className":24027,"code":30377,"language":24029,"meta":63,"style":63},"docker run -v 主机目录:容器目录 image-name\n",[65,30379,30380],{"__ignoreMap":63},[68,30381,30382,30384,30386,30389,30392],{"class":70,"line":71},[68,30383,26757],{"class":74},[68,30385,27434],{"class":78},[68,30387,30388],{"class":82}," -v",[68,30390,30391],{"class":78}," 主机目录:容器目录",[68,30393,30394],{"class":78}," image-name\n",[58,30396,30398],{"className":24027,"code":30397,"language":24029,"meta":63,"style":63},"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",[65,30399,30400],{"__ignoreMap":63},[68,30401,30402,30404,30406,30409,30411,30414],{"class":70,"line":71},[68,30403,26757],{"class":74},[68,30405,27434],{"class":78},[68,30407,30408],{"class":82}," -it",[68,30410,30388],{"class":82},[68,30412,30413],{"class":78}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[68,30415,30416],{"class":78}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30418,30419],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30421,30422],{},"查看挂载情况：",[58,30424,30426],{"className":24027,"code":30425,"language":24029,"meta":63,"style":63},"mount | grep -i project\n",[65,30427,30428],{"__ignoreMap":63},[68,30429,30430,30433,30435,30438,30440],{"class":70,"line":71},[68,30431,30432],{"class":74},"mount",[68,30434,25313],{"class":331},[68,30436,30437],{"class":74}," grep",[68,30439,26634],{"class":82},[68,30441,30442],{"class":78}," project\n",[19,30444,30445],{},"也可以通过ls来进行查看",[250,30447,30448],{},"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":63,"searchDepth":92,"depth":92,"links":30450},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30307,"description":63},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30457,"title":30458,"body":30459,"description":257,"extension":258,"meta":30463,"navigation":260,"path":30465,"seo":30466,"stem":30467,"__hash__":30468},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30460,"toc":30461},[],{"title":63,"searchDepth":92,"depth":92,"links":30462},[],{"category":30464},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30458,"description":257},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30470,"title":30471,"body":30472,"description":257,"extension":258,"meta":30476,"navigation":260,"path":30477,"seo":30478,"stem":30479,"__hash__":30480},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30473,"toc":30474},[],{"title":63,"searchDepth":92,"depth":92,"links":30475},[],{"category":30464},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30471,"description":257},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30482,"title":30483,"body":30484,"description":257,"extension":258,"meta":30777,"navigation":260,"path":30778,"seo":30779,"stem":30780,"__hash__":30781},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30485,"toc":30775},[30486,30489,30497,30512,30517,30568,30571,30577,30764,30769,30772],[10,30487,30483],{"id":30488},"_1验证深度学习环境",[19,30490,30491,30492],{},"关于环境的安装，看",[30,30493,30496],{"href":30494,"rel":30495},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[34],"Pytorch-->深度学习",[19,30498,30499,30500,30503,30504,30507,30508,30511],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[65,30501,30502],{},"pytorch-cuda=12.4"," 是一个“ ",[483,30505,30506],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[483,30509,30510],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30513,30514],{},[48,30515],{"alt":63,"src":30516},"\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",[58,30518,30520],{"className":24027,"code":30519,"language":24029,"meta":63,"style":63},"# 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",[65,30521,30522,30527],{"__ignoreMap":63},[68,30523,30524],{"class":70,"line":71},[68,30525,30526],{"class":393},"# CUDA 12.4\n",[68,30528,30529,30532,30534,30537,30540,30543,30546,30549,30551,30554,30557,30560,30563,30565],{"class":70,"line":92},[68,30530,30531],{"class":74},"conda",[68,30533,24039],{"class":78},[68,30535,30536],{"class":78}," pytorch==",[68,30538,30539],{"class":82},"2.5.1",[68,30541,30542],{"class":78}," torchvision==",[68,30544,30545],{"class":82},"0.20.1",[68,30547,30548],{"class":78}," torchaudio==",[68,30550,30539],{"class":82},[68,30552,30553],{"class":78}," pytorch-cuda=",[68,30555,30556],{"class":82},"12.4",[68,30558,30559],{"class":82}," -c",[68,30561,30562],{"class":78}," pytorch",[68,30564,30559],{"class":82},[68,30566,30567],{"class":78}," nvidia\n",[19,30569,30570],{},"）：",[19,30572,30573],{},[30,30574,30575],{"href":30575,"rel":30576},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[34],[58,30578,30582],{"className":30579,"code":30580,"language":30581,"meta":63,"style":63},"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",[65,30583,30584,30589,30597,30602,30612,30628,30633,30643,30680,30687,30699,30715,30720,30730,30742,30752],{"__ignoreMap":63},[68,30585,30586],{"class":70,"line":71},[68,30587,30588],{"class":393},"# 对深度学习环境进行测试\n",[68,30590,30591,30594],{"class":70,"line":92},[68,30592,30593],{"class":331},"import",[68,30595,30596],{"class":335}," torch\n",[68,30598,30599],{"class":70,"line":1387},[68,30600,30601],{"class":393},"# 查看cuda是否被激活\n",[68,30603,30604,30607,30609],{"class":70,"line":1402},[68,30605,30606],{"class":335},"flag",[68,30608,381],{"class":331},[68,30610,30611],{"class":335},"torch.cuda.is_available()\n",[68,30613,30614,30617,30619,30622,30625],{"class":70,"line":1408},[68,30615,30616],{"class":82},"print",[68,30618,336],{"class":335},[68,30620,30621],{"class":78},"\"cuda:\"",[68,30623,30624],{"class":335},", flag)   ",[68,30626,30627],{"class":393},"#返回true的话说明被激活\n",[68,30629,30630],{"class":70,"line":1422},[68,30631,30632],{"class":393},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[68,30634,30635,30638,30640],{"class":70,"line":1428},[68,30636,30637],{"class":335},"ngpu",[68,30639,381],{"class":331},[68,30641,30642],{"class":82},"1\n",[68,30644,30645,30648,30650,30653,30656,30658,30661,30664,30667,30669,30671,30673,30675,30678],{"class":70,"line":1519},[68,30646,30647],{"class":335},"device",[68,30649,381],{"class":331},[68,30651,30652],{"class":335},"torch.device(",[68,30654,30655],{"class":78},"\"cuda:0\"",[68,30657,1911],{"class":331},[68,30659,30660],{"class":335},"(torch.cuda.is_available() ",[68,30662,30663],{"class":331},"and",[68,30665,30666],{"class":335}," ngpu",[68,30668,1293],{"class":331},[68,30670,525],{"class":82},[68,30672,13919],{"class":335},[68,30674,1908],{"class":331},[68,30676,30677],{"class":78}," \"cpu\"",[68,30679,342],{"class":335},[68,30681,30682,30684],{"class":70,"line":1525},[68,30683,30616],{"class":82},[68,30685,30686],{"class":335},"(device)\n",[68,30688,30689,30691,30694,30696],{"class":70,"line":1537},[68,30690,30616],{"class":82},[68,30692,30693],{"class":335},"(torch.cuda.get_device_name(",[68,30695,525],{"class":82},[68,30697,30698],{"class":335},"))\n",[68,30700,30701,30703,30706,30708,30710,30712],{"class":70,"line":1819},[68,30702,30616],{"class":82},[68,30704,30705],{"class":335},"(torch.rand(",[68,30707,406],{"class":82},[68,30709,711],{"class":335},[68,30711,406],{"class":82},[68,30713,30714],{"class":335},").cuda())\n",[68,30716,30717],{"class":70,"line":1824},[68,30718,30719],{"class":393},"# 查看cuda和cudnn的版本\n",[68,30721,30722,30725,30727],{"class":70,"line":1830},[68,30723,30724],{"class":335},"cuda_version",[68,30726,381],{"class":331},[68,30728,30729],{"class":335},"torch.version.cuda\n",[68,30731,30732,30734,30736,30739],{"class":70,"line":1835},[68,30733,30616],{"class":82},[68,30735,336],{"class":335},[68,30737,30738],{"class":78},"\"cuda version\"",[68,30740,30741],{"class":335},",cuda_version)\n",[68,30743,30744,30747,30749],{"class":70,"line":1849},[68,30745,30746],{"class":335},"cudnn_version",[68,30748,381],{"class":331},[68,30750,30751],{"class":335},"torch.backends.cudnn.version()\n",[68,30753,30754,30756,30758,30761],{"class":70,"line":1854},[68,30755,30616],{"class":82},[68,30757,336],{"class":335},[68,30759,30760],{"class":78},"\"cudnn version\"",[68,30762,30763],{"class":335},",cudnn_version)\n",[19,30765,30766],{},[48,30767],{"alt":63,"src":30768},"\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",[19,30770,30771],{},"cuda:0 指的是一块显卡",[250,30773,30774],{},"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":63,"searchDepth":92,"depth":92,"links":30776},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30483,"description":257},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30783,"title":30784,"body":30785,"description":257,"extension":258,"meta":50589,"navigation":260,"path":50590,"seo":50591,"stem":50592,"__hash__":50593},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30786,"toc":50583},[30787,30790,30794,30798,30801,30806,30811,30814,30819,30824,30829,30832,30836,30841,30845,30850,30853,30858,30861,30864,30867,30870,30875,30878,30883,30888,30893,30898,30901,30905,30908,30913,31517,31522,31525,31530,31533,31536,32000,32003,32006,32009,32012,34063,34066,34071,34076,34871,34874,34879,35657,35661,37320,37324,38038,38042,38046,38051,38056,38061,38064,38069,38074,38079,38084,38089,38093,38098,39380,39385,39388,39391,39394,39549,39552,39555,40771,40776,41471,41475,41479,41484,41489,41492,41497,41502,41507,41512,41517,41522,41527,41532,41537,41542,41547,41552,41557,41562,41567,41572,41577,41582,41587,41592,41597,41602,41607,41612,41617,41622,41627,41632,41637,41642,41646,41650,41653,43131,43135,44782,44786,45480,45484,45487,45490,46034,46037,46041,46044,47441,47445,47448,48026,49813,49817,49820,50580],[10,30788,30784],{"id":30789},"_2经典神经网络",[301,30791,30793],{"id":30792},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22203,30795,30797],{"id":30796},"_211原理介绍","2.1.1.原理介绍",[19,30799,30800],{},"LeNet-5",[23,30802,30803],{},[26,30804,30805],{},"原理",[19,30807,30808],{},[48,30809],{"alt":63,"src":30810},"\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",[19,30812,30813],{},"B是batch批次；C是channel通道",[23,30815,30816],{"start":92},[26,30817,30818],{},"网络参数详细",[19,30820,30821],{},[48,30822],{"alt":63,"src":30823},"\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",[19,30825,30826],{},[48,30827],{"alt":63,"src":30828},"\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",[19,30830,30831],{},"AlexNet",[23,30833,30834],{},[26,30835,30805],{},[19,30837,30838],{},[48,30839],{"alt":63,"src":30840},"\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",[23,30842,30843],{"start":92},[26,30844,30818],{},[19,30846,30847],{},[48,30848],{"alt":63,"src":30849},"\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",[19,30851,30852],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30854,30855],{},[48,30856],{"alt":63,"src":30857},"\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",[19,30859,30860],{},"数据处理中的图像增强操作:",[19,30862,30863],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30865,30866],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30868,30869],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30871,30872],{},[48,30873],{"alt":63,"src":30874},"\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",[19,30876,30877],{},"提升网络精确度的方法：LRN正则化",[19,30879,30880],{},[48,30881],{"alt":63,"src":30882},"\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",[19,30884,30885],{},[48,30886],{"alt":63,"src":30887},"\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",[23,30889,30890],{"start":1387},[26,30891,30892],{},"AlexNet的总结",[19,30894,30895],{},[48,30896],{"alt":63,"src":30897},"\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",[19,30899,30900],{},"比LeNet模型要深一丢丢",[22203,30902,30904],{"id":30903},"_212代码实现","2.1.2.代码实现",[19,30906,30907],{},"（1）LeNet",[23,30909,30910],{},[26,30911,30912],{},"模型搭建",[58,30914,30916],{"className":30579,"code":30915,"language":30581,"meta":63,"style":63},"# 导入库\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",[65,30917,30918,30923,30929,30934,30947,30952,30964,30968,30988,30993,30998,31009,31014,31033,31037,31042,31091,31103,31108,31137,31172,31199,31204,31216,31221,31241,31260,31279,31283,31288,31298,31315,31326,31341,31352,31363,31378,31393,31404,31411,31415,31429,31434,31457,31462,31467,31472,31476,31481,31486,31496],{"__ignoreMap":63},[68,30919,30920],{"class":70,"line":71},[68,30921,30922],{"class":393},"# 导入库\n",[68,30924,30925,30927],{"class":70,"line":92},[68,30926,30593],{"class":331},[68,30928,30596],{"class":335},[68,30930,30931],{"class":70,"line":1387},[68,30932,30933],{"class":393},"# 导入神经网络层\n",[68,30935,30936,30939,30942,30944],{"class":70,"line":1402},[68,30937,30938],{"class":331},"from",[68,30940,30941],{"class":335}," torch ",[68,30943,30593],{"class":331},[68,30945,30946],{"class":335}," nn\n",[68,30948,30949],{"class":70,"line":1408},[68,30950,30951],{"class":393},"# 导入展示神经网络参数的包\n",[68,30953,30954,30956,30959,30961],{"class":70,"line":1422},[68,30955,30938],{"class":331},[68,30957,30958],{"class":335}," torchsummary ",[68,30960,30593],{"class":331},[68,30962,30963],{"class":335}," summary\n",[68,30965,30966],{"class":70,"line":1428},[68,30967,2606],{"emptyLinePlaceholder":260},[68,30969,30970,30972,30975,30977,30980,30982,30985],{"class":70,"line":1519},[68,30971,14899],{"class":331},[68,30973,30974],{"class":74}," LeNet",[68,30976,336],{"class":335},[68,30978,30979],{"class":74},"nn",[68,30981,891],{"class":335},[68,30983,30984],{"class":74},"Module",[68,30986,30987],{"class":335},"):\n",[68,30989,30990],{"class":70,"line":1525},[68,30991,30992],{"class":393},"    # 模型初始化:\n",[68,30994,30995],{"class":70,"line":1537},[68,30996,30997],{"class":393},"    # 定义一些网络层和激活函数\n",[68,30999,31000,31003,31006],{"class":70,"line":1819},[68,31001,31002],{"class":331},"    def",[68,31004,31005],{"class":82}," __init__",[68,31007,31008],{"class":335},"(self):\n",[68,31010,31011],{"class":70,"line":1824},[68,31012,31013],{"class":393},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[68,31015,31016,31019,31022,31025,31028,31031],{"class":70,"line":1830},[68,31017,31018],{"class":82},"        super",[68,31020,31021],{"class":335},"(LeNet,",[68,31023,31024],{"class":82},"self",[68,31026,31027],{"class":335},").",[68,31029,31030],{"class":82},"__init__",[68,31032,2182],{"class":335},[68,31034,31035],{"class":70,"line":1835},[68,31036,2606],{"emptyLinePlaceholder":260},[68,31038,31039],{"class":70,"line":1849},[68,31040,31041],{"class":393},"        # 定义网络层\n",[68,31043,31044,31047,31050,31052,31055,31058,31060,31062,31064,31067,31069,31071,31073,31076,31078,31080,31082,31085,31087,31089],{"class":70,"line":1854},[68,31045,31046],{"class":82},"        self",[68,31048,31049],{"class":335},".c1",[68,31051,381],{"class":331},[68,31053,31054],{"class":335},"nn.Conv2d(",[68,31056,31057],{"class":5421},"in_channels",[68,31059,381],{"class":331},[68,31061,551],{"class":82},[68,31063,711],{"class":335},[68,31065,31066],{"class":5421},"out_channels",[68,31068,381],{"class":331},[68,31070,677],{"class":82},[68,31072,711],{"class":335},[68,31074,31075],{"class":5421},"kernel_size",[68,31077,381],{"class":331},[68,31079,652],{"class":82},[68,31081,711],{"class":335},[68,31083,31084],{"class":5421},"padding",[68,31086,381],{"class":331},[68,31088,412],{"class":82},[68,31090,342],{"class":335},[68,31092,31093,31095,31098,31100],{"class":70,"line":1860},[68,31094,31046],{"class":82},[68,31096,31097],{"class":335},".sig",[68,31099,381],{"class":331},[68,31101,31102],{"class":335},"nn.Sigmoid()\n",[68,31104,31105],{"class":70,"line":1881},[68,31106,31107],{"class":393},"        # 定义池化\n",[68,31109,31110,31112,31115,31117,31120,31122,31124,31126,31128,31131,31133,31135],{"class":70,"line":1886},[68,31111,31046],{"class":82},[68,31113,31114],{"class":335},".s2",[68,31116,381],{"class":331},[68,31118,31119],{"class":335},"nn.AvgPool2d(",[68,31121,31075],{"class":5421},[68,31123,381],{"class":331},[68,31125,412],{"class":82},[68,31127,711],{"class":335},[68,31129,31130],{"class":5421},"stride",[68,31132,381],{"class":331},[68,31134,412],{"class":82},[68,31136,342],{"class":335},[68,31138,31139,31141,31144,31146,31148,31150,31152,31154,31156,31158,31160,31162,31164,31166,31168,31170],{"class":70,"line":1900},[68,31140,31046],{"class":82},[68,31142,31143],{"class":335},".c3",[68,31145,381],{"class":331},[68,31147,31054],{"class":335},[68,31149,31057],{"class":5421},[68,31151,381],{"class":331},[68,31153,677],{"class":82},[68,31155,711],{"class":335},[68,31157,31066],{"class":5421},[68,31159,381],{"class":331},[68,31161,934],{"class":82},[68,31163,711],{"class":335},[68,31165,31075],{"class":5421},[68,31167,381],{"class":331},[68,31169,652],{"class":82},[68,31171,342],{"class":335},[68,31173,31174,31176,31179,31181,31183,31185,31187,31189,31191,31193,31195,31197],{"class":70,"line":1905},[68,31175,31046],{"class":82},[68,31177,31178],{"class":335},".s4",[68,31180,381],{"class":331},[68,31182,31119],{"class":335},[68,31184,31075],{"class":5421},[68,31186,381],{"class":331},[68,31188,412],{"class":82},[68,31190,711],{"class":335},[68,31192,31130],{"class":5421},[68,31194,381],{"class":331},[68,31196,412],{"class":82},[68,31198,342],{"class":335},[68,31200,31201],{"class":70,"line":1934},[68,31202,31203],{"class":393},"        # 定义平展层\n",[68,31205,31206,31208,31211,31213],{"class":70,"line":1939},[68,31207,31046],{"class":82},[68,31209,31210],{"class":335},".flatten",[68,31212,381],{"class":331},[68,31214,31215],{"class":335},"nn.Flatten()\n",[68,31217,31218],{"class":70,"line":1956},[68,31219,31220],{"class":393},"        # 定义全连接层\n",[68,31222,31223,31225,31228,31230,31233,31235,31237,31239],{"class":70,"line":1961},[68,31224,31046],{"class":82},[68,31226,31227],{"class":335},".f5",[68,31229,381],{"class":331},[68,31231,31232],{"class":335},"nn.Linear(",[68,31234,4193],{"class":82},[68,31236,711],{"class":335},[68,31238,1150],{"class":82},[68,31240,342],{"class":335},[68,31242,31243,31245,31248,31250,31252,31254,31256,31258],{"class":70,"line":1966},[68,31244,31046],{"class":82},[68,31246,31247],{"class":335},".f6",[68,31249,381],{"class":331},[68,31251,31232],{"class":335},[68,31253,1150],{"class":82},[68,31255,711],{"class":335},[68,31257,1044],{"class":82},[68,31259,342],{"class":335},[68,31261,31262,31264,31267,31269,31271,31273,31275,31277],{"class":70,"line":1971},[68,31263,31046],{"class":82},[68,31265,31266],{"class":335},".f7",[68,31268,381],{"class":331},[68,31270,31232],{"class":335},[68,31272,1044],{"class":82},[68,31274,711],{"class":335},[68,31276,779],{"class":82},[68,31278,342],{"class":335},[68,31280,31281],{"class":70,"line":1985},[68,31282,2606],{"emptyLinePlaceholder":260},[68,31284,31285],{"class":70,"line":1990},[68,31286,31287],{"class":393},"    # 写工具->写前向传播\n",[68,31289,31290,31292,31295],{"class":70,"line":2783},[68,31291,31002],{"class":331},[68,31293,31294],{"class":74}," forward",[68,31296,31297],{"class":335},"(self,x):\n",[68,31299,31300,31303,31305,31307,31310,31312],{"class":70,"line":2797},[68,31301,31302],{"class":335},"        x",[68,31304,381],{"class":331},[68,31306,31024],{"class":82},[68,31308,31309],{"class":335},".sig(",[68,31311,31024],{"class":82},[68,31313,31314],{"class":335},".c1(x))\n",[68,31316,31317,31319,31321,31323],{"class":70,"line":2805},[68,31318,31302],{"class":335},[68,31320,381],{"class":331},[68,31322,31024],{"class":82},[68,31324,31325],{"class":335},".s2(x)\n",[68,31327,31328,31330,31332,31334,31336,31338],{"class":70,"line":2810},[68,31329,31302],{"class":335},[68,31331,381],{"class":331},[68,31333,31024],{"class":82},[68,31335,31309],{"class":335},[68,31337,31024],{"class":82},[68,31339,31340],{"class":335},".c3(x))\n",[68,31342,31343,31345,31347,31349],{"class":70,"line":2816},[68,31344,31302],{"class":335},[68,31346,381],{"class":331},[68,31348,31024],{"class":82},[68,31350,31351],{"class":335},".s4(x)\n",[68,31353,31354,31356,31358,31360],{"class":70,"line":2822},[68,31355,31302],{"class":335},[68,31357,381],{"class":331},[68,31359,31024],{"class":82},[68,31361,31362],{"class":335},".flatten(x)\n",[68,31364,31365,31367,31369,31371,31373,31375],{"class":70,"line":2827},[68,31366,31302],{"class":335},[68,31368,381],{"class":331},[68,31370,31024],{"class":82},[68,31372,31309],{"class":335},[68,31374,31024],{"class":82},[68,31376,31377],{"class":335},".f5(x))\n",[68,31379,31380,31382,31384,31386,31388,31390],{"class":70,"line":8153},[68,31381,31302],{"class":335},[68,31383,381],{"class":331},[68,31385,31024],{"class":82},[68,31387,31309],{"class":335},[68,31389,31024],{"class":82},[68,31391,31392],{"class":335},".f6(x))\n",[68,31394,31395,31397,31399,31401],{"class":70,"line":8177},[68,31396,31302],{"class":335},[68,31398,381],{"class":331},[68,31400,31024],{"class":82},[68,31402,31403],{"class":335},".f7(x)\n",[68,31405,31406,31408],{"class":70,"line":8182},[68,31407,14957],{"class":331},[68,31409,31410],{"class":335}," x\n",[68,31412,31413],{"class":70,"line":8188},[68,31414,2606],{"emptyLinePlaceholder":260},[68,31416,31417,31419,31422,31424,31427],{"class":70,"line":8215},[68,31418,1738],{"class":331},[68,31420,31421],{"class":82}," __name__",[68,31423,3155],{"class":331},[68,31425,31426],{"class":78},"\"__main__\"",[68,31428,3945],{"class":335},[68,31430,31431],{"class":70,"line":8220},[68,31432,31433],{"class":393},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[68,31435,31436,31439,31441,31443,31446,31448,31451,31453,31455],{"class":70,"line":8226},[68,31437,31438],{"class":335},"    device",[68,31440,381],{"class":331},[68,31442,30652],{"class":335},[68,31444,31445],{"class":78},"\"cuda\"",[68,31447,1911],{"class":331},[68,31449,31450],{"class":335}," torch.cuda.is_available() ",[68,31452,1908],{"class":331},[68,31454,30677],{"class":78},[68,31456,342],{"class":335},[68,31458,31459],{"class":70,"line":8238},[68,31460,31461],{"class":393},"    # 如果就是想指定用cpu用下方代码:\n",[68,31463,31464],{"class":70,"line":8250},[68,31465,31466],{"class":393},"    # device=\"cpu\"\n",[68,31468,31469],{"class":70,"line":8262},[68,31470,31471],{"class":393},"    # print(device)\n",[68,31473,31474],{"class":70,"line":9921},[68,31475,2606],{"emptyLinePlaceholder":260},[68,31477,31478],{"class":70,"line":9946},[68,31479,31480],{"class":393},"    # 实例化模型\n",[68,31482,31483],{"class":70,"line":9969},[68,31484,31485],{"class":393},"    # 将模型放到设备中去运行\n",[68,31487,31488,31491,31493],{"class":70,"line":9993},[68,31489,31490],{"class":335},"    model",[68,31492,381],{"class":331},[68,31494,31495],{"class":335},"LeNet().to(device)\n",[68,31497,31498,31501,31504,31506,31508,31510,31512,31514],{"class":70,"line":9998},[68,31499,31500],{"class":82},"    print",[68,31502,31503],{"class":335},"(summary(model,(",[68,31505,551],{"class":82},[68,31507,711],{"class":335},[68,31509,1234],{"class":82},[68,31511,711],{"class":335},[68,31513,1234],{"class":82},[68,31515,31516],{"class":335},")))\n",[19,31518,31519],{},[48,31520],{"alt":63,"src":31521},"\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",[19,31523,31524],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[23,31526,31527],{"start":92},[26,31528,31529],{},"训练",[19,31531,31532],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31534,31535],{},"在训练之前可以将数据展示看一下",[58,31537,31539],{"className":30579,"code":31538,"language":30581,"meta":63,"style":63},"# 建立画图的函数，用于展示数据\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",[65,31540,31541,31546,31551,31563,31575,31588,31593,31605,31610,31622,31627,31639,31643,31647,31668,31680,31685,31706,31717,31721,31726,31744,31755,31760,31771,31776,31787,31791,31796,31811,31824,31829,31834,31847,31860,31873,31878,31882,31887,31907,31924,31944,31957,31970,31980,31995],{"__ignoreMap":63},[68,31542,31543],{"class":70,"line":71},[68,31544,31545],{"class":393},"# 建立画图的函数，用于展示数据\n",[68,31547,31548],{"class":70,"line":92},[68,31549,31550],{"class":393},"# torchvision中包含很多内置的数据集\n",[68,31552,31553,31555,31558,31560],{"class":70,"line":1387},[68,31554,30938],{"class":331},[68,31556,31557],{"class":335}," sklearn.externals.array_api_compat.torch ",[68,31559,30593],{"class":331},[68,31561,31562],{"class":335}," squeeze\n",[68,31564,31565,31567,31570,31572],{"class":70,"line":1402},[68,31566,30938],{"class":331},[68,31568,31569],{"class":335}," torchvision.datasets ",[68,31571,30593],{"class":331},[68,31573,31574],{"class":335}," FashionMNIST\n",[68,31576,31577,31579,31582,31585],{"class":70,"line":1408},[68,31578,30593],{"class":331},[68,31580,31581],{"class":335}," numpy ",[68,31583,31584],{"class":331},"as",[68,31586,31587],{"class":335}," np\n",[68,31589,31590],{"class":70,"line":1422},[68,31591,31592],{"class":393},"# 引入处理数据集的包\n",[68,31594,31595,31597,31600,31602],{"class":70,"line":1428},[68,31596,30938],{"class":331},[68,31598,31599],{"class":335}," torchvision ",[68,31601,30593],{"class":331},[68,31603,31604],{"class":335}," transforms\n",[68,31606,31607],{"class":70,"line":1519},[68,31608,31609],{"class":393},"# 从torch库中引入数据处理的包\n",[68,31611,31612,31614,31617,31619],{"class":70,"line":1525},[68,31613,30593],{"class":331},[68,31615,31616],{"class":335}," torch.utils.data ",[68,31618,31584],{"class":331},[68,31620,31621],{"class":335}," Data\n",[68,31623,31624],{"class":70,"line":1537},[68,31625,31626],{"class":393},"# 导入画图的库\n",[68,31628,31629,31631,31634,31636],{"class":70,"line":1819},[68,31630,30593],{"class":331},[68,31632,31633],{"class":335}," matplotlib.pyplot ",[68,31635,31584],{"class":331},[68,31637,31638],{"class":335}," plt\n",[68,31640,31641],{"class":70,"line":1824},[68,31642,2606],{"emptyLinePlaceholder":260},[68,31644,31645],{"class":70,"line":1830},[68,31646,2606],{"emptyLinePlaceholder":260},[68,31648,31649,31652,31654,31657,31660,31662,31665],{"class":70,"line":1835},[68,31650,31651],{"class":335},"train_data",[68,31653,381],{"class":331},[68,31655,31656],{"class":335},"FashionMNIST(",[68,31658,31659],{"class":5421},"root",[68,31661,381],{"class":331},[68,31663,31664],{"class":78},"'.\u002Fdata'",[68,31666,31667],{"class":335},",\n",[68,31669,31670,31673,31675,31678],{"class":70,"line":1849},[68,31671,31672],{"class":5421},"                        train",[68,31674,381],{"class":331},[68,31676,31677],{"class":82},"True",[68,31679,31667],{"class":335},[68,31681,31682],{"class":70,"line":1854},[68,31683,31684],{"class":393},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[68,31686,31687,31690,31692,31695,31698,31700,31703],{"class":70,"line":1860},[68,31688,31689],{"class":5421},"                        transform",[68,31691,381],{"class":331},[68,31693,31694],{"class":335},"transforms.Compose([transforms.Resize(",[68,31696,31697],{"class":5421},"size",[68,31699,381],{"class":331},[68,31701,31702],{"class":82},"224",[68,31704,31705],{"class":335},"),transforms.ToTensor()]),\n",[68,31707,31708,31711,31713,31715],{"class":70,"line":1881},[68,31709,31710],{"class":5421},"                        download",[68,31712,381],{"class":331},[68,31714,31677],{"class":82},[68,31716,342],{"class":335},[68,31718,31719],{"class":70,"line":1886},[68,31720,2606],{"emptyLinePlaceholder":260},[68,31722,31723],{"class":70,"line":1900},[68,31724,31725],{"class":393},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[68,31727,31728,31731,31733,31736,31739,31741],{"class":70,"line":1905},[68,31729,31730],{"class":335},"train_loader",[68,31732,381],{"class":331},[68,31734,31735],{"class":335},"Data.DataLoader(",[68,31737,31738],{"class":5421},"dataset",[68,31740,381],{"class":331},[68,31742,31743],{"class":335},"train_data,\n",[68,31745,31746,31749,31751,31753],{"class":70,"line":1934},[68,31747,31748],{"class":5421},"                             batch_size",[68,31750,381],{"class":331},[68,31752,537],{"class":82},[68,31754,31667],{"class":335},[68,31756,31757],{"class":70,"line":1939},[68,31758,31759],{"class":393},"                             # 数据是否打乱\n",[68,31761,31762,31765,31767,31769],{"class":70,"line":1956},[68,31763,31764],{"class":5421},"                             shuffle",[68,31766,381],{"class":331},[68,31768,31677],{"class":82},[68,31770,31667],{"class":335},[68,31772,31773],{"class":70,"line":1961},[68,31774,31775],{"class":393},"                             # 规定加载数据的进程\n",[68,31777,31778,31781,31783,31785],{"class":70,"line":1966},[68,31779,31780],{"class":5421},"                             num_workers",[68,31782,381],{"class":331},[68,31784,525],{"class":82},[68,31786,342],{"class":335},[68,31788,31789],{"class":70,"line":1971},[68,31790,2606],{"emptyLinePlaceholder":260},[68,31792,31793],{"class":70,"line":1985},[68,31794,31795],{"class":393},"# 获得一个batch的数据\n",[68,31797,31798,31800,31803,31805,31808],{"class":70,"line":1990},[68,31799,3231],{"class":331},[68,31801,31802],{"class":335}," step,(b_x,b_y) ",[68,31804,26247],{"class":331},[68,31806,31807],{"class":82}," enumerate",[68,31809,31810],{"class":335},"(train_loader):\n",[68,31812,31813,31815,31818,31820,31822],{"class":70,"line":2783},[68,31814,3307],{"class":331},[68,31816,31817],{"class":335}," step ",[68,31819,1293],{"class":331},[68,31821,4299],{"class":82},[68,31823,3945],{"class":335},[68,31825,31826],{"class":70,"line":2797},[68,31827,31828],{"class":331},"        break\n",[68,31830,31831],{"class":70,"line":2805},[68,31832,31833],{"class":393},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[68,31835,31836,31839,31841,31844],{"class":70,"line":2810},[68,31837,31838],{"class":335},"batch_x",[68,31840,381],{"class":331},[68,31842,31843],{"class":335},"b_x.squeeze().numpy()  ",[68,31845,31846],{"class":393},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[68,31848,31849,31852,31854,31857],{"class":70,"line":2816},[68,31850,31851],{"class":335},"batch_y",[68,31853,381],{"class":331},[68,31855,31856],{"class":335},"b_y.numpy()   ",[68,31858,31859],{"class":393},"#将张量转换成功numpy数组\n",[68,31861,31862,31865,31867,31870],{"class":70,"line":2822},[68,31863,31864],{"class":335},"class_label",[68,31866,381],{"class":331},[68,31868,31869],{"class":335},"train_data.classes  ",[68,31871,31872],{"class":393},"#训练集标签\n",[68,31874,31875],{"class":70,"line":2827},[68,31876,31877],{"class":393},"# print(class_label)\n",[68,31879,31880],{"class":70,"line":8153},[68,31881,2606],{"emptyLinePlaceholder":260},[68,31883,31884],{"class":70,"line":8177},[68,31885,31886],{"class":393},"# 可视化一个batch的图像\n",[68,31888,31889,31892,31895,31897,31899,31901,31903,31905],{"class":70,"line":8182},[68,31890,31891],{"class":335},"plt.figure(",[68,31893,31894],{"class":5421},"figsize",[68,31896,381],{"class":331},[68,31898,336],{"class":335},[68,31900,831],{"class":82},[68,31902,711],{"class":335},[68,31904,652],{"class":82},[68,31906,30698],{"class":335},[68,31908,31909,31911,31914,31916,31919,31921],{"class":70,"line":8188},[68,31910,3231],{"class":331},[68,31912,31913],{"class":335}," ii ",[68,31915,26247],{"class":331},[68,31917,31918],{"class":335}," np.arange(",[68,31920,7563],{"class":82},[68,31922,31923],{"class":335},"(batch_y)):\n",[68,31925,31926,31929,31931,31933,31935,31938,31940,31942],{"class":70,"line":8215},[68,31927,31928],{"class":335},"    plt.subplot(",[68,31930,626],{"class":82},[68,31932,711],{"class":335},[68,31934,934],{"class":82},[68,31936,31937],{"class":335},",ii ",[68,31939,814],{"class":331},[68,31941,25322],{"class":82},[68,31943,342],{"class":335},[68,31945,31946,31949,31952,31954],{"class":70,"line":8220},[68,31947,31948],{"class":335},"    plt.imshow(batch_x[ii,:,:],",[68,31950,31951],{"class":5421},"cmap",[68,31953,381],{"class":331},[68,31955,31956],{"class":335},"plt.cm.gray)\n",[68,31958,31959,31962,31964,31966,31968],{"class":70,"line":8226},[68,31960,31961],{"class":335},"    plt.title(class_label[batch_y[ii]],",[68,31963,31697],{"class":5421},[68,31965,381],{"class":331},[68,31967,779],{"class":82},[68,31969,342],{"class":335},[68,31971,31972,31975,31978],{"class":70,"line":8238},[68,31973,31974],{"class":335},"    plt.axis(",[68,31976,31977],{"class":78},"\"off\"",[68,31979,342],{"class":335},[68,31981,31982,31985,31988,31990,31993],{"class":70,"line":8250},[68,31983,31984],{"class":335},"    plt.subplots_adjust(",[68,31986,31987],{"class":5421},"wspace",[68,31989,381],{"class":331},[68,31991,31992],{"class":82},"0.05",[68,31994,342],{"class":335},[68,31996,31997],{"class":70,"line":8262},[68,31998,31999],{"class":335},"plt.show()\n",[19,32001,32002],{},"用matplotlib进行展示的过程可以后续再补",[19,32004,32005],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32007,32008],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32010,32011],{},"模型训练：",[58,32013,32015],{"className":30579,"code":32014,"language":30581,"meta":63,"style":63},"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",[65,32016,32017,32024,32031,32035,32047,32053,32064,32074,32084,32094,32104,32109,32121,32131,32135,32139,32144,32155,32168,32179,32196,32207,32246,32262,32274,32285,32290,32301,32317,32328,32339,32350,32357,32361,32366,32371,32375,32380,32390,32411,32415,32419,32424,32429,32434,32454,32458,32463,32473,32477,32482,32491,32496,32501,32506,32516,32520,32524,32529,32534,32544,32549,32559,32564,32573,32578,32587,32592,32601,32605,32610,32620,32624,32628,32633,32648,32676,32691,32695,32700,32705,32714,32719,32728,32733,32742,32747,32756,32761,32770,32775,32784,32789,32802,32807,32817,32822,32832,32838,32844,32850,32856,32867,32873,32893,32899,32910,32916,32922,32928,32934,32940,32946,32952,32972,32978,32994,33000,33014,33020,33035,33041,33050,33056,33065,33071,33077,33086,33092,33103,33109,33128,33134,33145,33151,33171,33187,33193,33207,33213,33219,33230,33236,33242,33252,33258,33269,33275,33285,33290,33296,33345,33392,33397,33403,33422,33428,33448,33454,33460,33470,33475,33481,33497,33542,33548,33554,33560,33571,33577,33583,33589,33607,33621,33630,33639,33648,33657,33663,33669,33677,33682,33688,33699,33705,33725,33731,33737,33743,33760,33766,33772,33778,33784,33790,33817,33841,33847,33853,33859,33870,33881,33887,33904,33927,33950,33956,33961,33970,33980,33986,33991,33997,34010,34016,34027,34038,34057],{"__ignoreMap":63},[68,32018,32019,32021],{"class":70,"line":71},[68,32020,30593],{"class":331},[68,32022,32023],{"class":335}," copy\n",[68,32025,32026,32028],{"class":70,"line":92},[68,32027,30593],{"class":331},[68,32029,32030],{"class":335}," time\n",[68,32032,32033],{"class":70,"line":1387},[68,32034,2606],{"emptyLinePlaceholder":260},[68,32036,32037,32039,32042,32044],{"class":70,"line":1402},[68,32038,30593],{"class":331},[68,32040,32041],{"class":335}," pandas ",[68,32043,31584],{"class":331},[68,32045,32046],{"class":335}," pd\n",[68,32048,32049,32051],{"class":70,"line":1408},[68,32050,30593],{"class":331},[68,32052,30596],{"class":335},[68,32054,32055,32057,32059,32061],{"class":70,"line":1422},[68,32056,30938],{"class":331},[68,32058,31616],{"class":335},[68,32060,30593],{"class":331},[68,32062,32063],{"class":335}," Dataset\n",[68,32065,32066,32068,32070,32072],{"class":70,"line":1428},[68,32067,30938],{"class":331},[68,32069,31569],{"class":335},[68,32071,30593],{"class":331},[68,32073,31574],{"class":335},[68,32075,32076,32078,32080,32082],{"class":70,"line":1519},[68,32077,30938],{"class":331},[68,32079,31599],{"class":335},[68,32081,30593],{"class":331},[68,32083,31604],{"class":335},[68,32085,32086,32088,32090,32092],{"class":70,"line":1525},[68,32087,30593],{"class":331},[68,32089,31616],{"class":335},[68,32091,31584],{"class":331},[68,32093,31621],{"class":335},[68,32095,32096,32098,32100,32102],{"class":70,"line":1537},[68,32097,30593],{"class":331},[68,32099,31633],{"class":335},[68,32101,31584],{"class":331},[68,32103,31638],{"class":335},[68,32105,32106],{"class":70,"line":1819},[68,32107,32108],{"class":393},"# 导入模型\n",[68,32110,32111,32113,32116,32118],{"class":70,"line":1824},[68,32112,30938],{"class":331},[68,32114,32115],{"class":335}," model ",[68,32117,30593],{"class":331},[68,32119,32120],{"class":335}," LeNet\n",[68,32122,32123,32125,32127,32129],{"class":70,"line":1830},[68,32124,30938],{"class":331},[68,32126,30941],{"class":335},[68,32128,30593],{"class":331},[68,32130,30946],{"class":335},[68,32132,32133],{"class":70,"line":1835},[68,32134,2606],{"emptyLinePlaceholder":260},[68,32136,32137],{"class":70,"line":1849},[68,32138,2606],{"emptyLinePlaceholder":260},[68,32140,32141],{"class":70,"line":1854},[68,32142,32143],{"class":393},"# 处理训练集与验证集函数--->划分数据集\n",[68,32145,32146,32149,32152],{"class":70,"line":1860},[68,32147,32148],{"class":331},"def",[68,32150,32151],{"class":74}," train_val_data_process",[68,32153,32154],{"class":335},"():\n",[68,32156,32157,32160,32162,32164,32166],{"class":70,"line":1881},[68,32158,32159],{"class":335},"    train_data",[68,32161,381],{"class":331},[68,32163,31656],{"class":335},[68,32165,31664],{"class":78},[68,32167,31667],{"class":335},[68,32169,32170,32173,32175,32177],{"class":70,"line":1886},[68,32171,32172],{"class":5421},"                            train",[68,32174,381],{"class":331},[68,32176,31677],{"class":82},[68,32178,31667],{"class":335},[68,32180,32181,32184,32186,32188,32190,32192,32194],{"class":70,"line":1900},[68,32182,32183],{"class":5421},"                            transform",[68,32185,381],{"class":331},[68,32187,31694],{"class":335},[68,32189,31697],{"class":5421},[68,32191,381],{"class":331},[68,32193,1234],{"class":82},[68,32195,31705],{"class":335},[68,32197,32198,32201,32203,32205],{"class":70,"line":1905},[68,32199,32200],{"class":5421},"                            download",[68,32202,381],{"class":331},[68,32204,31677],{"class":82},[68,32206,342],{"class":335},[68,32208,32209,32212,32214,32217,32220,32222,32225,32227,32229,32232,32234,32236,32239,32241,32243],{"class":70,"line":1934},[68,32210,32211],{"class":335},"    train_data,val_data",[68,32213,381],{"class":331},[68,32215,32216],{"class":335},"Data.random_split(train_data,[",[68,32218,32219],{"class":82},"round",[68,32221,336],{"class":335},[68,32223,32224],{"class":82},"0.8",[68,32226,788],{"class":331},[68,32228,7563],{"class":82},[68,32230,32231],{"class":335},"(train_data)),",[68,32233,32219],{"class":82},[68,32235,336],{"class":335},[68,32237,32238],{"class":82},"0.2",[68,32240,788],{"class":331},[68,32242,7563],{"class":82},[68,32244,32245],{"class":335},"(train_data))])\n",[68,32247,32248,32251,32253,32256,32258,32260],{"class":70,"line":1939},[68,32249,32250],{"class":335},"    train_dataloader ",[68,32252,381],{"class":331},[68,32254,32255],{"class":335}," Data.DataLoader(",[68,32257,31738],{"class":5421},[68,32259,381],{"class":331},[68,32261,31743],{"class":335},[68,32263,32264,32267,32269,32272],{"class":70,"line":1956},[68,32265,32266],{"class":5421},"                                       batch_size",[68,32268,381],{"class":331},[68,32270,32271],{"class":82},"128",[68,32273,31667],{"class":335},[68,32275,32276,32279,32281,32283],{"class":70,"line":1961},[68,32277,32278],{"class":5421},"                                       shuffle",[68,32280,381],{"class":331},[68,32282,31677],{"class":82},[68,32284,31667],{"class":335},[68,32286,32287],{"class":70,"line":1966},[68,32288,32289],{"class":393},"                                       # 规定8个进程\n",[68,32291,32292,32295,32297,32299],{"class":70,"line":1971},[68,32293,32294],{"class":5421},"                                       num_workers",[68,32296,381],{"class":331},[68,32298,728],{"class":82},[68,32300,342],{"class":335},[68,32302,32303,32306,32308,32310,32312,32314],{"class":70,"line":1985},[68,32304,32305],{"class":335},"    val_dataloader",[68,32307,381],{"class":331},[68,32309,31735],{"class":335},[68,32311,31738],{"class":5421},[68,32313,381],{"class":331},[68,32315,32316],{"class":335},"val_data,\n",[68,32318,32319,32322,32324,32326],{"class":70,"line":1990},[68,32320,32321],{"class":5421},"                                   batch_size",[68,32323,381],{"class":331},[68,32325,32271],{"class":82},[68,32327,31667],{"class":335},[68,32329,32330,32333,32335,32337],{"class":70,"line":2783},[68,32331,32332],{"class":5421},"                                   shuffle",[68,32334,381],{"class":331},[68,32336,31677],{"class":82},[68,32338,31667],{"class":335},[68,32340,32341,32344,32346,32348],{"class":70,"line":2797},[68,32342,32343],{"class":5421},"                                   num_workers",[68,32345,381],{"class":331},[68,32347,728],{"class":82},[68,32349,342],{"class":335},[68,32351,32352,32354],{"class":70,"line":2805},[68,32353,4296],{"class":331},[68,32355,32356],{"class":335}," train_dataloader,val_dataloader\n",[68,32358,32359],{"class":70,"line":2810},[68,32360,2606],{"emptyLinePlaceholder":260},[68,32362,32363],{"class":70,"line":2816},[68,32364,32365],{"class":393},"# 验证是否出错\n",[68,32367,32368],{"class":70,"line":2822},[68,32369,32370],{"class":393},"# train_val_data_process()\n",[68,32372,32373],{"class":70,"line":2827},[68,32374,2606],{"emptyLinePlaceholder":260},[68,32376,32377],{"class":70,"line":8153},[68,32378,32379],{"class":393},"# 定义模型训练函数\n",[68,32381,32382,32384,32387],{"class":70,"line":8177},[68,32383,32148],{"class":331},[68,32385,32386],{"class":74}," train_model_process",[68,32388,32389],{"class":335},"(model,train_dataloader,val_dataloader,num_epochs):\n",[68,32391,32392,32394,32396,32398,32400,32402,32404,32406,32409],{"class":70,"line":8182},[68,32393,31438],{"class":335},[68,32395,381],{"class":331},[68,32397,30652],{"class":335},[68,32399,31445],{"class":78},[68,32401,1911],{"class":331},[68,32403,31450],{"class":335},[68,32405,1908],{"class":331},[68,32407,32408],{"class":78}," 'cpu'",[68,32410,342],{"class":335},[68,32412,32413],{"class":70,"line":8188},[68,32414,2606],{"emptyLinePlaceholder":260},[68,32416,32417],{"class":70,"line":8215},[68,32418,2606],{"emptyLinePlaceholder":260},[68,32420,32421],{"class":70,"line":8220},[68,32422,32423],{"class":393},"    # 定义优化器\n",[68,32425,32426],{"class":70,"line":8226},[68,32427,32428],{"class":393},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[68,32430,32431],{"class":70,"line":8238},[68,32432,32433],{"class":393},"    # lr为学习率\n",[68,32435,32436,32439,32441,32444,32447,32449,32452],{"class":70,"line":8250},[68,32437,32438],{"class":335},"    optimizer",[68,32440,381],{"class":331},[68,32442,32443],{"class":335},"torch.optim.Adam(model.parameters(),",[68,32445,32446],{"class":5421},"lr",[68,32448,381],{"class":331},[68,32450,32451],{"class":82},"0.001",[68,32453,342],{"class":335},[68,32455,32456],{"class":70,"line":8262},[68,32457,2606],{"emptyLinePlaceholder":260},[68,32459,32460],{"class":70,"line":9921},[68,32461,32462],{"class":393},"    # 定义损失函数使用交叉熵损失函数\n",[68,32464,32465,32468,32470],{"class":70,"line":9946},[68,32466,32467],{"class":335},"    criterion",[68,32469,381],{"class":331},[68,32471,32472],{"class":335},"nn.CrossEntropyLoss()\n",[68,32474,32475],{"class":70,"line":9969},[68,32476,2606],{"emptyLinePlaceholder":260},[68,32478,32479],{"class":70,"line":9993},[68,32480,32481],{"class":393},"    # 将模型放到GPU中进行训练\n",[68,32483,32484,32486,32488],{"class":70,"line":9998},[68,32485,31490],{"class":335},[68,32487,381],{"class":331},[68,32489,32490],{"class":335},"model.to(device)\n",[68,32492,32493],{"class":70,"line":10003},[68,32494,32495],{"class":393},"    # 复制当前模型的参数\n",[68,32497,32498],{"class":70,"line":10008},[68,32499,32500],{"class":393},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[68,32502,32503],{"class":70,"line":10017},[68,32504,32505],{"class":393},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[68,32507,32508,32511,32513],{"class":70,"line":10022},[68,32509,32510],{"class":335},"    best_model_wts",[68,32512,381],{"class":331},[68,32514,32515],{"class":335},"copy.deepcopy(model.state_dict())\n",[68,32517,32518],{"class":70,"line":10028},[68,32519,2606],{"emptyLinePlaceholder":260},[68,32521,32522],{"class":70,"line":10049},[68,32523,2606],{"emptyLinePlaceholder":260},[68,32525,32526],{"class":70,"line":10055},[68,32527,32528],{"class":393},"    # 初始化参数\n",[68,32530,32531],{"class":70,"line":10069},[68,32532,32533],{"class":393},"    # 最高准确度\n",[68,32535,32536,32539,32541],{"class":70,"line":10075},[68,32537,32538],{"class":335},"    best_acc",[68,32540,381],{"class":331},[68,32542,32543],{"class":82},"0.0\n",[68,32545,32546],{"class":70,"line":10102},[68,32547,32548],{"class":393},"    # 训练集损失列表\n",[68,32550,32551,32554,32556],{"class":70,"line":10111},[68,32552,32553],{"class":335},"    train_loss_all",[68,32555,381],{"class":331},[68,32557,32558],{"class":335},"[]\n",[68,32560,32561],{"class":70,"line":10117},[68,32562,32563],{"class":393},"    # 验证集函数列表\n",[68,32565,32566,32569,32571],{"class":70,"line":10125},[68,32567,32568],{"class":335},"    val_loss_all",[68,32570,381],{"class":331},[68,32572,32558],{"class":335},[68,32574,32575],{"class":70,"line":10130},[68,32576,32577],{"class":393},"    # 训练集准确度列表\n",[68,32579,32580,32583,32585],{"class":70,"line":16809},[68,32581,32582],{"class":335},"    train_acc_all",[68,32584,381],{"class":331},[68,32586,32558],{"class":335},[68,32588,32589],{"class":70,"line":16815},[68,32590,32591],{"class":393},"    # 验证集准确度列表\n",[68,32593,32594,32597,32599],{"class":70,"line":16838},[68,32595,32596],{"class":335},"    val_acc_all",[68,32598,381],{"class":331},[68,32600,32558],{"class":335},[68,32602,32603],{"class":70,"line":16844},[68,32604,2606],{"emptyLinePlaceholder":260},[68,32606,32607],{"class":70,"line":16867},[68,32608,32609],{"class":393},"    # 保存当前时间--->方便看每轮训练的时间\n",[68,32611,32612,32615,32617],{"class":70,"line":16881},[68,32613,32614],{"class":335},"    since",[68,32616,381],{"class":331},[68,32618,32619],{"class":335},"time.time()\n",[68,32621,32622],{"class":70,"line":16901},[68,32623,2606],{"emptyLinePlaceholder":260},[68,32625,32626],{"class":70,"line":16907},[68,32627,2606],{"emptyLinePlaceholder":260},[68,32629,32630],{"class":70,"line":16918},[68,32631,32632],{"class":393},"    # 准备工作完成--->开始训练模型\n",[68,32634,32635,32637,32640,32642,32645],{"class":70,"line":16941},[68,32636,3407],{"class":331},[68,32638,32639],{"class":335}," epoch ",[68,32641,26247],{"class":331},[68,32643,32644],{"class":82}," range",[68,32646,32647],{"class":335},"(num_epochs):\n",[68,32649,32650,32653,32655,32658,32661,32663,32665,32667,32670,32672,32674],{"class":70,"line":16963},[68,32651,32652],{"class":82},"        print",[68,32654,336],{"class":335},[68,32656,32657],{"class":78},"\"Epoch ",[68,32659,32660],{"class":82},"{}",[68,32662,917],{"class":78},[68,32664,32660],{"class":82},[68,32666,584],{"class":78},[68,32668,32669],{"class":335},".format(epoch,num_epochs",[68,32671,865],{"class":331},[68,32673,551],{"class":82},[68,32675,30698],{"class":335},[68,32677,32678,32680,32682,32685,32687,32689],{"class":70,"line":16968},[68,32679,32652],{"class":82},[68,32681,336],{"class":335},[68,32683,32684],{"class":78},"\"-\"",[68,32686,788],{"class":331},[68,32688,779],{"class":82},[68,32690,342],{"class":335},[68,32692,32693],{"class":70,"line":16974},[68,32694,2606],{"emptyLinePlaceholder":260},[68,32696,32697],{"class":70,"line":16988},[68,32698,32699],{"class":393},"        # 初始化参数\n",[68,32701,32702],{"class":70,"line":17001},[68,32703,32704],{"class":393},"        # 训练集损失函数\n",[68,32706,32707,32710,32712],{"class":70,"line":17006},[68,32708,32709],{"class":335},"        train_loss",[68,32711,381],{"class":331},[68,32713,32543],{"class":82},[68,32715,32716],{"class":70,"line":17020},[68,32717,32718],{"class":393},"        # 训练集准确度\n",[68,32720,32721,32724,32726],{"class":70,"line":17025},[68,32722,32723],{"class":335},"        train_corrects",[68,32725,381],{"class":331},[68,32727,3291],{"class":82},[68,32729,32730],{"class":70,"line":17031},[68,32731,32732],{"class":393},"        # 验证集损失函数\n",[68,32734,32735,32738,32740],{"class":70,"line":17036},[68,32736,32737],{"class":335},"        val_loss",[68,32739,381],{"class":331},[68,32741,32543],{"class":82},[68,32743,32744],{"class":70,"line":17050},[68,32745,32746],{"class":393},"        # 验证集准确度\n",[68,32748,32749,32752,32754],{"class":70,"line":17055},[68,32750,32751],{"class":335},"        val_corrects",[68,32753,381],{"class":331},[68,32755,3291],{"class":82},[68,32757,32758],{"class":70,"line":17060},[68,32759,32760],{"class":393},"        # 训练集样本数量\n",[68,32762,32763,32766,32768],{"class":70,"line":17074},[68,32764,32765],{"class":335},"        train_num",[68,32767,381],{"class":331},[68,32769,3291],{"class":82},[68,32771,32772],{"class":70,"line":17086},[68,32773,32774],{"class":393},"        # 验证集样本数量\n",[68,32776,32777,32780,32782],{"class":70,"line":17091},[68,32778,32779],{"class":335},"        val_num",[68,32781,381],{"class":331},[68,32783,3291],{"class":82},[68,32785,32786],{"class":70,"line":17104},[68,32787,32788],{"class":393},"        # 将数据放到设备,并开始训练\n",[68,32790,32791,32793,32795,32797,32799],{"class":70,"line":17109},[68,32792,3609],{"class":331},[68,32794,31802],{"class":335},[68,32796,26247],{"class":331},[68,32798,31807],{"class":82},[68,32800,32801],{"class":335},"(train_dataloader):\n",[68,32803,32804],{"class":70,"line":17114},[68,32805,32806],{"class":393},"            # 将特征放入到训练设备\n",[68,32808,32809,32812,32814],{"class":70,"line":17119},[68,32810,32811],{"class":335},"            b_x",[68,32813,381],{"class":331},[68,32815,32816],{"class":335},"b_x.to(device)\n",[68,32818,32819],{"class":70,"line":17132},[68,32820,32821],{"class":393},"            # 将标签放入到训练设备当中\n",[68,32823,32824,32827,32829],{"class":70,"line":17137},[68,32825,32826],{"class":335},"            b_y",[68,32828,381],{"class":331},[68,32830,32831],{"class":335},"b_y.to(device)\n",[68,32833,32835],{"class":70,"line":32834},98,[68,32836,32837],{"class":393},"            # 设置模型为训练模式\n",[68,32839,32841],{"class":70,"line":32840},99,[68,32842,32843],{"class":335},"            model.train()\n",[68,32845,32847],{"class":70,"line":32846},100,[68,32848,32849],{"class":393},"            # 将数据放到模型当中,开始前向传播\n",[68,32851,32853],{"class":70,"line":32852},101,[68,32854,32855],{"class":393},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[68,32857,32859,32862,32864],{"class":70,"line":32858},102,[68,32860,32861],{"class":335},"            output",[68,32863,381],{"class":331},[68,32865,32866],{"class":335},"model(b_x)\n",[68,32868,32870],{"class":70,"line":32869},103,[68,32871,32872],{"class":393},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[68,32874,32876,32879,32881,32884,32887,32889,32891],{"class":70,"line":32875},104,[68,32877,32878],{"class":335},"            pre_lab",[68,32880,381],{"class":331},[68,32882,32883],{"class":335},"torch.argmax(output,",[68,32885,32886],{"class":5421},"dim",[68,32888,381],{"class":331},[68,32890,551],{"class":82},[68,32892,342],{"class":335},[68,32894,32896],{"class":70,"line":32895},105,[68,32897,32898],{"class":393},"            # 计算每一个batch的损失函数\n",[68,32900,32902,32905,32907],{"class":70,"line":32901},106,[68,32903,32904],{"class":335},"            loss",[68,32906,381],{"class":331},[68,32908,32909],{"class":335},"criterion(output,b_y)\n",[68,32911,32913],{"class":70,"line":32912},107,[68,32914,32915],{"class":393},"            # 将梯度初始化为0\n",[68,32917,32919],{"class":70,"line":32918},108,[68,32920,32921],{"class":335},"            optimizer.zero_grad()\n",[68,32923,32925],{"class":70,"line":32924},109,[68,32926,32927],{"class":393},"            # 梯度置为0后再进行反向传播\n",[68,32929,32931],{"class":70,"line":32930},110,[68,32932,32933],{"class":335},"            loss.backward()\n",[68,32935,32937],{"class":70,"line":32936},111,[68,32938,32939],{"class":393},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[68,32941,32943],{"class":70,"line":32942},112,[68,32944,32945],{"class":335},"            optimizer.step()\n",[68,32947,32949],{"class":70,"line":32948},113,[68,32950,32951],{"class":393},"            # loss.item()指的是batch的平均损失\n",[68,32953,32955,32958,32960,32963,32965,32968,32970],{"class":70,"line":32954},114,[68,32956,32957],{"class":335},"            train_loss",[68,32959,9682],{"class":331},[68,32961,32962],{"class":335},"loss.item()",[68,32964,788],{"class":331},[68,32966,32967],{"class":335},"b_x.size(",[68,32969,525],{"class":82},[68,32971,342],{"class":335},[68,32973,32975],{"class":70,"line":32974},115,[68,32976,32977],{"class":393},"            # 计算每个批次中正确预测的数量\n",[68,32979,32981,32984,32986,32989,32991],{"class":70,"line":32980},116,[68,32982,32983],{"class":335},"            train_corrects",[68,32985,9682],{"class":331},[68,32987,32988],{"class":335},"torch.sum(pre_lab",[68,32990,3155],{"class":331},[68,32992,32993],{"class":335},"b_y.data)\n",[68,32995,32997],{"class":70,"line":32996},117,[68,32998,32999],{"class":393},"            # 计算目前为止一共处理了多少样本\n",[68,33001,33003,33006,33008,33010,33012],{"class":70,"line":33002},118,[68,33004,33005],{"class":335},"            train_num",[68,33007,9682],{"class":331},[68,33009,32967],{"class":335},[68,33011,525],{"class":82},[68,33013,342],{"class":335},[68,33015,33017],{"class":70,"line":33016},119,[68,33018,33019],{"class":393},"        # 验证数据\n",[68,33021,33023,33025,33028,33030,33032],{"class":70,"line":33022},120,[68,33024,3609],{"class":331},[68,33026,33027],{"class":335}," step ,(b_x,b_y) ",[68,33029,26247],{"class":331},[68,33031,31807],{"class":82},[68,33033,33034],{"class":335},"(val_dataloader):\n",[68,33036,33038],{"class":70,"line":33037},121,[68,33039,33040],{"class":393},"            # 将特征放到验证设备当中\n",[68,33042,33044,33046,33048],{"class":70,"line":33043},122,[68,33045,32811],{"class":335},[68,33047,381],{"class":331},[68,33049,32816],{"class":335},[68,33051,33053],{"class":70,"line":33052},123,[68,33054,33055],{"class":393},"            # 将标签放到放到训练设备当中\n",[68,33057,33059,33061,33063],{"class":70,"line":33058},124,[68,33060,32826],{"class":335},[68,33062,381],{"class":331},[68,33064,32831],{"class":335},[68,33066,33068],{"class":70,"line":33067},125,[68,33069,33070],{"class":393},"            # 开启验证模式，设置模型为评估模式\n",[68,33072,33074],{"class":70,"line":33073},126,[68,33075,33076],{"class":335},"            model.eval()\n",[68,33078,33080,33083],{"class":70,"line":33079},127,[68,33081,33082],{"class":331},"            with",[68,33084,33085],{"class":335}," torch.no_grad():\n",[68,33087,33089],{"class":70,"line":33088},128,[68,33090,33091],{"class":393},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[68,33093,33095,33098,33100],{"class":70,"line":33094},129,[68,33096,33097],{"class":335},"                output ",[68,33099,381],{"class":331},[68,33101,33102],{"class":335}," model(b_x)\n",[68,33104,33106],{"class":70,"line":33105},130,[68,33107,33108],{"class":393},"                # 查找每一行中最大值对应的下标\n",[68,33110,33112,33115,33117,33120,33122,33124,33126],{"class":70,"line":33111},131,[68,33113,33114],{"class":335},"                pre_lab ",[68,33116,381],{"class":331},[68,33118,33119],{"class":335}," torch.argmax(output, ",[68,33121,32886],{"class":5421},[68,33123,381],{"class":331},[68,33125,551],{"class":82},[68,33127,342],{"class":335},[68,33129,33131],{"class":70,"line":33130},132,[68,33132,33133],{"class":393},"                # 计算验证集上的当前 batch 损失\n",[68,33135,33137,33140,33142],{"class":70,"line":33136},133,[68,33138,33139],{"class":335},"                val_batch_loss ",[68,33141,381],{"class":331},[68,33143,33144],{"class":335}," criterion(output, b_y)\n",[68,33146,33148],{"class":70,"line":33147},134,[68,33149,33150],{"class":393},"                # 对损失函数进行累加（按样本数加权）\n",[68,33152,33154,33157,33159,33162,33164,33167,33169],{"class":70,"line":33153},135,[68,33155,33156],{"class":335},"                val_loss ",[68,33158,9682],{"class":331},[68,33160,33161],{"class":335}," val_batch_loss.item() ",[68,33163,788],{"class":331},[68,33165,33166],{"class":335}," b_x.size(",[68,33168,525],{"class":82},[68,33170,342],{"class":335},[68,33172,33174,33177,33179,33182,33184],{"class":70,"line":33173},136,[68,33175,33176],{"class":335},"                val_corrects ",[68,33178,9682],{"class":331},[68,33180,33181],{"class":335}," torch.sum(pre_lab ",[68,33183,3155],{"class":331},[68,33185,33186],{"class":335}," b_y.data)\n",[68,33188,33190],{"class":70,"line":33189},137,[68,33191,33192],{"class":393},"                # 当前用于验证的样本数量\n",[68,33194,33196,33199,33201,33203,33205],{"class":70,"line":33195},138,[68,33197,33198],{"class":335},"            val_num ",[68,33200,9682],{"class":331},[68,33202,33166],{"class":335},[68,33204,525],{"class":82},[68,33206,342],{"class":335},[68,33208,33210],{"class":70,"line":33209},139,[68,33211,33212],{"class":393},"        # 计算并保存每一次迭代的loss值和准确率\n",[68,33214,33216],{"class":70,"line":33215},140,[68,33217,33218],{"class":393},"        # 计算并保存训练集的loss值\n",[68,33220,33222,33225,33227],{"class":70,"line":33221},141,[68,33223,33224],{"class":335},"        train_loss_all.append(train_loss",[68,33226,917],{"class":331},[68,33228,33229],{"class":335},"train_num)\n",[68,33231,33233],{"class":70,"line":33232},142,[68,33234,33235],{"class":393},"        # 取双精度\n",[68,33237,33239],{"class":70,"line":33238},143,[68,33240,33241],{"class":393},"        # 计算并保存训练集的准确率\n",[68,33243,33245,33248,33250],{"class":70,"line":33244},144,[68,33246,33247],{"class":335},"        train_acc_all.append(train_corrects.double().item()",[68,33249,917],{"class":331},[68,33251,33229],{"class":335},[68,33253,33255],{"class":70,"line":33254},145,[68,33256,33257],{"class":393},"        # 计算并保存验证集的loss值\n",[68,33259,33261,33264,33266],{"class":70,"line":33260},146,[68,33262,33263],{"class":335},"        val_loss_all.append(val_loss",[68,33265,917],{"class":331},[68,33267,33268],{"class":335},"val_num)\n",[68,33270,33272],{"class":70,"line":33271},147,[68,33273,33274],{"class":393},"        # 计算并保存验证集的准确率\n",[68,33276,33278,33281,33283],{"class":70,"line":33277},148,[68,33279,33280],{"class":335},"        val_acc_all.append(val_corrects.double().item()",[68,33282,917],{"class":331},[68,33284,33268],{"class":335},[68,33286,33288],{"class":70,"line":33287},149,[68,33289,2606],{"emptyLinePlaceholder":260},[68,33291,33293],{"class":70,"line":33292},150,[68,33294,33295],{"class":393},"        # 打印训练一轮的loss值和准确率\n",[68,33297,33299,33301,33303,33305,33307,33310,33312,33315,33317,33320,33322,33324,33326,33328,33331,33333,33335,33338,33340,33342],{"class":70,"line":33298},151,[68,33300,32652],{"class":82},[68,33302,336],{"class":335},[68,33304,3798],{"class":78},[68,33306,32660],{"class":82},[68,33308,33309],{"class":78},"train loss:",[68,33311,1229],{"class":82},[68,33313,33314],{"class":331},":.4f",[68,33316,1279],{"class":82},[68,33318,33319],{"class":78}," train acc:",[68,33321,1229],{"class":82},[68,33323,33314],{"class":331},[68,33325,1279],{"class":82},[68,33327,3798],{"class":78},[68,33329,33330],{"class":335},".format(epoch,train_loss_all[",[68,33332,865],{"class":331},[68,33334,551],{"class":82},[68,33336,33337],{"class":335},"],train_acc_all[",[68,33339,865],{"class":331},[68,33341,551],{"class":82},[68,33343,33344],{"class":335},"]))\n",[68,33346,33348,33350,33352,33354,33356,33359,33361,33363,33365,33368,33370,33372,33374,33376,33379,33381,33383,33386,33388,33390],{"class":70,"line":33347},152,[68,33349,32652],{"class":82},[68,33351,336],{"class":335},[68,33353,3798],{"class":78},[68,33355,32660],{"class":82},[68,33357,33358],{"class":78},"val loss:",[68,33360,1229],{"class":82},[68,33362,33314],{"class":331},[68,33364,1279],{"class":82},[68,33366,33367],{"class":78}," val acc:",[68,33369,1229],{"class":82},[68,33371,33314],{"class":331},[68,33373,1279],{"class":82},[68,33375,3798],{"class":78},[68,33377,33378],{"class":335},".format(epoch,val_loss_all[",[68,33380,865],{"class":331},[68,33382,551],{"class":82},[68,33384,33385],{"class":335},"],val_acc_all[",[68,33387,865],{"class":331},[68,33389,551],{"class":82},[68,33391,33344],{"class":335},[68,33393,33395],{"class":70,"line":33394},153,[68,33396,2606],{"emptyLinePlaceholder":260},[68,33398,33400],{"class":70,"line":33399},154,[68,33401,33402],{"class":393},"        # 判断准确度--->保存最优模型\n",[68,33404,33406,33408,33411,33413,33415,33417,33419],{"class":70,"line":33405},155,[68,33407,2703],{"class":331},[68,33409,33410],{"class":335}," val_acc_all[",[68,33412,865],{"class":331},[68,33414,551],{"class":82},[68,33416,1273],{"class":335},[68,33418,1293],{"class":331},[68,33420,33421],{"class":335},"best_acc:\n",[68,33423,33425],{"class":70,"line":33424},156,[68,33426,33427],{"class":393},"            # 保存当前模型准确度\n",[68,33429,33431,33434,33436,33438,33441,33443,33445],{"class":70,"line":33430},157,[68,33432,33433],{"class":335},"            best_acc:",[68,33435,375],{"class":82},[68,33437,381],{"class":331},[68,33439,33440],{"class":335},"val_acc_all[",[68,33442,865],{"class":331},[68,33444,551],{"class":82},[68,33446,33447],{"class":335},"]\n",[68,33449,33451],{"class":70,"line":33450},158,[68,33452,33453],{"class":393},"            # 保存当前的准确度\n",[68,33455,33457],{"class":70,"line":33456},159,[68,33458,33459],{"class":393},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[68,33461,33463,33466,33468],{"class":70,"line":33462},160,[68,33464,33465],{"class":335},"            best_model_wts",[68,33467,381],{"class":331},[68,33469,32515],{"class":335},[68,33471,33473],{"class":70,"line":33472},161,[68,33474,2606],{"emptyLinePlaceholder":260},[68,33476,33478],{"class":70,"line":33477},162,[68,33479,33480],{"class":393},"        # 计算耗时\n",[68,33482,33484,33487,33489,33492,33494],{"class":70,"line":33483},163,[68,33485,33486],{"class":335},"        time_use",[68,33488,381],{"class":331},[68,33490,33491],{"class":335},"time.time()",[68,33493,865],{"class":331},[68,33495,33496],{"class":335},"since\n",[68,33498,33500,33502,33504,33507,33509,33512,33514,33516,33518,33520,33522,33525,33528,33531,33533,33536,33538,33540],{"class":70,"line":33499},164,[68,33501,32652],{"class":82},[68,33503,336],{"class":335},[68,33505,33506],{"class":78},"'训练和验证耗费的时间",[68,33508,1229],{"class":82},[68,33510,33511],{"class":331},":.0f",[68,33513,1279],{"class":82},[68,33515,877],{"class":78},[68,33517,1229],{"class":82},[68,33519,33511],{"class":331},[68,33521,1279],{"class":82},[68,33523,33524],{"class":78},"s'",[68,33526,33527],{"class":335},".format(time_use",[68,33529,33530],{"class":331},"\u002F\u002F",[68,33532,1240],{"class":82},[68,33534,33535],{"class":335},",time_use",[68,33537,661],{"class":331},[68,33539,1240],{"class":82},[68,33541,30698],{"class":335},[68,33543,33545],{"class":70,"line":33544},165,[68,33546,33547],{"class":393},"    # 选择最优参数\n",[68,33549,33551],{"class":70,"line":33550},166,[68,33552,33553],{"class":393},"    # 加载最高准确率下的模型参数\n",[68,33555,33557],{"class":70,"line":33556},167,[68,33558,33559],{"class":393},"    # model.load_state_dict(best_model_wts)\n",[68,33561,33563,33566,33569],{"class":70,"line":33562},168,[68,33564,33565],{"class":335},"    torch.save(model.state_dict(best_model_wts), ",[68,33567,33568],{"class":78},"'.\u002Fbest_model.pth'",[68,33570,342],{"class":335},[68,33572,33574],{"class":70,"line":33573},169,[68,33575,33576],{"class":393},"    # 或者写成\n",[68,33578,33580],{"class":70,"line":33579},170,[68,33581,33582],{"class":393},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[68,33584,33586],{"class":70,"line":33585},171,[68,33587,33588],{"class":393},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[68,33590,33592,33595,33597,33600,33603,33605],{"class":70,"line":33591},172,[68,33593,33594],{"class":335},"    train_process",[68,33596,381],{"class":331},[68,33598,33599],{"class":335},"pd.DataFrame(",[68,33601,33602],{"class":5421},"data",[68,33604,381],{"class":331},[68,33606,1753],{"class":335},[68,33608,33610,33613,33615,33618],{"class":70,"line":33609},173,[68,33611,33612],{"class":78},"        \"epoch\"",[68,33614,1192],{"class":335},[68,33616,33617],{"class":82},"range",[68,33619,33620],{"class":335},"(num_epochs),\n",[68,33622,33624,33627],{"class":70,"line":33623},174,[68,33625,33626],{"class":78},"        \"train_loss_all\"",[68,33628,33629],{"class":335},":train_loss_all,\n",[68,33631,33633,33636],{"class":70,"line":33632},175,[68,33634,33635],{"class":78},"        \"val_loss_all\"",[68,33637,33638],{"class":335},":val_loss_all,\n",[68,33640,33642,33645],{"class":70,"line":33641},176,[68,33643,33644],{"class":78},"        \"train_acc_all\"",[68,33646,33647],{"class":335},":train_acc_all,\n",[68,33649,33651,33654],{"class":70,"line":33650},177,[68,33652,33653],{"class":78},"        \"val_acc_all\"",[68,33655,33656],{"class":335},":val_acc_all\n",[68,33658,33660],{"class":70,"line":33659},178,[68,33661,33662],{"class":335},"    })\n",[68,33664,33666],{"class":70,"line":33665},179,[68,33667,33668],{"class":393},"    # 返回训练保存的过程\n",[68,33670,33672,33674],{"class":70,"line":33671},180,[68,33673,4296],{"class":331},[68,33675,33676],{"class":335}," train_process\n",[68,33678,33680],{"class":70,"line":33679},181,[68,33681,2606],{"emptyLinePlaceholder":260},[68,33683,33685],{"class":70,"line":33684},182,[68,33686,33687],{"class":393},"# 将loss值和精度按照图片的形式展示出来\n",[68,33689,33691,33693,33696],{"class":70,"line":33690},183,[68,33692,32148],{"class":331},[68,33694,33695],{"class":74}," matplot_acc_loss",[68,33697,33698],{"class":335},"(train_process):\n",[68,33700,33702],{"class":70,"line":33701},184,[68,33703,33704],{"class":393},"    # 设置图的大小\n",[68,33706,33708,33711,33713,33715,33717,33719,33721,33723],{"class":70,"line":33707},185,[68,33709,33710],{"class":335},"    plt.figure(",[68,33712,31894],{"class":5421},[68,33714,381],{"class":331},[68,33716,336],{"class":335},[68,33718,831],{"class":82},[68,33720,711],{"class":335},[68,33722,626],{"class":82},[68,33724,30698],{"class":335},[68,33726,33728],{"class":70,"line":33727},186,[68,33729,33730],{"class":393},"    # 设置图中有几张图\n",[68,33732,33734],{"class":70,"line":33733},187,[68,33735,33736],{"class":393},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[68,33738,33740],{"class":70,"line":33739},188,[68,33741,33742],{"class":393},"    # ①loss图\n",[68,33744,33746,33748,33750,33752,33754,33756,33758],{"class":70,"line":33745},189,[68,33747,31928],{"class":335},[68,33749,551],{"class":82},[68,33751,711],{"class":335},[68,33753,412],{"class":82},[68,33755,711],{"class":335},[68,33757,551],{"class":82},[68,33759,342],{"class":335},[68,33761,33763],{"class":70,"line":33762},190,[68,33764,33765],{"class":393},"    # 补充:\n",[68,33767,33769],{"class":70,"line":33768},191,[68,33770,33771],{"class":393},"    # plt.subplot(nrows, ncols, index)\n",[68,33773,33775],{"class":70,"line":33774},192,[68,33776,33777],{"class":393},"    # nrows：行数\n",[68,33779,33781],{"class":70,"line":33780},193,[68,33782,33783],{"class":393},"    # ncols：列数\n",[68,33785,33787],{"class":70,"line":33786},194,[68,33788,33789],{"class":393},"    # index：目前选中第几个子图（从1开始）\n",[68,33791,33793,33796,33799,33802,33805,33807,33810,33812,33815],{"class":70,"line":33792},195,[68,33794,33795],{"class":335},"    plt.plot(train_process[",[68,33797,33798],{"class":78},"\"epoch\"",[68,33800,33801],{"class":335},"],train_process.train_loss_all,",[68,33803,33804],{"class":78},"'ro-'",[68,33806,711],{"class":335},[68,33808,33809],{"class":5421},"label",[68,33811,381],{"class":331},[68,33813,33814],{"class":78},"'train loss'",[68,33816,342],{"class":335},[68,33818,33820,33822,33824,33827,33830,33832,33834,33836,33839],{"class":70,"line":33819},196,[68,33821,33795],{"class":335},[68,33823,33798],{"class":78},[68,33825,33826],{"class":335},"],train_process.val_loss_all,",[68,33828,33829],{"class":78},"'bs--'",[68,33831,711],{"class":335},[68,33833,33809],{"class":5421},[68,33835,381],{"class":331},[68,33837,33838],{"class":78},"'val loss'",[68,33840,342],{"class":335},[68,33842,33844],{"class":70,"line":33843},197,[68,33845,33846],{"class":393},"    # 添加一个图例\n",[68,33848,33850],{"class":70,"line":33849},198,[68,33851,33852],{"class":335},"    plt.legend()\n",[68,33854,33856],{"class":70,"line":33855},199,[68,33857,33858],{"class":393},"    # 给轴添加标签\n",[68,33860,33862,33865,33868],{"class":70,"line":33861},200,[68,33863,33864],{"class":335},"    plt.xlabel(",[68,33866,33867],{"class":78},"'epoch'",[68,33869,342],{"class":335},[68,33871,33873,33876,33879],{"class":70,"line":33872},201,[68,33874,33875],{"class":335},"    plt.ylabel(",[68,33877,33878],{"class":78},"'loss'",[68,33880,342],{"class":335},[68,33882,33884],{"class":70,"line":33883},202,[68,33885,33886],{"class":393},"    # ②准确度图\n",[68,33888,33890,33892,33894,33896,33898,33900,33902],{"class":70,"line":33889},203,[68,33891,31928],{"class":335},[68,33893,551],{"class":82},[68,33895,711],{"class":335},[68,33897,412],{"class":82},[68,33899,711],{"class":335},[68,33901,412],{"class":82},[68,33903,342],{"class":335},[68,33905,33907,33909,33911,33914,33916,33918,33920,33922,33925],{"class":70,"line":33906},204,[68,33908,33795],{"class":335},[68,33910,33798],{"class":78},[68,33912,33913],{"class":335},"],train_process.train_acc_all,",[68,33915,33804],{"class":78},[68,33917,711],{"class":335},[68,33919,33809],{"class":5421},[68,33921,381],{"class":331},[68,33923,33924],{"class":78},"'train acc'",[68,33926,342],{"class":335},[68,33928,33930,33932,33934,33937,33939,33941,33943,33945,33948],{"class":70,"line":33929},205,[68,33931,33795],{"class":335},[68,33933,33798],{"class":78},[68,33935,33936],{"class":335},"],train_process.val_acc_all,",[68,33938,33829],{"class":78},[68,33940,711],{"class":335},[68,33942,33809],{"class":5421},[68,33944,381],{"class":331},[68,33946,33947],{"class":78},"'val acc'",[68,33949,342],{"class":335},[68,33951,33953],{"class":70,"line":33952},206,[68,33954,33955],{"class":393},"    # 添加图例\n",[68,33957,33959],{"class":70,"line":33958},207,[68,33960,33852],{"class":335},[68,33962,33964,33966,33968],{"class":70,"line":33963},208,[68,33965,33864],{"class":335},[68,33967,33798],{"class":78},[68,33969,342],{"class":335},[68,33971,33973,33975,33978],{"class":70,"line":33972},209,[68,33974,33875],{"class":335},[68,33976,33977],{"class":78},"\"acc\"",[68,33979,342],{"class":335},[68,33981,33983],{"class":70,"line":33982},210,[68,33984,33985],{"class":335},"    plt.show()\n",[68,33987,33989],{"class":70,"line":33988},211,[68,33990,2606],{"emptyLinePlaceholder":260},[68,33992,33994],{"class":70,"line":33993},212,[68,33995,33996],{"class":393},"# 正式开始训练:\n",[68,33998,34000,34002,34004,34006,34008],{"class":70,"line":33999},213,[68,34001,1738],{"class":331},[68,34003,31421],{"class":82},[68,34005,3155],{"class":331},[68,34007,31426],{"class":78},[68,34009,3945],{"class":335},[68,34011,34013],{"class":70,"line":34012},214,[68,34014,34015],{"class":393},"    # 将模型实例化\n",[68,34017,34019,34022,34024],{"class":70,"line":34018},215,[68,34020,34021],{"class":335},"    LeNet",[68,34023,381],{"class":331},[68,34025,34026],{"class":335},"LeNet()\n",[68,34028,34030,34033,34035],{"class":70,"line":34029},216,[68,34031,34032],{"class":335},"    train_dataloader,val_dataloader",[68,34034,381],{"class":331},[68,34036,34037],{"class":335},"train_val_data_process()\n",[68,34039,34041,34043,34045,34048,34051,34053,34055],{"class":70,"line":34040},217,[68,34042,33594],{"class":335},[68,34044,381],{"class":331},[68,34046,34047],{"class":335},"train_model_process(LeNet,train_dataloader,val_dataloader,",[68,34049,34050],{"class":5421},"num_epochs",[68,34052,381],{"class":331},[68,34054,1033],{"class":82},[68,34056,342],{"class":335},[68,34058,34060],{"class":70,"line":34059},218,[68,34061,34062],{"class":335},"    matplot_acc_loss(train_process)\n",[19,34064,34065],{},"画图的补充点学习：",[19,34067,34068],{},[48,34069],{"alt":63,"src":34070},"\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",[23,34072,34073],{"start":1387},[26,34074,34075],{},"测试",[58,34077,34079],{"className":30579,"code":34078,"language":30581,"meta":63,"style":63},"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",[65,34080,34081,34087,34097,34109,34119,34124,34134,34144,34148,34153,34162,34179,34191,34208,34219,34235,34240,34251,34262,34273,34280,34284,34289,34299,34304,34321,34329,34333,34338,34347,34356,34360,34365,34370,34375,34382,34387,34399,34409,34419,34424,34428,34433,34442,34447,34463,34468,34473,34478,34492,34497,34511,34515,34520,34535,34540,34552,34556,34561,34573,34578,34586,34591,34596,34606,34611,34620,34625,34630,34634,34639,34644,34660,34668,34673,34678,34737,34743,34748,34759,34767,34775,34779,34784,34788,34793,34801,34806,34822,34827,34837,34847],{"__ignoreMap":63},[68,34082,34083,34085],{"class":70,"line":71},[68,34084,30593],{"class":331},[68,34086,30596],{"class":335},[68,34088,34089,34091,34093,34095],{"class":70,"line":92},[68,34090,30593],{"class":331},[68,34092,31616],{"class":335},[68,34094,31584],{"class":331},[68,34096,31621],{"class":335},[68,34098,34099,34101,34104,34106],{"class":70,"line":1387},[68,34100,30938],{"class":331},[68,34102,34103],{"class":335}," jupyter_client.consoleapp ",[68,34105,30593],{"class":331},[68,34107,34108],{"class":335}," classes\n",[68,34110,34111,34113,34115,34117],{"class":70,"line":1402},[68,34112,30938],{"class":331},[68,34114,31599],{"class":335},[68,34116,30593],{"class":331},[68,34118,31604],{"class":335},[68,34120,34121],{"class":70,"line":1408},[68,34122,34123],{"class":393},"# 导入数据集\n",[68,34125,34126,34128,34130,34132],{"class":70,"line":1422},[68,34127,30938],{"class":331},[68,34129,31569],{"class":335},[68,34131,30593],{"class":331},[68,34133,31574],{"class":335},[68,34135,34136,34138,34140,34142],{"class":70,"line":1428},[68,34137,30938],{"class":331},[68,34139,32115],{"class":335},[68,34141,30593],{"class":331},[68,34143,32120],{"class":335},[68,34145,34146],{"class":70,"line":1519},[68,34147,2606],{"emptyLinePlaceholder":260},[68,34149,34150],{"class":70,"line":1525},[68,34151,34152],{"class":393},"# 测试数据处理\n",[68,34154,34155,34157,34160],{"class":70,"line":1537},[68,34156,32148],{"class":331},[68,34158,34159],{"class":74}," test_data_process",[68,34161,32154],{"class":335},[68,34163,34164,34167,34169,34171,34173,34175,34177],{"class":70,"line":1819},[68,34165,34166],{"class":335},"    test_data",[68,34168,381],{"class":331},[68,34170,31656],{"class":335},[68,34172,31659],{"class":5421},[68,34174,381],{"class":331},[68,34176,31664],{"class":78},[68,34178,31667],{"class":335},[68,34180,34181,34184,34186,34189],{"class":70,"line":1824},[68,34182,34183],{"class":5421},"                           train",[68,34185,381],{"class":331},[68,34187,34188],{"class":82},"False",[68,34190,31667],{"class":335},[68,34192,34193,34196,34198,34200,34202,34204,34206],{"class":70,"line":1830},[68,34194,34195],{"class":5421},"                           transform",[68,34197,381],{"class":331},[68,34199,31694],{"class":335},[68,34201,31697],{"class":5421},[68,34203,381],{"class":331},[68,34205,1234],{"class":82},[68,34207,31705],{"class":335},[68,34209,34210,34213,34215,34217],{"class":70,"line":1835},[68,34211,34212],{"class":5421},"                           download",[68,34214,381],{"class":331},[68,34216,31677],{"class":82},[68,34218,342],{"class":335},[68,34220,34221,34224,34226,34228,34230,34232],{"class":70,"line":1849},[68,34222,34223],{"class":335},"    test_dataloader",[68,34225,381],{"class":331},[68,34227,31735],{"class":335},[68,34229,31738],{"class":5421},[68,34231,381],{"class":331},[68,34233,34234],{"class":335},"test_data,\n",[68,34236,34237],{"class":70,"line":1854},[68,34238,34239],{"class":393},"                                    # 这里是一张一张进行测试\n",[68,34241,34242,34245,34247,34249],{"class":70,"line":1860},[68,34243,34244],{"class":5421},"                                    batch_size",[68,34246,381],{"class":331},[68,34248,551],{"class":82},[68,34250,31667],{"class":335},[68,34252,34253,34256,34258,34260],{"class":70,"line":1881},[68,34254,34255],{"class":5421},"                                    shuffle",[68,34257,381],{"class":331},[68,34259,31677],{"class":82},[68,34261,31667],{"class":335},[68,34263,34264,34267,34269,34271],{"class":70,"line":1886},[68,34265,34266],{"class":5421},"                                    num_workers",[68,34268,381],{"class":331},[68,34270,525],{"class":82},[68,34272,342],{"class":335},[68,34274,34275,34277],{"class":70,"line":1900},[68,34276,4296],{"class":331},[68,34278,34279],{"class":335}," test_dataloader\n",[68,34281,34282],{"class":70,"line":1905},[68,34283,2606],{"emptyLinePlaceholder":260},[68,34285,34286],{"class":70,"line":1934},[68,34287,34288],{"class":393},"# 定义模型测试函数\n",[68,34290,34291,34293,34296],{"class":70,"line":1939},[68,34292,32148],{"class":331},[68,34294,34295],{"class":74}," test_model_process",[68,34297,34298],{"class":335},"(model,test_dataloader):\n",[68,34300,34301],{"class":70,"line":1956},[68,34302,34303],{"class":393},"    # 将模型放到设备当中，先进行判断\n",[68,34305,34306,34308,34310,34312,34314,34316,34318],{"class":70,"line":1961},[68,34307,31438],{"class":335},[68,34309,381],{"class":331},[68,34311,31445],{"class":78},[68,34313,1911],{"class":331},[68,34315,31450],{"class":335},[68,34317,1908],{"class":331},[68,34319,34320],{"class":78}," \"cpu\"\n",[68,34322,34323,34325,34327],{"class":70,"line":1966},[68,34324,31490],{"class":335},[68,34326,381],{"class":331},[68,34328,32490],{"class":335},[68,34330,34331],{"class":70,"line":1971},[68,34332,2606],{"emptyLinePlaceholder":260},[68,34334,34335],{"class":70,"line":1985},[68,34336,34337],{"class":393},"    # 设置初始化参数\n",[68,34339,34340,34343,34345],{"class":70,"line":1990},[68,34341,34342],{"class":335},"    test_corrects",[68,34344,381],{"class":331},[68,34346,32543],{"class":82},[68,34348,34349,34352,34354],{"class":70,"line":2783},[68,34350,34351],{"class":335},"    test_num",[68,34353,381],{"class":331},[68,34355,3291],{"class":82},[68,34357,34358],{"class":70,"line":2797},[68,34359,2606],{"emptyLinePlaceholder":260},[68,34361,34362],{"class":70,"line":2805},[68,34363,34364],{"class":393},"    # 进行模型测试\n",[68,34366,34367],{"class":70,"line":2810},[68,34368,34369],{"class":393},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[68,34371,34372],{"class":70,"line":2816},[68,34373,34374],{"class":393},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[68,34376,34377,34380],{"class":70,"line":2822},[68,34378,34379],{"class":331},"    with",[68,34381,33085],{"class":335},[68,34383,34384],{"class":70,"line":2827},[68,34385,34386],{"class":393},"        # 从数据中进行\n",[68,34388,34389,34391,34394,34396],{"class":70,"line":8153},[68,34390,3609],{"class":331},[68,34392,34393],{"class":335}," test_data_x,test_data_y ",[68,34395,26247],{"class":331},[68,34397,34398],{"class":335}," test_dataloader:\n",[68,34400,34401,34404,34406],{"class":70,"line":8177},[68,34402,34403],{"class":335},"            test_data_x",[68,34405,381],{"class":331},[68,34407,34408],{"class":335},"test_data_x.to(device)\n",[68,34410,34411,34414,34416],{"class":70,"line":8182},[68,34412,34413],{"class":335},"            test_data_y",[68,34415,381],{"class":331},[68,34417,34418],{"class":335},"test_data_y.to(device)\n",[68,34420,34421],{"class":70,"line":8188},[68,34422,34423],{"class":393},"            # 设置为验证模式\n",[68,34425,34426],{"class":70,"line":8215},[68,34427,33076],{"class":335},[68,34429,34430],{"class":70,"line":8220},[68,34431,34432],{"class":393},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[68,34434,34435,34437,34439],{"class":70,"line":8226},[68,34436,32861],{"class":335},[68,34438,381],{"class":331},[68,34440,34441],{"class":335},"model(test_data_x)\n",[68,34443,34444],{"class":70,"line":8238},[68,34445,34446],{"class":393},"            # 查找每一行中最大值对应的下标\n",[68,34448,34449,34451,34453,34455,34457,34459,34461],{"class":70,"line":8250},[68,34450,32878],{"class":335},[68,34452,381],{"class":331},[68,34454,32883],{"class":335},[68,34456,32886],{"class":5421},[68,34458,381],{"class":331},[68,34460,551],{"class":82},[68,34462,342],{"class":335},[68,34464,34465],{"class":70,"line":8262},[68,34466,34467],{"class":393},"            # 计算正确率\n",[68,34469,34470],{"class":70,"line":9921},[68,34471,34472],{"class":393},"            # .data表示是一个不带梯度信息的tensor\n",[68,34474,34475],{"class":70,"line":9946},[68,34476,34477],{"class":393},"            # 如果预测正确，则准确度test_corrects加1\n",[68,34479,34480,34483,34485,34487,34489],{"class":70,"line":9969},[68,34481,34482],{"class":335},"            test_corrects",[68,34484,9682],{"class":331},[68,34486,32988],{"class":335},[68,34488,3155],{"class":331},[68,34490,34491],{"class":335},"test_data_y.data)\n",[68,34493,34494],{"class":70,"line":9993},[68,34495,34496],{"class":393},"            # 将所有的测试样本进行累计\n",[68,34498,34499,34502,34504,34507,34509],{"class":70,"line":9998},[68,34500,34501],{"class":335},"            test_num",[68,34503,9682],{"class":331},[68,34505,34506],{"class":335},"test_data_x.size(",[68,34508,525],{"class":82},[68,34510,342],{"class":335},[68,34512,34513],{"class":70,"line":10003},[68,34514,2606],{"emptyLinePlaceholder":260},[68,34516,34517],{"class":70,"line":10008},[68,34518,34519],{"class":393},"        # 计算准确度\n",[68,34521,34522,34525,34527,34530,34532],{"class":70,"line":10017},[68,34523,34524],{"class":335},"        test_acc",[68,34526,381],{"class":331},[68,34528,34529],{"class":335},"test_corrects.double().item()",[68,34531,917],{"class":331},[68,34533,34534],{"class":335},"test_num\n",[68,34536,34537],{"class":70,"line":10022},[68,34538,34539],{"class":393},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[68,34541,34542,34544,34546,34549],{"class":70,"line":10028},[68,34543,32652],{"class":82},[68,34545,336],{"class":335},[68,34547,34548],{"class":78},"\"测试的准确率：\"",[68,34550,34551],{"class":335},",test_acc)\n",[68,34553,34554],{"class":70,"line":10049},[68,34555,2606],{"emptyLinePlaceholder":260},[68,34557,34558],{"class":70,"line":10055},[68,34559,34560],{"class":393},"# 实现模型的测试功能\n",[68,34562,34563,34565,34567,34569,34571],{"class":70,"line":10069},[68,34564,1738],{"class":331},[68,34566,31421],{"class":82},[68,34568,3155],{"class":331},[68,34570,31426],{"class":78},[68,34572,3945],{"class":335},[68,34574,34575],{"class":70,"line":10075},[68,34576,34577],{"class":393},"    # 加载模型\n",[68,34579,34580,34582,34584],{"class":70,"line":10102},[68,34581,31490],{"class":335},[68,34583,381],{"class":331},[68,34585,34026],{"class":335},[68,34587,34588],{"class":70,"line":10111},[68,34589,34590],{"class":393},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[68,34592,34593],{"class":70,"line":10117},[68,34594,34595],{"class":393},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[68,34597,34598,34601,34604],{"class":70,"line":10125},[68,34599,34600],{"class":335},"    model.load_state_dict(torch.load(",[68,34602,34603],{"class":78},"'best_model.pth'",[68,34605,30698],{"class":335},[68,34607,34608],{"class":70,"line":10130},[68,34609,34610],{"class":393},"    # 数据加载\n",[68,34612,34613,34615,34617],{"class":70,"line":16809},[68,34614,34223],{"class":335},[68,34616,381],{"class":331},[68,34618,34619],{"class":335},"test_data_process()\n",[68,34621,34622],{"class":70,"line":16815},[68,34623,34624],{"class":393},"    # 加载模型测试的函数\n",[68,34626,34627],{"class":70,"line":16838},[68,34628,34629],{"class":335},"    test_model_process(model,test_dataloader)\n",[68,34631,34632],{"class":70,"line":16844},[68,34633,2606],{"emptyLinePlaceholder":260},[68,34635,34636],{"class":70,"line":16867},[68,34637,34638],{"class":393},"    # 验证集推理实现：\n",[68,34640,34641],{"class":70,"line":16881},[68,34642,34643],{"class":393},"    # 加载数据加载的更详细一些\n",[68,34645,34646,34648,34650,34652,34654,34656,34658],{"class":70,"line":16901},[68,34647,31438],{"class":335},[68,34649,381],{"class":331},[68,34651,31445],{"class":78},[68,34653,1911],{"class":331},[68,34655,31450],{"class":335},[68,34657,1908],{"class":331},[68,34659,34320],{"class":78},[68,34661,34662,34664,34666],{"class":70,"line":16907},[68,34663,31490],{"class":335},[68,34665,381],{"class":331},[68,34667,32490],{"class":335},[68,34669,34670],{"class":70,"line":16918},[68,34671,34672],{"class":393},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[68,34674,34675],{"class":70,"line":16941},[68,34676,34677],{"class":393},"    # 顺序不可改变\n",[68,34679,34680,34683,34685,34687,34690,34692,34695,34697,34700,34702,34705,34707,34710,34712,34715,34717,34720,34722,34725,34727,34730,34732,34735],{"class":70,"line":16963},[68,34681,34682],{"class":335},"    classes",[68,34684,381],{"class":331},[68,34686,1223],{"class":335},[68,34688,34689],{"class":78},"'T-shirt\u002Ftop'",[68,34691,711],{"class":335},[68,34693,34694],{"class":78},"'Trouser'",[68,34696,711],{"class":335},[68,34698,34699],{"class":78},"'Pullover'",[68,34701,711],{"class":335},[68,34703,34704],{"class":78},"'Dress'",[68,34706,711],{"class":335},[68,34708,34709],{"class":78},"'Coat'",[68,34711,711],{"class":335},[68,34713,34714],{"class":78},"'Sandal'",[68,34716,711],{"class":335},[68,34718,34719],{"class":78},"'Shirt'",[68,34721,711],{"class":335},[68,34723,34724],{"class":78},"'Sneaker'",[68,34726,711],{"class":335},[68,34728,34729],{"class":78},"'Bag'",[68,34731,711],{"class":335},[68,34733,34734],{"class":78},"'Ankle boot'",[68,34736,33447],{"class":335},[68,34738,34739,34741],{"class":70,"line":16968},[68,34740,34379],{"class":331},[68,34742,33085],{"class":335},[68,34744,34745],{"class":70,"line":16974},[68,34746,34747],{"class":393},"        # 将数据和标签都放到设备当中\n",[68,34749,34750,34752,34755,34757],{"class":70,"line":16988},[68,34751,3609],{"class":331},[68,34753,34754],{"class":335}," b_x,b_y ",[68,34756,26247],{"class":331},[68,34758,34398],{"class":335},[68,34760,34761,34763,34765],{"class":70,"line":17001},[68,34762,32811],{"class":335},[68,34764,381],{"class":331},[68,34766,32816],{"class":335},[68,34768,34769,34771,34773],{"class":70,"line":17006},[68,34770,32826],{"class":335},[68,34772,381],{"class":331},[68,34774,32831],{"class":335},[68,34776,34777],{"class":70,"line":17020},[68,34778,2606],{"emptyLinePlaceholder":260},[68,34780,34781],{"class":70,"line":17025},[68,34782,34783],{"class":393},"            # 设置模型为验证模式\n",[68,34785,34786],{"class":70,"line":17031},[68,34787,33076],{"class":335},[68,34789,34790],{"class":70,"line":17036},[68,34791,34792],{"class":393},"            # 模型推理结果\n",[68,34794,34795,34797,34799],{"class":70,"line":17050},[68,34796,32861],{"class":335},[68,34798,381],{"class":331},[68,34800,32866],{"class":335},[68,34802,34803],{"class":70,"line":17055},[68,34804,34805],{"class":393},"            # 获取最大下标，最大下标就是类别号\n",[68,34807,34808,34810,34812,34814,34816,34818,34820],{"class":70,"line":17060},[68,34809,32878],{"class":335},[68,34811,381],{"class":331},[68,34813,32883],{"class":335},[68,34815,32886],{"class":5421},[68,34817,381],{"class":331},[68,34819,551],{"class":82},[68,34821,342],{"class":335},[68,34823,34824],{"class":70,"line":17074},[68,34825,34826],{"class":393},"            # 取出张量中的数值\n",[68,34828,34829,34832,34834],{"class":70,"line":17086},[68,34830,34831],{"class":335},"            result",[68,34833,381],{"class":331},[68,34835,34836],{"class":335},"pre_lab.item()\n",[68,34838,34839,34842,34844],{"class":70,"line":17091},[68,34840,34841],{"class":335},"            label",[68,34843,381],{"class":331},[68,34845,34846],{"class":335},"b_y.item()\n",[68,34848,34849,34852,34854,34857,34860,34863,34865,34868],{"class":70,"line":17104},[68,34850,34851],{"class":82},"            print",[68,34853,336],{"class":335},[68,34855,34856],{"class":78},"\"预测值：\"",[68,34858,34859],{"class":335},",classes[result],",[68,34861,34862],{"class":78},"\"------\"",[68,34864,711],{"class":335},[68,34866,34867],{"class":78},"\"真实值：\"",[68,34869,34870],{"class":335},",classes[label])\n",[19,34872,34873],{},"（2）AlexNet",[23,34875,34876],{},[26,34877,34878],{},"神经网络构建",[58,34880,34882],{"className":30579,"code":34881,"language":30581,"meta":63,"style":63},"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",[65,34883,34884,34890,34900,34910,34922,34926,34943,34951,34966,34978,35020,35047,35090,35116,35160,35203,35246,35273,35277,35287,35292,35320,35339,35358,35362,35367,35375,35390,35400,35414,35424,35439,35454,35469,35480,35484,35489,35499,35514,35519,35533,35548,35560,35565,35576,35581,35587,35592,35604,35624,35629,35638],{"__ignoreMap":63},[68,34885,34886,34888],{"class":70,"line":71},[68,34887,30593],{"class":331},[68,34889,30596],{"class":335},[68,34891,34892,34894,34896,34898],{"class":70,"line":92},[68,34893,30938],{"class":331},[68,34895,30941],{"class":335},[68,34897,30593],{"class":331},[68,34899,30946],{"class":335},[68,34901,34902,34904,34906,34908],{"class":70,"line":1387},[68,34903,30938],{"class":331},[68,34905,30958],{"class":335},[68,34907,30593],{"class":331},[68,34909,30963],{"class":335},[68,34911,34912,34914,34917,34919],{"class":70,"line":1402},[68,34913,30593],{"class":331},[68,34915,34916],{"class":335}," torch.nn.functional ",[68,34918,31584],{"class":331},[68,34920,34921],{"class":335}," F\n",[68,34923,34924],{"class":70,"line":1408},[68,34925,2606],{"emptyLinePlaceholder":260},[68,34927,34928,34930,34933,34935,34937,34939,34941],{"class":70,"line":1422},[68,34929,14899],{"class":331},[68,34931,34932],{"class":74}," AlexNet",[68,34934,336],{"class":335},[68,34936,30979],{"class":74},[68,34938,891],{"class":335},[68,34940,30984],{"class":74},[68,34942,30987],{"class":335},[68,34944,34945,34947,34949],{"class":70,"line":1428},[68,34946,31002],{"class":331},[68,34948,31005],{"class":82},[68,34950,31008],{"class":335},[68,34952,34953,34955,34958,34960,34962,34964],{"class":70,"line":1519},[68,34954,31018],{"class":82},[68,34956,34957],{"class":335},"(AlexNet,",[68,34959,31024],{"class":82},[68,34961,31027],{"class":335},[68,34963,31030],{"class":82},[68,34965,2182],{"class":335},[68,34967,34968,34970,34973,34975],{"class":70,"line":1525},[68,34969,31046],{"class":82},[68,34971,34972],{"class":335},".ReLu",[68,34974,381],{"class":331},[68,34976,34977],{"class":335},"nn.ReLU()\n",[68,34979,34980,34982,34984,34986,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018],{"class":70,"line":1537},[68,34981,31046],{"class":82},[68,34983,31049],{"class":335},[68,34985,381],{"class":331},[68,34987,31054],{"class":335},[68,34989,31057],{"class":5421},[68,34991,381],{"class":331},[68,34993,551],{"class":82},[68,34995,711],{"class":335},[68,34997,31066],{"class":5421},[68,34999,381],{"class":331},[68,35001,543],{"class":82},[68,35003,711],{"class":335},[68,35005,31075],{"class":5421},[68,35007,381],{"class":331},[68,35009,805],{"class":82},[68,35011,711],{"class":335},[68,35013,31130],{"class":5421},[68,35015,381],{"class":331},[68,35017,626],{"class":82},[68,35019,342],{"class":335},[68,35021,35022,35024,35026,35028,35031,35033,35035,35037,35039,35041,35043,35045],{"class":70,"line":1819},[68,35023,31046],{"class":82},[68,35025,31114],{"class":335},[68,35027,381],{"class":331},[68,35029,35030],{"class":335},"nn.MaxPool2d(",[68,35032,31075],{"class":5421},[68,35034,381],{"class":331},[68,35036,406],{"class":82},[68,35038,711],{"class":335},[68,35040,31130],{"class":5421},[68,35042,381],{"class":331},[68,35044,412],{"class":82},[68,35046,342],{"class":335},[68,35048,35049,35051,35053,35055,35057,35059,35061,35063,35065,35067,35069,35072,35074,35076,35078,35080,35082,35084,35086,35088],{"class":70,"line":1824},[68,35050,31046],{"class":82},[68,35052,31143],{"class":335},[68,35054,381],{"class":331},[68,35056,31054],{"class":335},[68,35058,31057],{"class":5421},[68,35060,381],{"class":331},[68,35062,543],{"class":82},[68,35064,711],{"class":335},[68,35066,31066],{"class":5421},[68,35068,381],{"class":331},[68,35070,35071],{"class":82},"256",[68,35073,711],{"class":335},[68,35075,31075],{"class":5421},[68,35077,381],{"class":331},[68,35079,652],{"class":82},[68,35081,711],{"class":335},[68,35083,31084],{"class":5421},[68,35085,381],{"class":331},[68,35087,412],{"class":82},[68,35089,342],{"class":335},[68,35091,35092,35094,35096,35098,35100,35102,35104,35106,35108,35110,35112,35114],{"class":70,"line":1830},[68,35093,31046],{"class":82},[68,35095,31178],{"class":335},[68,35097,381],{"class":331},[68,35099,35030],{"class":335},[68,35101,31075],{"class":5421},[68,35103,381],{"class":331},[68,35105,406],{"class":82},[68,35107,711],{"class":335},[68,35109,31130],{"class":5421},[68,35111,381],{"class":331},[68,35113,412],{"class":82},[68,35115,342],{"class":335},[68,35117,35118,35120,35123,35125,35127,35129,35131,35133,35135,35137,35139,35142,35144,35146,35148,35150,35152,35154,35156,35158],{"class":70,"line":1835},[68,35119,31046],{"class":82},[68,35121,35122],{"class":335},".c5",[68,35124,381],{"class":331},[68,35126,31054],{"class":335},[68,35128,31057],{"class":5421},[68,35130,381],{"class":331},[68,35132,35071],{"class":82},[68,35134,711],{"class":335},[68,35136,31066],{"class":5421},[68,35138,381],{"class":331},[68,35140,35141],{"class":82},"384",[68,35143,711],{"class":335},[68,35145,31075],{"class":5421},[68,35147,381],{"class":331},[68,35149,406],{"class":82},[68,35151,711],{"class":335},[68,35153,31084],{"class":5421},[68,35155,381],{"class":331},[68,35157,551],{"class":82},[68,35159,342],{"class":335},[68,35161,35162,35164,35167,35169,35171,35173,35175,35177,35179,35181,35183,35185,35187,35189,35191,35193,35195,35197,35199,35201],{"class":70,"line":1849},[68,35163,31046],{"class":82},[68,35165,35166],{"class":335},".c6",[68,35168,381],{"class":331},[68,35170,31054],{"class":335},[68,35172,31057],{"class":5421},[68,35174,381],{"class":331},[68,35176,35141],{"class":82},[68,35178,711],{"class":335},[68,35180,31066],{"class":5421},[68,35182,381],{"class":331},[68,35184,35141],{"class":82},[68,35186,711],{"class":335},[68,35188,31075],{"class":5421},[68,35190,381],{"class":331},[68,35192,406],{"class":82},[68,35194,711],{"class":335},[68,35196,31084],{"class":5421},[68,35198,381],{"class":331},[68,35200,551],{"class":82},[68,35202,342],{"class":335},[68,35204,35205,35207,35210,35212,35214,35216,35218,35220,35222,35224,35226,35228,35230,35232,35234,35236,35238,35240,35242,35244],{"class":70,"line":1854},[68,35206,31046],{"class":82},[68,35208,35209],{"class":335},".c7",[68,35211,381],{"class":331},[68,35213,31054],{"class":335},[68,35215,31057],{"class":5421},[68,35217,381],{"class":331},[68,35219,35141],{"class":82},[68,35221,711],{"class":335},[68,35223,31066],{"class":5421},[68,35225,381],{"class":331},[68,35227,35071],{"class":82},[68,35229,711],{"class":335},[68,35231,31075],{"class":5421},[68,35233,381],{"class":331},[68,35235,406],{"class":82},[68,35237,711],{"class":335},[68,35239,31084],{"class":5421},[68,35241,381],{"class":331},[68,35243,551],{"class":82},[68,35245,342],{"class":335},[68,35247,35248,35250,35253,35255,35257,35259,35261,35263,35265,35267,35269,35271],{"class":70,"line":1860},[68,35249,31046],{"class":82},[68,35251,35252],{"class":335},".s8",[68,35254,381],{"class":331},[68,35256,35030],{"class":335},[68,35258,31075],{"class":5421},[68,35260,381],{"class":331},[68,35262,406],{"class":82},[68,35264,711],{"class":335},[68,35266,31130],{"class":5421},[68,35268,381],{"class":331},[68,35270,412],{"class":82},[68,35272,342],{"class":335},[68,35274,35275],{"class":70,"line":1881},[68,35276,31203],{"class":393},[68,35278,35279,35281,35283,35285],{"class":70,"line":1886},[68,35280,31046],{"class":82},[68,35282,31210],{"class":335},[68,35284,381],{"class":331},[68,35286,31215],{"class":335},[68,35288,35289],{"class":70,"line":1900},[68,35290,35291],{"class":393},"       # 定义全连接层\n",[68,35293,35294,35296,35299,35301,35303,35305,35307,35309,35311,35313,35315,35318],{"class":70,"line":1905},[68,35295,31046],{"class":82},[68,35297,35298],{"class":335},".f1",[68,35300,381],{"class":331},[68,35302,31232],{"class":335},[68,35304,677],{"class":82},[68,35306,788],{"class":331},[68,35308,677],{"class":82},[68,35310,788],{"class":331},[68,35312,35071],{"class":82},[68,35314,711],{"class":335},[68,35316,35317],{"class":82},"4096",[68,35319,342],{"class":335},[68,35321,35322,35324,35327,35329,35331,35333,35335,35337],{"class":70,"line":1934},[68,35323,31046],{"class":82},[68,35325,35326],{"class":335},".f2",[68,35328,381],{"class":331},[68,35330,31232],{"class":335},[68,35332,35317],{"class":82},[68,35334,711],{"class":335},[68,35336,35317],{"class":82},[68,35338,342],{"class":335},[68,35340,35341,35343,35346,35348,35350,35352,35354,35356],{"class":70,"line":1939},[68,35342,31046],{"class":82},[68,35344,35345],{"class":335},".f3",[68,35347,381],{"class":331},[68,35349,31232],{"class":335},[68,35351,35317],{"class":82},[68,35353,711],{"class":335},[68,35355,779],{"class":82},[68,35357,342],{"class":335},[68,35359,35360],{"class":70,"line":1956},[68,35361,2606],{"emptyLinePlaceholder":260},[68,35363,35364],{"class":70,"line":1961},[68,35365,35366],{"class":393},"    # 定义前向传播\n",[68,35368,35369,35371,35373],{"class":70,"line":1966},[68,35370,31002],{"class":331},[68,35372,31294],{"class":74},[68,35374,31297],{"class":335},[68,35376,35377,35379,35381,35383,35386,35388],{"class":70,"line":1971},[68,35378,31302],{"class":335},[68,35380,381],{"class":331},[68,35382,31024],{"class":82},[68,35384,35385],{"class":335},".ReLu(",[68,35387,31024],{"class":82},[68,35389,31314],{"class":335},[68,35391,35392,35394,35396,35398],{"class":70,"line":1985},[68,35393,31302],{"class":335},[68,35395,381],{"class":331},[68,35397,31024],{"class":82},[68,35399,31325],{"class":335},[68,35401,35402,35404,35406,35408,35410,35412],{"class":70,"line":1990},[68,35403,31302],{"class":335},[68,35405,381],{"class":331},[68,35407,31024],{"class":82},[68,35409,35385],{"class":335},[68,35411,31024],{"class":82},[68,35413,31340],{"class":335},[68,35415,35416,35418,35420,35422],{"class":70,"line":2783},[68,35417,31302],{"class":335},[68,35419,381],{"class":331},[68,35421,31024],{"class":82},[68,35423,31351],{"class":335},[68,35425,35426,35428,35430,35432,35434,35436],{"class":70,"line":2797},[68,35427,31302],{"class":335},[68,35429,381],{"class":331},[68,35431,31024],{"class":82},[68,35433,35385],{"class":335},[68,35435,31024],{"class":82},[68,35437,35438],{"class":335},".c5(x))\n",[68,35440,35441,35443,35445,35447,35449,35451],{"class":70,"line":2805},[68,35442,31302],{"class":335},[68,35444,381],{"class":331},[68,35446,31024],{"class":82},[68,35448,35385],{"class":335},[68,35450,31024],{"class":82},[68,35452,35453],{"class":335},".c6(x))\n",[68,35455,35456,35458,35460,35462,35464,35466],{"class":70,"line":2810},[68,35457,31302],{"class":335},[68,35459,381],{"class":331},[68,35461,31024],{"class":82},[68,35463,35385],{"class":335},[68,35465,31024],{"class":82},[68,35467,35468],{"class":335},".c7(x))\n",[68,35470,35471,35473,35475,35477],{"class":70,"line":2816},[68,35472,31302],{"class":335},[68,35474,381],{"class":331},[68,35476,31024],{"class":82},[68,35478,35479],{"class":335},".s8(x)\n",[68,35481,35482],{"class":70,"line":2822},[68,35483,2606],{"emptyLinePlaceholder":260},[68,35485,35486],{"class":70,"line":2827},[68,35487,35488],{"class":393},"        # 展平加线性全连接层\n",[68,35490,35491,35493,35495,35497],{"class":70,"line":8153},[68,35492,31302],{"class":335},[68,35494,381],{"class":331},[68,35496,31024],{"class":82},[68,35498,31362],{"class":335},[68,35500,35501,35503,35505,35507,35509,35511],{"class":70,"line":8177},[68,35502,31302],{"class":335},[68,35504,381],{"class":331},[68,35506,31024],{"class":82},[68,35508,35385],{"class":335},[68,35510,31024],{"class":82},[68,35512,35513],{"class":335},".f1(x))\n",[68,35515,35516],{"class":70,"line":8182},[68,35517,35518],{"class":393},"        # 还需要dropout对神经元随机进行失活\n",[68,35520,35521,35523,35525,35528,35531],{"class":70,"line":8188},[68,35522,31302],{"class":335},[68,35524,381],{"class":331},[68,35526,35527],{"class":335},"F.dropout(x,",[68,35529,35530],{"class":82},"0.5",[68,35532,342],{"class":335},[68,35534,35535,35537,35539,35541,35543,35545],{"class":70,"line":8215},[68,35536,31302],{"class":335},[68,35538,381],{"class":331},[68,35540,31024],{"class":82},[68,35542,35385],{"class":335},[68,35544,31024],{"class":82},[68,35546,35547],{"class":335},".f2(x))\n",[68,35549,35550,35552,35554,35556,35558],{"class":70,"line":8220},[68,35551,31302],{"class":335},[68,35553,381],{"class":331},[68,35555,35527],{"class":335},[68,35557,35530],{"class":82},[68,35559,342],{"class":335},[68,35561,35562],{"class":70,"line":8226},[68,35563,35564],{"class":393},"        # 直接输出\n",[68,35566,35567,35569,35571,35573],{"class":70,"line":8238},[68,35568,31302],{"class":335},[68,35570,381],{"class":331},[68,35572,31024],{"class":82},[68,35574,35575],{"class":335},".f3(x)\n",[68,35577,35578],{"class":70,"line":8250},[68,35579,35580],{"class":393},"        # 前向传播输出\n",[68,35582,35583,35585],{"class":70,"line":8262},[68,35584,14957],{"class":331},[68,35586,31410],{"class":335},[68,35588,35589],{"class":70,"line":9921},[68,35590,35591],{"class":393},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[68,35593,35594,35596,35598,35600,35602],{"class":70,"line":9946},[68,35595,1738],{"class":331},[68,35597,31421],{"class":82},[68,35599,3155],{"class":331},[68,35601,31426],{"class":78},[68,35603,3945],{"class":335},[68,35605,35606,35608,35610,35612,35614,35616,35618,35620,35622],{"class":70,"line":9969},[68,35607,31438],{"class":335},[68,35609,381],{"class":331},[68,35611,30652],{"class":335},[68,35613,31445],{"class":78},[68,35615,1911],{"class":331},[68,35617,31450],{"class":335},[68,35619,1908],{"class":331},[68,35621,30677],{"class":78},[68,35623,342],{"class":335},[68,35625,35626],{"class":70,"line":9993},[68,35627,35628],{"class":393},"    # 模型实例化，然后将实例化的模型放到设备中\n",[68,35630,35631,35633,35635],{"class":70,"line":9998},[68,35632,31490],{"class":335},[68,35634,381],{"class":331},[68,35636,35637],{"class":335},"AlexNet().to(device)\n",[68,35639,35640,35642,35644,35646,35648,35651,35653,35655],{"class":70,"line":10003},[68,35641,31500],{"class":82},[68,35643,31503],{"class":335},[68,35645,551],{"class":82},[68,35647,711],{"class":335},[68,35649,35650],{"class":82},"227",[68,35652,711],{"class":335},[68,35654,35650],{"class":82},[68,35656,31516],{"class":335},[23,35658,35659],{"start":92},[26,35660,31529],{},[58,35662,35664],{"className":30579,"code":35663,"language":30581,"meta":63,"style":63},"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",[65,35665,35666,35672,35678,35688,35694,35704,35714,35724,35734,35744,35748,35759,35769,35773,35777,35781,35789,35801,35811,35827,35837,35869,35883,35893,35903,35907,35917,35931,35941,35951,35961,35967,35971,35975,35979,35983,35987,35995,36015,36019,36023,36027,36031,36035,36051,36055,36059,36067,36071,36075,36083,36087,36091,36095,36103,36107,36111,36115,36119,36127,36131,36139,36143,36151,36155,36163,36167,36175,36179,36183,36191,36195,36199,36203,36215,36239,36253,36257,36261,36265,36273,36277,36285,36289,36297,36301,36309,36313,36321,36325,36333,36337,36349,36353,36361,36365,36373,36377,36381,36385,36389,36397,36401,36417,36421,36429,36433,36437,36441,36445,36449,36453,36457,36473,36477,36489,36493,36505,36509,36521,36525,36533,36537,36545,36549,36553,36558,36564,36568,36577,36581,36598,36602,36611,36615,36633,36646,36651,36664,36668,36672,36680,36684,36688,36696,36700,36708,36712,36720,36724,36728,36770,36812,36816,36820,36836,36840,36856,36860,36864,36872,36876,36880,36892,36930,36935,36940,36949,36953,36967,36977,36983,36989,36995,37001,37005,37009,37015,37019,37023,37031,37035,37053,37057,37061,37065,37081,37085,37089,37093,37097,37101,37121,37141,37145,37149,37153,37161,37169,37173,37189,37209,37229,37233,37237,37245,37253,37257,37261,37265,37277,37281,37291,37299,37316],{"__ignoreMap":63},[68,35667,35668,35670],{"class":70,"line":71},[68,35669,30593],{"class":331},[68,35671,32023],{"class":335},[68,35673,35674,35676],{"class":70,"line":92},[68,35675,30593],{"class":331},[68,35677,32030],{"class":335},[68,35679,35680,35682,35684,35686],{"class":70,"line":1387},[68,35681,30593],{"class":331},[68,35683,32041],{"class":335},[68,35685,31584],{"class":331},[68,35687,32046],{"class":335},[68,35689,35690,35692],{"class":70,"line":1402},[68,35691,30593],{"class":331},[68,35693,30596],{"class":335},[68,35695,35696,35698,35700,35702],{"class":70,"line":1408},[68,35697,30938],{"class":331},[68,35699,31616],{"class":335},[68,35701,30593],{"class":331},[68,35703,32063],{"class":335},[68,35705,35706,35708,35710,35712],{"class":70,"line":1422},[68,35707,30938],{"class":331},[68,35709,31569],{"class":335},[68,35711,30593],{"class":331},[68,35713,31574],{"class":335},[68,35715,35716,35718,35720,35722],{"class":70,"line":1428},[68,35717,30938],{"class":331},[68,35719,31599],{"class":335},[68,35721,30593],{"class":331},[68,35723,31604],{"class":335},[68,35725,35726,35728,35730,35732],{"class":70,"line":1519},[68,35727,30593],{"class":331},[68,35729,31616],{"class":335},[68,35731,31584],{"class":331},[68,35733,31621],{"class":335},[68,35735,35736,35738,35740,35742],{"class":70,"line":1525},[68,35737,30593],{"class":331},[68,35739,31633],{"class":335},[68,35741,31584],{"class":331},[68,35743,31638],{"class":335},[68,35745,35746],{"class":70,"line":1537},[68,35747,32108],{"class":393},[68,35749,35750,35752,35754,35756],{"class":70,"line":1819},[68,35751,30938],{"class":331},[68,35753,32115],{"class":335},[68,35755,30593],{"class":331},[68,35757,35758],{"class":335}," AlexNet\n",[68,35760,35761,35763,35765,35767],{"class":70,"line":1824},[68,35762,30938],{"class":331},[68,35764,30941],{"class":335},[68,35766,30593],{"class":331},[68,35768,30946],{"class":335},[68,35770,35771],{"class":70,"line":1830},[68,35772,2606],{"emptyLinePlaceholder":260},[68,35774,35775],{"class":70,"line":1835},[68,35776,2606],{"emptyLinePlaceholder":260},[68,35778,35779],{"class":70,"line":1849},[68,35780,32143],{"class":393},[68,35782,35783,35785,35787],{"class":70,"line":1854},[68,35784,32148],{"class":331},[68,35786,32151],{"class":74},[68,35788,32154],{"class":335},[68,35790,35791,35793,35795,35797,35799],{"class":70,"line":1860},[68,35792,32159],{"class":335},[68,35794,381],{"class":331},[68,35796,31656],{"class":335},[68,35798,31664],{"class":78},[68,35800,31667],{"class":335},[68,35802,35803,35805,35807,35809],{"class":70,"line":1881},[68,35804,32172],{"class":5421},[68,35806,381],{"class":331},[68,35808,31677],{"class":82},[68,35810,31667],{"class":335},[68,35812,35813,35815,35817,35819,35821,35823,35825],{"class":70,"line":1886},[68,35814,32183],{"class":5421},[68,35816,381],{"class":331},[68,35818,31694],{"class":335},[68,35820,31697],{"class":5421},[68,35822,381],{"class":331},[68,35824,35650],{"class":82},[68,35826,31705],{"class":335},[68,35828,35829,35831,35833,35835],{"class":70,"line":1900},[68,35830,32200],{"class":5421},[68,35832,381],{"class":331},[68,35834,31677],{"class":82},[68,35836,342],{"class":335},[68,35838,35839,35841,35843,35845,35847,35849,35851,35853,35855,35857,35859,35861,35863,35865,35867],{"class":70,"line":1905},[68,35840,32211],{"class":335},[68,35842,381],{"class":331},[68,35844,32216],{"class":335},[68,35846,32219],{"class":82},[68,35848,336],{"class":335},[68,35850,32224],{"class":82},[68,35852,788],{"class":331},[68,35854,7563],{"class":82},[68,35856,32231],{"class":335},[68,35858,32219],{"class":82},[68,35860,336],{"class":335},[68,35862,32238],{"class":82},[68,35864,788],{"class":331},[68,35866,7563],{"class":82},[68,35868,32245],{"class":335},[68,35870,35871,35873,35875,35877,35879,35881],{"class":70,"line":1934},[68,35872,32250],{"class":335},[68,35874,381],{"class":331},[68,35876,32255],{"class":335},[68,35878,31738],{"class":5421},[68,35880,381],{"class":331},[68,35882,31743],{"class":335},[68,35884,35885,35887,35889,35891],{"class":70,"line":1939},[68,35886,32266],{"class":5421},[68,35888,381],{"class":331},[68,35890,32271],{"class":82},[68,35892,31667],{"class":335},[68,35894,35895,35897,35899,35901],{"class":70,"line":1956},[68,35896,32278],{"class":5421},[68,35898,381],{"class":331},[68,35900,31677],{"class":82},[68,35902,31667],{"class":335},[68,35904,35905],{"class":70,"line":1961},[68,35906,32289],{"class":393},[68,35908,35909,35911,35913,35915],{"class":70,"line":1966},[68,35910,32294],{"class":5421},[68,35912,381],{"class":331},[68,35914,728],{"class":82},[68,35916,342],{"class":335},[68,35918,35919,35921,35923,35925,35927,35929],{"class":70,"line":1971},[68,35920,32305],{"class":335},[68,35922,381],{"class":331},[68,35924,31735],{"class":335},[68,35926,31738],{"class":5421},[68,35928,381],{"class":331},[68,35930,32316],{"class":335},[68,35932,35933,35935,35937,35939],{"class":70,"line":1985},[68,35934,32321],{"class":5421},[68,35936,381],{"class":331},[68,35938,32271],{"class":82},[68,35940,31667],{"class":335},[68,35942,35943,35945,35947,35949],{"class":70,"line":1990},[68,35944,32332],{"class":5421},[68,35946,381],{"class":331},[68,35948,31677],{"class":82},[68,35950,31667],{"class":335},[68,35952,35953,35955,35957,35959],{"class":70,"line":2783},[68,35954,32343],{"class":5421},[68,35956,381],{"class":331},[68,35958,728],{"class":82},[68,35960,342],{"class":335},[68,35962,35963,35965],{"class":70,"line":2797},[68,35964,4296],{"class":331},[68,35966,32356],{"class":335},[68,35968,35969],{"class":70,"line":2805},[68,35970,2606],{"emptyLinePlaceholder":260},[68,35972,35973],{"class":70,"line":2810},[68,35974,32365],{"class":393},[68,35976,35977],{"class":70,"line":2816},[68,35978,32370],{"class":393},[68,35980,35981],{"class":70,"line":2822},[68,35982,2606],{"emptyLinePlaceholder":260},[68,35984,35985],{"class":70,"line":2827},[68,35986,32379],{"class":393},[68,35988,35989,35991,35993],{"class":70,"line":8153},[68,35990,32148],{"class":331},[68,35992,32386],{"class":74},[68,35994,32389],{"class":335},[68,35996,35997,35999,36001,36003,36005,36007,36009,36011,36013],{"class":70,"line":8177},[68,35998,31438],{"class":335},[68,36000,381],{"class":331},[68,36002,30652],{"class":335},[68,36004,31445],{"class":78},[68,36006,1911],{"class":331},[68,36008,31450],{"class":335},[68,36010,1908],{"class":331},[68,36012,32408],{"class":78},[68,36014,342],{"class":335},[68,36016,36017],{"class":70,"line":8182},[68,36018,2606],{"emptyLinePlaceholder":260},[68,36020,36021],{"class":70,"line":8188},[68,36022,2606],{"emptyLinePlaceholder":260},[68,36024,36025],{"class":70,"line":8215},[68,36026,32423],{"class":393},[68,36028,36029],{"class":70,"line":8220},[68,36030,32428],{"class":393},[68,36032,36033],{"class":70,"line":8226},[68,36034,32433],{"class":393},[68,36036,36037,36039,36041,36043,36045,36047,36049],{"class":70,"line":8238},[68,36038,32438],{"class":335},[68,36040,381],{"class":331},[68,36042,32443],{"class":335},[68,36044,32446],{"class":5421},[68,36046,381],{"class":331},[68,36048,32451],{"class":82},[68,36050,342],{"class":335},[68,36052,36053],{"class":70,"line":8250},[68,36054,2606],{"emptyLinePlaceholder":260},[68,36056,36057],{"class":70,"line":8262},[68,36058,32462],{"class":393},[68,36060,36061,36063,36065],{"class":70,"line":9921},[68,36062,32467],{"class":335},[68,36064,381],{"class":331},[68,36066,32472],{"class":335},[68,36068,36069],{"class":70,"line":9946},[68,36070,2606],{"emptyLinePlaceholder":260},[68,36072,36073],{"class":70,"line":9969},[68,36074,32481],{"class":393},[68,36076,36077,36079,36081],{"class":70,"line":9993},[68,36078,31490],{"class":335},[68,36080,381],{"class":331},[68,36082,32490],{"class":335},[68,36084,36085],{"class":70,"line":9998},[68,36086,32495],{"class":393},[68,36088,36089],{"class":70,"line":10003},[68,36090,32500],{"class":393},[68,36092,36093],{"class":70,"line":10008},[68,36094,32505],{"class":393},[68,36096,36097,36099,36101],{"class":70,"line":10017},[68,36098,32510],{"class":335},[68,36100,381],{"class":331},[68,36102,32515],{"class":335},[68,36104,36105],{"class":70,"line":10022},[68,36106,2606],{"emptyLinePlaceholder":260},[68,36108,36109],{"class":70,"line":10028},[68,36110,2606],{"emptyLinePlaceholder":260},[68,36112,36113],{"class":70,"line":10049},[68,36114,32528],{"class":393},[68,36116,36117],{"class":70,"line":10055},[68,36118,32533],{"class":393},[68,36120,36121,36123,36125],{"class":70,"line":10069},[68,36122,32538],{"class":335},[68,36124,381],{"class":331},[68,36126,32543],{"class":82},[68,36128,36129],{"class":70,"line":10075},[68,36130,32548],{"class":393},[68,36132,36133,36135,36137],{"class":70,"line":10102},[68,36134,32553],{"class":335},[68,36136,381],{"class":331},[68,36138,32558],{"class":335},[68,36140,36141],{"class":70,"line":10111},[68,36142,32563],{"class":393},[68,36144,36145,36147,36149],{"class":70,"line":10117},[68,36146,32568],{"class":335},[68,36148,381],{"class":331},[68,36150,32558],{"class":335},[68,36152,36153],{"class":70,"line":10125},[68,36154,32577],{"class":393},[68,36156,36157,36159,36161],{"class":70,"line":10130},[68,36158,32582],{"class":335},[68,36160,381],{"class":331},[68,36162,32558],{"class":335},[68,36164,36165],{"class":70,"line":16809},[68,36166,32591],{"class":393},[68,36168,36169,36171,36173],{"class":70,"line":16815},[68,36170,32596],{"class":335},[68,36172,381],{"class":331},[68,36174,32558],{"class":335},[68,36176,36177],{"class":70,"line":16838},[68,36178,2606],{"emptyLinePlaceholder":260},[68,36180,36181],{"class":70,"line":16844},[68,36182,32609],{"class":393},[68,36184,36185,36187,36189],{"class":70,"line":16867},[68,36186,32614],{"class":335},[68,36188,381],{"class":331},[68,36190,32619],{"class":335},[68,36192,36193],{"class":70,"line":16881},[68,36194,2606],{"emptyLinePlaceholder":260},[68,36196,36197],{"class":70,"line":16901},[68,36198,2606],{"emptyLinePlaceholder":260},[68,36200,36201],{"class":70,"line":16907},[68,36202,32632],{"class":393},[68,36204,36205,36207,36209,36211,36213],{"class":70,"line":16918},[68,36206,3407],{"class":331},[68,36208,32639],{"class":335},[68,36210,26247],{"class":331},[68,36212,32644],{"class":82},[68,36214,32647],{"class":335},[68,36216,36217,36219,36221,36223,36225,36227,36229,36231,36233,36235,36237],{"class":70,"line":16941},[68,36218,32652],{"class":82},[68,36220,336],{"class":335},[68,36222,32657],{"class":78},[68,36224,32660],{"class":82},[68,36226,917],{"class":78},[68,36228,32660],{"class":82},[68,36230,584],{"class":78},[68,36232,32669],{"class":335},[68,36234,865],{"class":331},[68,36236,551],{"class":82},[68,36238,30698],{"class":335},[68,36240,36241,36243,36245,36247,36249,36251],{"class":70,"line":16963},[68,36242,32652],{"class":82},[68,36244,336],{"class":335},[68,36246,32684],{"class":78},[68,36248,788],{"class":331},[68,36250,779],{"class":82},[68,36252,342],{"class":335},[68,36254,36255],{"class":70,"line":16968},[68,36256,2606],{"emptyLinePlaceholder":260},[68,36258,36259],{"class":70,"line":16974},[68,36260,32699],{"class":393},[68,36262,36263],{"class":70,"line":16988},[68,36264,32704],{"class":393},[68,36266,36267,36269,36271],{"class":70,"line":17001},[68,36268,32709],{"class":335},[68,36270,381],{"class":331},[68,36272,32543],{"class":82},[68,36274,36275],{"class":70,"line":17006},[68,36276,32718],{"class":393},[68,36278,36279,36281,36283],{"class":70,"line":17020},[68,36280,32723],{"class":335},[68,36282,381],{"class":331},[68,36284,3291],{"class":82},[68,36286,36287],{"class":70,"line":17025},[68,36288,32732],{"class":393},[68,36290,36291,36293,36295],{"class":70,"line":17031},[68,36292,32737],{"class":335},[68,36294,381],{"class":331},[68,36296,32543],{"class":82},[68,36298,36299],{"class":70,"line":17036},[68,36300,32746],{"class":393},[68,36302,36303,36305,36307],{"class":70,"line":17050},[68,36304,32751],{"class":335},[68,36306,381],{"class":331},[68,36308,3291],{"class":82},[68,36310,36311],{"class":70,"line":17055},[68,36312,32760],{"class":393},[68,36314,36315,36317,36319],{"class":70,"line":17060},[68,36316,32765],{"class":335},[68,36318,381],{"class":331},[68,36320,3291],{"class":82},[68,36322,36323],{"class":70,"line":17074},[68,36324,32774],{"class":393},[68,36326,36327,36329,36331],{"class":70,"line":17086},[68,36328,32779],{"class":335},[68,36330,381],{"class":331},[68,36332,3291],{"class":82},[68,36334,36335],{"class":70,"line":17091},[68,36336,32788],{"class":393},[68,36338,36339,36341,36343,36345,36347],{"class":70,"line":17104},[68,36340,3609],{"class":331},[68,36342,31802],{"class":335},[68,36344,26247],{"class":331},[68,36346,31807],{"class":82},[68,36348,32801],{"class":335},[68,36350,36351],{"class":70,"line":17109},[68,36352,32806],{"class":393},[68,36354,36355,36357,36359],{"class":70,"line":17114},[68,36356,32811],{"class":335},[68,36358,381],{"class":331},[68,36360,32816],{"class":335},[68,36362,36363],{"class":70,"line":17119},[68,36364,32821],{"class":393},[68,36366,36367,36369,36371],{"class":70,"line":17132},[68,36368,32826],{"class":335},[68,36370,381],{"class":331},[68,36372,32831],{"class":335},[68,36374,36375],{"class":70,"line":17137},[68,36376,32837],{"class":393},[68,36378,36379],{"class":70,"line":32834},[68,36380,32843],{"class":335},[68,36382,36383],{"class":70,"line":32840},[68,36384,32849],{"class":393},[68,36386,36387],{"class":70,"line":32846},[68,36388,32855],{"class":393},[68,36390,36391,36393,36395],{"class":70,"line":32852},[68,36392,32861],{"class":335},[68,36394,381],{"class":331},[68,36396,32866],{"class":335},[68,36398,36399],{"class":70,"line":32858},[68,36400,32872],{"class":393},[68,36402,36403,36405,36407,36409,36411,36413,36415],{"class":70,"line":32869},[68,36404,32878],{"class":335},[68,36406,381],{"class":331},[68,36408,32883],{"class":335},[68,36410,32886],{"class":5421},[68,36412,381],{"class":331},[68,36414,551],{"class":82},[68,36416,342],{"class":335},[68,36418,36419],{"class":70,"line":32875},[68,36420,32898],{"class":393},[68,36422,36423,36425,36427],{"class":70,"line":32895},[68,36424,32904],{"class":335},[68,36426,381],{"class":331},[68,36428,32909],{"class":335},[68,36430,36431],{"class":70,"line":32901},[68,36432,32915],{"class":393},[68,36434,36435],{"class":70,"line":32912},[68,36436,32921],{"class":335},[68,36438,36439],{"class":70,"line":32918},[68,36440,32927],{"class":393},[68,36442,36443],{"class":70,"line":32924},[68,36444,32933],{"class":335},[68,36446,36447],{"class":70,"line":32930},[68,36448,32939],{"class":393},[68,36450,36451],{"class":70,"line":32936},[68,36452,32945],{"class":335},[68,36454,36455],{"class":70,"line":32942},[68,36456,32951],{"class":393},[68,36458,36459,36461,36463,36465,36467,36469,36471],{"class":70,"line":32948},[68,36460,32957],{"class":335},[68,36462,9682],{"class":331},[68,36464,32962],{"class":335},[68,36466,788],{"class":331},[68,36468,32967],{"class":335},[68,36470,525],{"class":82},[68,36472,342],{"class":335},[68,36474,36475],{"class":70,"line":32954},[68,36476,32977],{"class":393},[68,36478,36479,36481,36483,36485,36487],{"class":70,"line":32974},[68,36480,32983],{"class":335},[68,36482,9682],{"class":331},[68,36484,32988],{"class":335},[68,36486,3155],{"class":331},[68,36488,32993],{"class":335},[68,36490,36491],{"class":70,"line":32980},[68,36492,32999],{"class":393},[68,36494,36495,36497,36499,36501,36503],{"class":70,"line":32996},[68,36496,33005],{"class":335},[68,36498,9682],{"class":331},[68,36500,32967],{"class":335},[68,36502,525],{"class":82},[68,36504,342],{"class":335},[68,36506,36507],{"class":70,"line":33002},[68,36508,33019],{"class":393},[68,36510,36511,36513,36515,36517,36519],{"class":70,"line":33016},[68,36512,3609],{"class":331},[68,36514,33027],{"class":335},[68,36516,26247],{"class":331},[68,36518,31807],{"class":82},[68,36520,33034],{"class":335},[68,36522,36523],{"class":70,"line":33022},[68,36524,33040],{"class":393},[68,36526,36527,36529,36531],{"class":70,"line":33037},[68,36528,32811],{"class":335},[68,36530,381],{"class":331},[68,36532,32816],{"class":335},[68,36534,36535],{"class":70,"line":33043},[68,36536,33055],{"class":393},[68,36538,36539,36541,36543],{"class":70,"line":33052},[68,36540,32826],{"class":335},[68,36542,381],{"class":331},[68,36544,32831],{"class":335},[68,36546,36547],{"class":70,"line":33058},[68,36548,33070],{"class":393},[68,36550,36551],{"class":70,"line":33067},[68,36552,33076],{"class":335},[68,36554,36555],{"class":70,"line":33073},[68,36556,36557],{"class":393},"            # 验证时不计算梯度以节省内存\u002F计算\n",[68,36559,36560,36562],{"class":70,"line":33079},[68,36561,33082],{"class":331},[68,36563,33085],{"class":335},[68,36565,36566],{"class":70,"line":33088},[68,36567,33091],{"class":393},[68,36569,36570,36573,36575],{"class":70,"line":33094},[68,36571,36572],{"class":335},"                output",[68,36574,381],{"class":331},[68,36576,32866],{"class":335},[68,36578,36579],{"class":70,"line":33105},[68,36580,33108],{"class":393},[68,36582,36583,36586,36588,36590,36592,36594,36596],{"class":70,"line":33111},[68,36584,36585],{"class":335},"                pre_lab",[68,36587,381],{"class":331},[68,36589,32883],{"class":335},[68,36591,32886],{"class":5421},[68,36593,381],{"class":331},[68,36595,551],{"class":82},[68,36597,342],{"class":335},[68,36599,36600],{"class":70,"line":33130},[68,36601,33133],{"class":393},[68,36603,36604,36607,36609],{"class":70,"line":33136},[68,36605,36606],{"class":335},"                val_batch_loss",[68,36608,381],{"class":331},[68,36610,32909],{"class":335},[68,36612,36613],{"class":70,"line":33147},[68,36614,33150],{"class":393},[68,36616,36617,36620,36622,36625,36627,36629,36631],{"class":70,"line":33153},[68,36618,36619],{"class":335},"                val_loss",[68,36621,9682],{"class":331},[68,36623,36624],{"class":335},"val_batch_loss.item()",[68,36626,788],{"class":331},[68,36628,32967],{"class":335},[68,36630,525],{"class":82},[68,36632,342],{"class":335},[68,36634,36635,36638,36640,36642,36644],{"class":70,"line":33173},[68,36636,36637],{"class":335},"                val_corrects",[68,36639,9682],{"class":331},[68,36641,32988],{"class":335},[68,36643,3155],{"class":331},[68,36645,32993],{"class":335},[68,36647,36648],{"class":70,"line":33189},[68,36649,36650],{"class":393},"            # 当前用于验证的样本数量\n",[68,36652,36653,36656,36658,36660,36662],{"class":70,"line":33195},[68,36654,36655],{"class":335},"            val_num",[68,36657,9682],{"class":331},[68,36659,32967],{"class":335},[68,36661,525],{"class":82},[68,36663,342],{"class":335},[68,36665,36666],{"class":70,"line":33209},[68,36667,33212],{"class":393},[68,36669,36670],{"class":70,"line":33215},[68,36671,33218],{"class":393},[68,36673,36674,36676,36678],{"class":70,"line":33221},[68,36675,33224],{"class":335},[68,36677,917],{"class":331},[68,36679,33229],{"class":335},[68,36681,36682],{"class":70,"line":33232},[68,36683,33235],{"class":393},[68,36685,36686],{"class":70,"line":33238},[68,36687,33241],{"class":393},[68,36689,36690,36692,36694],{"class":70,"line":33244},[68,36691,33247],{"class":335},[68,36693,917],{"class":331},[68,36695,33229],{"class":335},[68,36697,36698],{"class":70,"line":33254},[68,36699,33257],{"class":393},[68,36701,36702,36704,36706],{"class":70,"line":33260},[68,36703,33263],{"class":335},[68,36705,917],{"class":331},[68,36707,33268],{"class":335},[68,36709,36710],{"class":70,"line":33271},[68,36711,33274],{"class":393},[68,36713,36714,36716,36718],{"class":70,"line":33277},[68,36715,33280],{"class":335},[68,36717,917],{"class":331},[68,36719,33268],{"class":335},[68,36721,36722],{"class":70,"line":33287},[68,36723,2606],{"emptyLinePlaceholder":260},[68,36725,36726],{"class":70,"line":33292},[68,36727,33295],{"class":393},[68,36729,36730,36732,36734,36736,36738,36740,36742,36744,36746,36748,36750,36752,36754,36756,36758,36760,36762,36764,36766,36768],{"class":70,"line":33298},[68,36731,32652],{"class":82},[68,36733,336],{"class":335},[68,36735,3798],{"class":78},[68,36737,32660],{"class":82},[68,36739,33309],{"class":78},[68,36741,1229],{"class":82},[68,36743,33314],{"class":331},[68,36745,1279],{"class":82},[68,36747,33319],{"class":78},[68,36749,1229],{"class":82},[68,36751,33314],{"class":331},[68,36753,1279],{"class":82},[68,36755,3798],{"class":78},[68,36757,33330],{"class":335},[68,36759,865],{"class":331},[68,36761,551],{"class":82},[68,36763,33337],{"class":335},[68,36765,865],{"class":331},[68,36767,551],{"class":82},[68,36769,33344],{"class":335},[68,36771,36772,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802,36804,36806,36808,36810],{"class":70,"line":33347},[68,36773,32652],{"class":82},[68,36775,336],{"class":335},[68,36777,3798],{"class":78},[68,36779,32660],{"class":82},[68,36781,33358],{"class":78},[68,36783,1229],{"class":82},[68,36785,33314],{"class":331},[68,36787,1279],{"class":82},[68,36789,33367],{"class":78},[68,36791,1229],{"class":82},[68,36793,33314],{"class":331},[68,36795,1279],{"class":82},[68,36797,3798],{"class":78},[68,36799,33378],{"class":335},[68,36801,865],{"class":331},[68,36803,551],{"class":82},[68,36805,33385],{"class":335},[68,36807,865],{"class":331},[68,36809,551],{"class":82},[68,36811,33344],{"class":335},[68,36813,36814],{"class":70,"line":33394},[68,36815,2606],{"emptyLinePlaceholder":260},[68,36817,36818],{"class":70,"line":33399},[68,36819,33402],{"class":393},[68,36821,36822,36824,36826,36828,36830,36832,36834],{"class":70,"line":33405},[68,36823,2703],{"class":331},[68,36825,33410],{"class":335},[68,36827,865],{"class":331},[68,36829,551],{"class":82},[68,36831,1273],{"class":335},[68,36833,1293],{"class":331},[68,36835,33421],{"class":335},[68,36837,36838],{"class":70,"line":33424},[68,36839,33427],{"class":393},[68,36841,36842,36844,36846,36848,36850,36852,36854],{"class":70,"line":33430},[68,36843,33433],{"class":335},[68,36845,375],{"class":82},[68,36847,381],{"class":331},[68,36849,33440],{"class":335},[68,36851,865],{"class":331},[68,36853,551],{"class":82},[68,36855,33447],{"class":335},[68,36857,36858],{"class":70,"line":33450},[68,36859,33453],{"class":393},[68,36861,36862],{"class":70,"line":33456},[68,36863,33459],{"class":393},[68,36865,36866,36868,36870],{"class":70,"line":33462},[68,36867,33465],{"class":335},[68,36869,381],{"class":331},[68,36871,32515],{"class":335},[68,36873,36874],{"class":70,"line":33472},[68,36875,2606],{"emptyLinePlaceholder":260},[68,36877,36878],{"class":70,"line":33477},[68,36879,33480],{"class":393},[68,36881,36882,36884,36886,36888,36890],{"class":70,"line":33483},[68,36883,33486],{"class":335},[68,36885,381],{"class":331},[68,36887,33491],{"class":335},[68,36889,865],{"class":331},[68,36891,33496],{"class":335},[68,36893,36894,36896,36898,36900,36902,36904,36906,36908,36910,36912,36914,36916,36918,36920,36922,36924,36926,36928],{"class":70,"line":33499},[68,36895,32652],{"class":82},[68,36897,336],{"class":335},[68,36899,33506],{"class":78},[68,36901,1229],{"class":82},[68,36903,33511],{"class":331},[68,36905,1279],{"class":82},[68,36907,877],{"class":78},[68,36909,1229],{"class":82},[68,36911,33511],{"class":331},[68,36913,1279],{"class":82},[68,36915,33524],{"class":78},[68,36917,33527],{"class":335},[68,36919,33530],{"class":331},[68,36921,1240],{"class":82},[68,36923,33535],{"class":335},[68,36925,661],{"class":331},[68,36927,1240],{"class":82},[68,36929,30698],{"class":335},[68,36931,36932],{"class":70,"line":33544},[68,36933,36934],{"class":393},"    # 选择最优参数并保存\n",[68,36936,36937],{"class":70,"line":33550},[68,36938,36939],{"class":393},"    # 保存最佳模型权重字典\n",[68,36941,36942,36945,36947],{"class":70,"line":33556},[68,36943,36944],{"class":335},"    torch.save(best_model_wts,",[68,36946,33568],{"class":78},[68,36948,342],{"class":335},[68,36950,36951],{"class":70,"line":33562},[68,36952,33588],{"class":393},[68,36954,36955,36957,36959,36961,36963,36965],{"class":70,"line":33573},[68,36956,33594],{"class":335},[68,36958,381],{"class":331},[68,36960,33599],{"class":335},[68,36962,33602],{"class":5421},[68,36964,381],{"class":331},[68,36966,1753],{"class":335},[68,36968,36969,36971,36973,36975],{"class":70,"line":33579},[68,36970,33612],{"class":78},[68,36972,1192],{"class":335},[68,36974,33617],{"class":82},[68,36976,33620],{"class":335},[68,36978,36979,36981],{"class":70,"line":33585},[68,36980,33626],{"class":78},[68,36982,33629],{"class":335},[68,36984,36985,36987],{"class":70,"line":33591},[68,36986,33635],{"class":78},[68,36988,33638],{"class":335},[68,36990,36991,36993],{"class":70,"line":33609},[68,36992,33644],{"class":78},[68,36994,33647],{"class":335},[68,36996,36997,36999],{"class":70,"line":33623},[68,36998,33653],{"class":78},[68,37000,33656],{"class":335},[68,37002,37003],{"class":70,"line":33632},[68,37004,33662],{"class":335},[68,37006,37007],{"class":70,"line":33641},[68,37008,33668],{"class":393},[68,37010,37011,37013],{"class":70,"line":33650},[68,37012,4296],{"class":331},[68,37014,33676],{"class":335},[68,37016,37017],{"class":70,"line":33659},[68,37018,2606],{"emptyLinePlaceholder":260},[68,37020,37021],{"class":70,"line":33665},[68,37022,33687],{"class":393},[68,37024,37025,37027,37029],{"class":70,"line":33671},[68,37026,32148],{"class":331},[68,37028,33695],{"class":74},[68,37030,33698],{"class":335},[68,37032,37033],{"class":70,"line":33679},[68,37034,33704],{"class":393},[68,37036,37037,37039,37041,37043,37045,37047,37049,37051],{"class":70,"line":33684},[68,37038,33710],{"class":335},[68,37040,31894],{"class":5421},[68,37042,381],{"class":331},[68,37044,336],{"class":335},[68,37046,831],{"class":82},[68,37048,711],{"class":335},[68,37050,626],{"class":82},[68,37052,30698],{"class":335},[68,37054,37055],{"class":70,"line":33690},[68,37056,33730],{"class":393},[68,37058,37059],{"class":70,"line":33701},[68,37060,33736],{"class":393},[68,37062,37063],{"class":70,"line":33707},[68,37064,33742],{"class":393},[68,37066,37067,37069,37071,37073,37075,37077,37079],{"class":70,"line":33727},[68,37068,31928],{"class":335},[68,37070,551],{"class":82},[68,37072,711],{"class":335},[68,37074,412],{"class":82},[68,37076,711],{"class":335},[68,37078,551],{"class":82},[68,37080,342],{"class":335},[68,37082,37083],{"class":70,"line":33733},[68,37084,33765],{"class":393},[68,37086,37087],{"class":70,"line":33739},[68,37088,33771],{"class":393},[68,37090,37091],{"class":70,"line":33745},[68,37092,33777],{"class":393},[68,37094,37095],{"class":70,"line":33762},[68,37096,33783],{"class":393},[68,37098,37099],{"class":70,"line":33768},[68,37100,33789],{"class":393},[68,37102,37103,37105,37107,37109,37111,37113,37115,37117,37119],{"class":70,"line":33774},[68,37104,33795],{"class":335},[68,37106,33798],{"class":78},[68,37108,33801],{"class":335},[68,37110,33804],{"class":78},[68,37112,711],{"class":335},[68,37114,33809],{"class":5421},[68,37116,381],{"class":331},[68,37118,33814],{"class":78},[68,37120,342],{"class":335},[68,37122,37123,37125,37127,37129,37131,37133,37135,37137,37139],{"class":70,"line":33780},[68,37124,33795],{"class":335},[68,37126,33798],{"class":78},[68,37128,33826],{"class":335},[68,37130,33829],{"class":78},[68,37132,711],{"class":335},[68,37134,33809],{"class":5421},[68,37136,381],{"class":331},[68,37138,33838],{"class":78},[68,37140,342],{"class":335},[68,37142,37143],{"class":70,"line":33786},[68,37144,33846],{"class":393},[68,37146,37147],{"class":70,"line":33792},[68,37148,33852],{"class":335},[68,37150,37151],{"class":70,"line":33819},[68,37152,33858],{"class":393},[68,37154,37155,37157,37159],{"class":70,"line":33843},[68,37156,33864],{"class":335},[68,37158,33867],{"class":78},[68,37160,342],{"class":335},[68,37162,37163,37165,37167],{"class":70,"line":33849},[68,37164,33875],{"class":335},[68,37166,33878],{"class":78},[68,37168,342],{"class":335},[68,37170,37171],{"class":70,"line":33855},[68,37172,33886],{"class":393},[68,37174,37175,37177,37179,37181,37183,37185,37187],{"class":70,"line":33861},[68,37176,31928],{"class":335},[68,37178,551],{"class":82},[68,37180,711],{"class":335},[68,37182,412],{"class":82},[68,37184,711],{"class":335},[68,37186,412],{"class":82},[68,37188,342],{"class":335},[68,37190,37191,37193,37195,37197,37199,37201,37203,37205,37207],{"class":70,"line":33872},[68,37192,33795],{"class":335},[68,37194,33798],{"class":78},[68,37196,33913],{"class":335},[68,37198,33804],{"class":78},[68,37200,711],{"class":335},[68,37202,33809],{"class":5421},[68,37204,381],{"class":331},[68,37206,33924],{"class":78},[68,37208,342],{"class":335},[68,37210,37211,37213,37215,37217,37219,37221,37223,37225,37227],{"class":70,"line":33883},[68,37212,33795],{"class":335},[68,37214,33798],{"class":78},[68,37216,33936],{"class":335},[68,37218,33829],{"class":78},[68,37220,711],{"class":335},[68,37222,33809],{"class":5421},[68,37224,381],{"class":331},[68,37226,33947],{"class":78},[68,37228,342],{"class":335},[68,37230,37231],{"class":70,"line":33889},[68,37232,33955],{"class":393},[68,37234,37235],{"class":70,"line":33906},[68,37236,33852],{"class":335},[68,37238,37239,37241,37243],{"class":70,"line":33929},[68,37240,33864],{"class":335},[68,37242,33798],{"class":78},[68,37244,342],{"class":335},[68,37246,37247,37249,37251],{"class":70,"line":33952},[68,37248,33875],{"class":335},[68,37250,33977],{"class":78},[68,37252,342],{"class":335},[68,37254,37255],{"class":70,"line":33958},[68,37256,33985],{"class":335},[68,37258,37259],{"class":70,"line":33963},[68,37260,2606],{"emptyLinePlaceholder":260},[68,37262,37263],{"class":70,"line":33972},[68,37264,33996],{"class":393},[68,37266,37267,37269,37271,37273,37275],{"class":70,"line":33982},[68,37268,1738],{"class":331},[68,37270,31421],{"class":82},[68,37272,3155],{"class":331},[68,37274,31426],{"class":78},[68,37276,3945],{"class":335},[68,37278,37279],{"class":70,"line":33988},[68,37280,34015],{"class":393},[68,37282,37283,37286,37288],{"class":70,"line":33993},[68,37284,37285],{"class":335},"    AlexNet",[68,37287,381],{"class":331},[68,37289,37290],{"class":335},"AlexNet()\n",[68,37292,37293,37295,37297],{"class":70,"line":33999},[68,37294,34032],{"class":335},[68,37296,381],{"class":331},[68,37298,34037],{"class":335},[68,37300,37301,37303,37305,37308,37310,37312,37314],{"class":70,"line":34012},[68,37302,33594],{"class":335},[68,37304,381],{"class":331},[68,37306,37307],{"class":335},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[68,37309,34050],{"class":5421},[68,37311,381],{"class":331},[68,37313,1033],{"class":82},[68,37315,342],{"class":335},[68,37317,37318],{"class":70,"line":34018},[68,37319,34062],{"class":335},[23,37321,37322],{"start":1387},[26,37323,34075],{},[58,37325,37327],{"className":30579,"code":37326,"language":30581,"meta":63,"style":63},"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",[65,37328,37329,37335,37345,37355,37365,37369,37379,37389,37400,37404,37408,37412,37420,37436,37446,37462,37472,37486,37490,37500,37510,37520,37526,37530,37534,37542,37546,37562,37570,37574,37578,37586,37594,37598,37602,37606,37610,37616,37620,37630,37638,37646,37650,37654,37658,37666,37670,37686,37690,37694,37698,37710,37714,37726,37730,37734,37746,37750,37760,37764,37768,37780,37784,37792,37796,37800,37808,37812,37820,37824,37828,37832,37836,37840,37856,37864,37868,37872,37920,37926,37930,37940,37948,37956,37960,37964,37968,37972,37980,37984,38000,38004,38012,38020],{"__ignoreMap":63},[68,37330,37331,37333],{"class":70,"line":71},[68,37332,30593],{"class":331},[68,37334,30596],{"class":335},[68,37336,37337,37339,37341,37343],{"class":70,"line":92},[68,37338,30593],{"class":331},[68,37340,31616],{"class":335},[68,37342,31584],{"class":331},[68,37344,31621],{"class":335},[68,37346,37347,37349,37351,37353],{"class":70,"line":1387},[68,37348,30938],{"class":331},[68,37350,34103],{"class":335},[68,37352,30593],{"class":331},[68,37354,34108],{"class":335},[68,37356,37357,37359,37361,37363],{"class":70,"line":1402},[68,37358,30938],{"class":331},[68,37360,31599],{"class":335},[68,37362,30593],{"class":331},[68,37364,31604],{"class":335},[68,37366,37367],{"class":70,"line":1408},[68,37368,34123],{"class":393},[68,37370,37371,37373,37375,37377],{"class":70,"line":1422},[68,37372,30938],{"class":331},[68,37374,31569],{"class":335},[68,37376,30593],{"class":331},[68,37378,31574],{"class":335},[68,37380,37381,37383,37385,37387],{"class":70,"line":1428},[68,37382,30938],{"class":331},[68,37384,32115],{"class":335},[68,37386,30593],{"class":331},[68,37388,35758],{"class":335},[68,37390,37391,37393,37396,37398],{"class":70,"line":1519},[68,37392,30938],{"class":331},[68,37394,37395],{"class":335}," 练习.AlexNet.model ",[68,37397,30593],{"class":331},[68,37399,35758],{"class":335},[68,37401,37402],{"class":70,"line":1525},[68,37403,2606],{"emptyLinePlaceholder":260},[68,37405,37406],{"class":70,"line":1537},[68,37407,2606],{"emptyLinePlaceholder":260},[68,37409,37410],{"class":70,"line":1819},[68,37411,34152],{"class":393},[68,37413,37414,37416,37418],{"class":70,"line":1824},[68,37415,32148],{"class":331},[68,37417,34159],{"class":74},[68,37419,32154],{"class":335},[68,37421,37422,37424,37426,37428,37430,37432,37434],{"class":70,"line":1830},[68,37423,34166],{"class":335},[68,37425,381],{"class":331},[68,37427,31656],{"class":335},[68,37429,31659],{"class":5421},[68,37431,381],{"class":331},[68,37433,31664],{"class":78},[68,37435,31667],{"class":335},[68,37437,37438,37440,37442,37444],{"class":70,"line":1835},[68,37439,34183],{"class":5421},[68,37441,381],{"class":331},[68,37443,34188],{"class":82},[68,37445,31667],{"class":335},[68,37447,37448,37450,37452,37454,37456,37458,37460],{"class":70,"line":1849},[68,37449,34195],{"class":5421},[68,37451,381],{"class":331},[68,37453,31694],{"class":335},[68,37455,31697],{"class":5421},[68,37457,381],{"class":331},[68,37459,35650],{"class":82},[68,37461,31705],{"class":335},[68,37463,37464,37466,37468,37470],{"class":70,"line":1854},[68,37465,34212],{"class":5421},[68,37467,381],{"class":331},[68,37469,31677],{"class":82},[68,37471,342],{"class":335},[68,37473,37474,37476,37478,37480,37482,37484],{"class":70,"line":1860},[68,37475,34223],{"class":335},[68,37477,381],{"class":331},[68,37479,31735],{"class":335},[68,37481,31738],{"class":5421},[68,37483,381],{"class":331},[68,37485,34234],{"class":335},[68,37487,37488],{"class":70,"line":1881},[68,37489,34239],{"class":393},[68,37491,37492,37494,37496,37498],{"class":70,"line":1886},[68,37493,34244],{"class":5421},[68,37495,381],{"class":331},[68,37497,551],{"class":82},[68,37499,31667],{"class":335},[68,37501,37502,37504,37506,37508],{"class":70,"line":1900},[68,37503,34255],{"class":5421},[68,37505,381],{"class":331},[68,37507,31677],{"class":82},[68,37509,31667],{"class":335},[68,37511,37512,37514,37516,37518],{"class":70,"line":1905},[68,37513,34266],{"class":5421},[68,37515,381],{"class":331},[68,37517,525],{"class":82},[68,37519,342],{"class":335},[68,37521,37522,37524],{"class":70,"line":1934},[68,37523,4296],{"class":331},[68,37525,34279],{"class":335},[68,37527,37528],{"class":70,"line":1939},[68,37529,2606],{"emptyLinePlaceholder":260},[68,37531,37532],{"class":70,"line":1956},[68,37533,34288],{"class":393},[68,37535,37536,37538,37540],{"class":70,"line":1961},[68,37537,32148],{"class":331},[68,37539,34295],{"class":74},[68,37541,34298],{"class":335},[68,37543,37544],{"class":70,"line":1966},[68,37545,34303],{"class":393},[68,37547,37548,37550,37552,37554,37556,37558,37560],{"class":70,"line":1971},[68,37549,31438],{"class":335},[68,37551,381],{"class":331},[68,37553,31445],{"class":78},[68,37555,1911],{"class":331},[68,37557,31450],{"class":335},[68,37559,1908],{"class":331},[68,37561,34320],{"class":78},[68,37563,37564,37566,37568],{"class":70,"line":1985},[68,37565,31490],{"class":335},[68,37567,381],{"class":331},[68,37569,32490],{"class":335},[68,37571,37572],{"class":70,"line":1990},[68,37573,2606],{"emptyLinePlaceholder":260},[68,37575,37576],{"class":70,"line":2783},[68,37577,34337],{"class":393},[68,37579,37580,37582,37584],{"class":70,"line":2797},[68,37581,34342],{"class":335},[68,37583,381],{"class":331},[68,37585,32543],{"class":82},[68,37587,37588,37590,37592],{"class":70,"line":2805},[68,37589,34351],{"class":335},[68,37591,381],{"class":331},[68,37593,3291],{"class":82},[68,37595,37596],{"class":70,"line":2810},[68,37597,2606],{"emptyLinePlaceholder":260},[68,37599,37600],{"class":70,"line":2816},[68,37601,34364],{"class":393},[68,37603,37604],{"class":70,"line":2822},[68,37605,34369],{"class":393},[68,37607,37608],{"class":70,"line":2827},[68,37609,34374],{"class":393},[68,37611,37612,37614],{"class":70,"line":8153},[68,37613,34379],{"class":331},[68,37615,33085],{"class":335},[68,37617,37618],{"class":70,"line":8177},[68,37619,34386],{"class":393},[68,37621,37622,37624,37626,37628],{"class":70,"line":8182},[68,37623,3609],{"class":331},[68,37625,34393],{"class":335},[68,37627,26247],{"class":331},[68,37629,34398],{"class":335},[68,37631,37632,37634,37636],{"class":70,"line":8188},[68,37633,34403],{"class":335},[68,37635,381],{"class":331},[68,37637,34408],{"class":335},[68,37639,37640,37642,37644],{"class":70,"line":8215},[68,37641,34413],{"class":335},[68,37643,381],{"class":331},[68,37645,34418],{"class":335},[68,37647,37648],{"class":70,"line":8220},[68,37649,34423],{"class":393},[68,37651,37652],{"class":70,"line":8226},[68,37653,33076],{"class":335},[68,37655,37656],{"class":70,"line":8238},[68,37657,34432],{"class":393},[68,37659,37660,37662,37664],{"class":70,"line":8250},[68,37661,32861],{"class":335},[68,37663,381],{"class":331},[68,37665,34441],{"class":335},[68,37667,37668],{"class":70,"line":8262},[68,37669,34446],{"class":393},[68,37671,37672,37674,37676,37678,37680,37682,37684],{"class":70,"line":9921},[68,37673,32878],{"class":335},[68,37675,381],{"class":331},[68,37677,32883],{"class":335},[68,37679,32886],{"class":5421},[68,37681,381],{"class":331},[68,37683,551],{"class":82},[68,37685,342],{"class":335},[68,37687,37688],{"class":70,"line":9946},[68,37689,34467],{"class":393},[68,37691,37692],{"class":70,"line":9969},[68,37693,34472],{"class":393},[68,37695,37696],{"class":70,"line":9993},[68,37697,34477],{"class":393},[68,37699,37700,37702,37704,37706,37708],{"class":70,"line":9998},[68,37701,34482],{"class":335},[68,37703,9682],{"class":331},[68,37705,32988],{"class":335},[68,37707,3155],{"class":331},[68,37709,34491],{"class":335},[68,37711,37712],{"class":70,"line":10003},[68,37713,34496],{"class":393},[68,37715,37716,37718,37720,37722,37724],{"class":70,"line":10008},[68,37717,34501],{"class":335},[68,37719,9682],{"class":331},[68,37721,34506],{"class":335},[68,37723,525],{"class":82},[68,37725,342],{"class":335},[68,37727,37728],{"class":70,"line":10017},[68,37729,2606],{"emptyLinePlaceholder":260},[68,37731,37732],{"class":70,"line":10022},[68,37733,34519],{"class":393},[68,37735,37736,37738,37740,37742,37744],{"class":70,"line":10028},[68,37737,34524],{"class":335},[68,37739,381],{"class":331},[68,37741,34529],{"class":335},[68,37743,917],{"class":331},[68,37745,34534],{"class":335},[68,37747,37748],{"class":70,"line":10049},[68,37749,34539],{"class":393},[68,37751,37752,37754,37756,37758],{"class":70,"line":10055},[68,37753,32652],{"class":82},[68,37755,336],{"class":335},[68,37757,34548],{"class":78},[68,37759,34551],{"class":335},[68,37761,37762],{"class":70,"line":10069},[68,37763,2606],{"emptyLinePlaceholder":260},[68,37765,37766],{"class":70,"line":10075},[68,37767,34560],{"class":393},[68,37769,37770,37772,37774,37776,37778],{"class":70,"line":10102},[68,37771,1738],{"class":331},[68,37773,31421],{"class":82},[68,37775,3155],{"class":331},[68,37777,31426],{"class":78},[68,37779,3945],{"class":335},[68,37781,37782],{"class":70,"line":10111},[68,37783,34577],{"class":393},[68,37785,37786,37788,37790],{"class":70,"line":10117},[68,37787,31490],{"class":335},[68,37789,381],{"class":331},[68,37791,37290],{"class":335},[68,37793,37794],{"class":70,"line":10125},[68,37795,34590],{"class":393},[68,37797,37798],{"class":70,"line":10130},[68,37799,34595],{"class":393},[68,37801,37802,37804,37806],{"class":70,"line":16809},[68,37803,34600],{"class":335},[68,37805,34603],{"class":78},[68,37807,30698],{"class":335},[68,37809,37810],{"class":70,"line":16815},[68,37811,34610],{"class":393},[68,37813,37814,37816,37818],{"class":70,"line":16838},[68,37815,34223],{"class":335},[68,37817,381],{"class":331},[68,37819,34619],{"class":335},[68,37821,37822],{"class":70,"line":16844},[68,37823,34624],{"class":393},[68,37825,37826],{"class":70,"line":16867},[68,37827,34629],{"class":335},[68,37829,37830],{"class":70,"line":16881},[68,37831,2606],{"emptyLinePlaceholder":260},[68,37833,37834],{"class":70,"line":16901},[68,37835,34638],{"class":393},[68,37837,37838],{"class":70,"line":16907},[68,37839,34643],{"class":393},[68,37841,37842,37844,37846,37848,37850,37852,37854],{"class":70,"line":16918},[68,37843,31438],{"class":335},[68,37845,381],{"class":331},[68,37847,31445],{"class":78},[68,37849,1911],{"class":331},[68,37851,31450],{"class":335},[68,37853,1908],{"class":331},[68,37855,34320],{"class":78},[68,37857,37858,37860,37862],{"class":70,"line":16941},[68,37859,31490],{"class":335},[68,37861,381],{"class":331},[68,37863,32490],{"class":335},[68,37865,37866],{"class":70,"line":16963},[68,37867,34672],{"class":393},[68,37869,37870],{"class":70,"line":16968},[68,37871,34677],{"class":393},[68,37873,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898,37900,37902,37904,37906,37908,37910,37912,37914,37916,37918],{"class":70,"line":16974},[68,37875,34682],{"class":335},[68,37877,381],{"class":331},[68,37879,1223],{"class":335},[68,37881,34689],{"class":78},[68,37883,711],{"class":335},[68,37885,34694],{"class":78},[68,37887,711],{"class":335},[68,37889,34699],{"class":78},[68,37891,711],{"class":335},[68,37893,34704],{"class":78},[68,37895,711],{"class":335},[68,37897,34709],{"class":78},[68,37899,711],{"class":335},[68,37901,34714],{"class":78},[68,37903,711],{"class":335},[68,37905,34719],{"class":78},[68,37907,711],{"class":335},[68,37909,34724],{"class":78},[68,37911,711],{"class":335},[68,37913,34729],{"class":78},[68,37915,711],{"class":335},[68,37917,34734],{"class":78},[68,37919,33447],{"class":335},[68,37921,37922,37924],{"class":70,"line":16988},[68,37923,34379],{"class":331},[68,37925,33085],{"class":335},[68,37927,37928],{"class":70,"line":17001},[68,37929,34747],{"class":393},[68,37931,37932,37934,37936,37938],{"class":70,"line":17006},[68,37933,3609],{"class":331},[68,37935,34754],{"class":335},[68,37937,26247],{"class":331},[68,37939,34398],{"class":335},[68,37941,37942,37944,37946],{"class":70,"line":17020},[68,37943,32811],{"class":335},[68,37945,381],{"class":331},[68,37947,32816],{"class":335},[68,37949,37950,37952,37954],{"class":70,"line":17025},[68,37951,32826],{"class":335},[68,37953,381],{"class":331},[68,37955,32831],{"class":335},[68,37957,37958],{"class":70,"line":17031},[68,37959,2606],{"emptyLinePlaceholder":260},[68,37961,37962],{"class":70,"line":17036},[68,37963,34783],{"class":393},[68,37965,37966],{"class":70,"line":17050},[68,37967,33076],{"class":335},[68,37969,37970],{"class":70,"line":17055},[68,37971,34792],{"class":393},[68,37973,37974,37976,37978],{"class":70,"line":17060},[68,37975,32861],{"class":335},[68,37977,381],{"class":331},[68,37979,32866],{"class":335},[68,37981,37982],{"class":70,"line":17074},[68,37983,34805],{"class":393},[68,37985,37986,37988,37990,37992,37994,37996,37998],{"class":70,"line":17086},[68,37987,32878],{"class":335},[68,37989,381],{"class":331},[68,37991,32883],{"class":335},[68,37993,32886],{"class":5421},[68,37995,381],{"class":331},[68,37997,551],{"class":82},[68,37999,342],{"class":335},[68,38001,38002],{"class":70,"line":17091},[68,38003,34826],{"class":393},[68,38005,38006,38008,38010],{"class":70,"line":17104},[68,38007,34831],{"class":335},[68,38009,381],{"class":331},[68,38011,34836],{"class":335},[68,38013,38014,38016,38018],{"class":70,"line":17109},[68,38015,34841],{"class":335},[68,38017,381],{"class":331},[68,38019,34846],{"class":335},[68,38021,38022,38024,38026,38028,38030,38032,38034,38036],{"class":70,"line":17114},[68,38023,34851],{"class":82},[68,38025,336],{"class":335},[68,38027,34856],{"class":78},[68,38029,34859],{"class":335},[68,38031,34862],{"class":78},[68,38033,711],{"class":335},[68,38035,34867],{"class":78},[68,38037,34870],{"class":335},[301,38039,38041],{"id":38040},"_22vgg","2.2.VGG",[22203,38043,38045],{"id":38044},"_221原理","2.2.1.原理",[19,38047,38048],{},[48,38049],{"alt":63,"src":38050},"\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",[19,38052,38053],{},[48,38054],{"alt":63,"src":38055},"\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",[19,38057,38058],{},[48,38059],{"alt":63,"src":38060},"\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",[19,38062,38063],{},"参数详细描述：",[19,38065,38066],{},[48,38067],{"alt":63,"src":38068},"\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",[19,38070,38071],{},[48,38072],{"alt":63,"src":38073},"\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",[19,38075,38076],{},[48,38077],{"alt":63,"src":38078},"\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",[19,38080,38081],{},[48,38082],{"alt":63,"src":38083},"\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",[19,38085,38086],{},[48,38087],{"alt":63,"src":38088},"\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",[22203,38090,38092],{"id":38091},"_222代码实现","2.2.2.代码实现",[23,38094,38095],{},[26,38096,38097],{},"网络搭建",[58,38099,38101],{"className":30579,"code":38100,"language":30581,"meta":63,"style":63},"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",[65,38102,38103,38109,38121,38131,38141,38145,38162,38170,38189,38194,38199,38211,38249,38254,38290,38294,38323,38328,38333,38344,38380,38384,38420,38424,38452,38456,38461,38472,38508,38512,38548,38552,38588,38592,38620,38624,38629,38640,38677,38681,38717,38721,38757,38761,38789,38793,38798,38809,38845,38849,38885,38889,38925,38929,38957,38961,38966,38977,38982,38987,38992,39013,39017,39029,39033,39045,39049,39053,39058,39063,39078,39083,39093,39098,39113,39118,39137,39142,39151,39156,39166,39171,39176,39190,39195,39209,39217,39221,39225,39233,39244,39255,39266,39277,39288,39299,39305,39309,39314,39327,39347,39353,39362],{"__ignoreMap":63},[68,38104,38105,38107],{"class":70,"line":71},[68,38106,30593],{"class":331},[68,38108,30596],{"class":335},[68,38110,38111,38113,38116,38118],{"class":70,"line":92},[68,38112,30938],{"class":331},[68,38114,38115],{"class":335}," sympy.core.sympify ",[68,38117,30593],{"class":331},[68,38119,38120],{"class":335}," kernS\n",[68,38122,38123,38125,38127,38129],{"class":70,"line":1387},[68,38124,30938],{"class":331},[68,38126,30941],{"class":335},[68,38128,30593],{"class":331},[68,38130,30946],{"class":335},[68,38132,38133,38135,38137,38139],{"class":70,"line":1402},[68,38134,30938],{"class":331},[68,38136,30958],{"class":335},[68,38138,30593],{"class":331},[68,38140,30963],{"class":335},[68,38142,38143],{"class":70,"line":1408},[68,38144,2606],{"emptyLinePlaceholder":260},[68,38146,38147,38149,38152,38154,38156,38158,38160],{"class":70,"line":1422},[68,38148,14899],{"class":331},[68,38150,38151],{"class":74}," VGG16",[68,38153,336],{"class":335},[68,38155,30979],{"class":74},[68,38157,891],{"class":335},[68,38159,30984],{"class":74},[68,38161,30987],{"class":335},[68,38163,38164,38166,38168],{"class":70,"line":1428},[68,38165,31002],{"class":331},[68,38167,31005],{"class":82},[68,38169,31008],{"class":335},[68,38171,38172,38174,38176,38179,38181,38183,38185,38187],{"class":70,"line":1519},[68,38173,31018],{"class":82},[68,38175,336],{"class":335},[68,38177,38178],{"class":82},"VGG16",[68,38180,12640],{"class":335},[68,38182,31024],{"class":82},[68,38184,31027],{"class":335},[68,38186,31030],{"class":82},[68,38188,2182],{"class":335},[68,38190,38191],{"class":70,"line":1525},[68,38192,38193],{"class":393},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[68,38195,38196],{"class":70,"line":1537},[68,38197,38198],{"class":393},"        # 这里用的是灰度图\n",[68,38200,38201,38203,38206,38208],{"class":70,"line":1819},[68,38202,31046],{"class":82},[68,38204,38205],{"class":335},".block1",[68,38207,381],{"class":331},[68,38209,38210],{"class":335},"nn.Sequential(\n",[68,38212,38213,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246],{"class":70,"line":1824},[68,38214,38215],{"class":335},"            nn.Conv2d(",[68,38217,31057],{"class":5421},[68,38219,381],{"class":331},[68,38221,551],{"class":82},[68,38223,711],{"class":335},[68,38225,31066],{"class":5421},[68,38227,381],{"class":331},[68,38229,537],{"class":82},[68,38231,711],{"class":335},[68,38233,31075],{"class":5421},[68,38235,381],{"class":331},[68,38237,406],{"class":82},[68,38239,711],{"class":335},[68,38241,31084],{"class":5421},[68,38243,381],{"class":331},[68,38245,551],{"class":82},[68,38247,38248],{"class":335},"),\n",[68,38250,38251],{"class":70,"line":1830},[68,38252,38253],{"class":335},"            nn.ReLU(),\n",[68,38255,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288],{"class":70,"line":1835},[68,38257,38215],{"class":335},[68,38259,31057],{"class":5421},[68,38261,381],{"class":331},[68,38263,537],{"class":82},[68,38265,711],{"class":335},[68,38267,31066],{"class":5421},[68,38269,381],{"class":331},[68,38271,537],{"class":82},[68,38273,711],{"class":335},[68,38275,31075],{"class":5421},[68,38277,381],{"class":331},[68,38279,406],{"class":82},[68,38281,711],{"class":335},[68,38283,31084],{"class":5421},[68,38285,381],{"class":331},[68,38287,551],{"class":82},[68,38289,38248],{"class":335},[68,38291,38292],{"class":70,"line":1849},[68,38293,38253],{"class":335},[68,38295,38296,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317,38319,38321],{"class":70,"line":1854},[68,38297,38298],{"class":335},"            nn.MaxPool2d(",[68,38300,31075],{"class":5421},[68,38302,381],{"class":331},[68,38304,412],{"class":82},[68,38306,711],{"class":335},[68,38308,31130],{"class":5421},[68,38310,381],{"class":331},[68,38312,412],{"class":82},[68,38314,711],{"class":335},[68,38316,31084],{"class":5421},[68,38318,381],{"class":331},[68,38320,525],{"class":82},[68,38322,342],{"class":335},[68,38324,38325],{"class":70,"line":1860},[68,38326,38327],{"class":335},"        )\n",[68,38329,38330],{"class":70,"line":1881},[68,38331,38332],{"class":393},"        # 第二层\n",[68,38334,38335,38337,38340,38342],{"class":70,"line":1886},[68,38336,31046],{"class":82},[68,38338,38339],{"class":335},".block2",[68,38341,381],{"class":331},[68,38343,38210],{"class":335},[68,38345,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378],{"class":70,"line":1900},[68,38347,38215],{"class":335},[68,38349,31057],{"class":5421},[68,38351,381],{"class":331},[68,38353,537],{"class":82},[68,38355,711],{"class":335},[68,38357,31066],{"class":5421},[68,38359,381],{"class":331},[68,38361,32271],{"class":82},[68,38363,711],{"class":335},[68,38365,31075],{"class":5421},[68,38367,381],{"class":331},[68,38369,406],{"class":82},[68,38371,711],{"class":335},[68,38373,31084],{"class":5421},[68,38375,381],{"class":331},[68,38377,551],{"class":82},[68,38379,38248],{"class":335},[68,38381,38382],{"class":70,"line":1905},[68,38383,38253],{"class":335},[68,38385,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418],{"class":70,"line":1934},[68,38387,38215],{"class":335},[68,38389,31057],{"class":5421},[68,38391,381],{"class":331},[68,38393,32271],{"class":82},[68,38395,711],{"class":335},[68,38397,31066],{"class":5421},[68,38399,381],{"class":331},[68,38401,32271],{"class":82},[68,38403,711],{"class":335},[68,38405,31075],{"class":5421},[68,38407,381],{"class":331},[68,38409,406],{"class":82},[68,38411,711],{"class":335},[68,38413,31084],{"class":5421},[68,38415,381],{"class":331},[68,38417,551],{"class":82},[68,38419,38248],{"class":335},[68,38421,38422],{"class":70,"line":1939},[68,38423,38253],{"class":335},[68,38425,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448,38450],{"class":70,"line":1956},[68,38427,38298],{"class":335},[68,38429,31075],{"class":5421},[68,38431,381],{"class":331},[68,38433,412],{"class":82},[68,38435,711],{"class":335},[68,38437,31130],{"class":5421},[68,38439,381],{"class":331},[68,38441,412],{"class":82},[68,38443,711],{"class":335},[68,38445,31084],{"class":5421},[68,38447,381],{"class":331},[68,38449,525],{"class":82},[68,38451,342],{"class":335},[68,38453,38454],{"class":70,"line":1961},[68,38455,38327],{"class":335},[68,38457,38458],{"class":70,"line":1966},[68,38459,38460],{"class":393},"        # 第三层\n",[68,38462,38463,38465,38468,38470],{"class":70,"line":1971},[68,38464,31046],{"class":82},[68,38466,38467],{"class":335},".block3",[68,38469,381],{"class":331},[68,38471,38210],{"class":335},[68,38473,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506],{"class":70,"line":1985},[68,38475,38215],{"class":335},[68,38477,31057],{"class":5421},[68,38479,381],{"class":331},[68,38481,32271],{"class":82},[68,38483,711],{"class":335},[68,38485,31066],{"class":5421},[68,38487,381],{"class":331},[68,38489,35071],{"class":82},[68,38491,711],{"class":335},[68,38493,31075],{"class":5421},[68,38495,381],{"class":331},[68,38497,406],{"class":82},[68,38499,711],{"class":335},[68,38501,31084],{"class":5421},[68,38503,381],{"class":331},[68,38505,551],{"class":82},[68,38507,38248],{"class":335},[68,38509,38510],{"class":70,"line":1990},[68,38511,38253],{"class":335},[68,38513,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546],{"class":70,"line":2783},[68,38515,38215],{"class":335},[68,38517,31057],{"class":5421},[68,38519,381],{"class":331},[68,38521,35071],{"class":82},[68,38523,711],{"class":335},[68,38525,31066],{"class":5421},[68,38527,381],{"class":331},[68,38529,35071],{"class":82},[68,38531,711],{"class":335},[68,38533,31075],{"class":5421},[68,38535,381],{"class":331},[68,38537,406],{"class":82},[68,38539,711],{"class":335},[68,38541,31084],{"class":5421},[68,38543,381],{"class":331},[68,38545,551],{"class":82},[68,38547,38248],{"class":335},[68,38549,38550],{"class":70,"line":2797},[68,38551,38253],{"class":335},[68,38553,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582,38584,38586],{"class":70,"line":2805},[68,38555,38215],{"class":335},[68,38557,31057],{"class":5421},[68,38559,381],{"class":331},[68,38561,35071],{"class":82},[68,38563,711],{"class":335},[68,38565,31066],{"class":5421},[68,38567,381],{"class":331},[68,38569,35071],{"class":82},[68,38571,711],{"class":335},[68,38573,31075],{"class":5421},[68,38575,381],{"class":331},[68,38577,406],{"class":82},[68,38579,711],{"class":335},[68,38581,31084],{"class":5421},[68,38583,381],{"class":331},[68,38585,551],{"class":82},[68,38587,38248],{"class":335},[68,38589,38590],{"class":70,"line":2810},[68,38591,38253],{"class":335},[68,38593,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618],{"class":70,"line":2816},[68,38595,38298],{"class":335},[68,38597,31075],{"class":5421},[68,38599,381],{"class":331},[68,38601,412],{"class":82},[68,38603,711],{"class":335},[68,38605,31130],{"class":5421},[68,38607,381],{"class":331},[68,38609,412],{"class":82},[68,38611,711],{"class":335},[68,38613,31084],{"class":5421},[68,38615,381],{"class":331},[68,38617,525],{"class":82},[68,38619,342],{"class":335},[68,38621,38622],{"class":70,"line":2822},[68,38623,38327],{"class":335},[68,38625,38626],{"class":70,"line":2827},[68,38627,38628],{"class":393},"        # 第四层\n",[68,38630,38631,38633,38636,38638],{"class":70,"line":8153},[68,38632,31046],{"class":82},[68,38634,38635],{"class":335},".block4",[68,38637,381],{"class":331},[68,38639,38210],{"class":335},[68,38641,38642,38644,38646,38648,38650,38652,38654,38656,38659,38661,38663,38665,38667,38669,38671,38673,38675],{"class":70,"line":8177},[68,38643,38215],{"class":335},[68,38645,31057],{"class":5421},[68,38647,381],{"class":331},[68,38649,35071],{"class":82},[68,38651,711],{"class":335},[68,38653,31066],{"class":5421},[68,38655,381],{"class":331},[68,38657,38658],{"class":82},"512",[68,38660,711],{"class":335},[68,38662,31075],{"class":5421},[68,38664,381],{"class":331},[68,38666,406],{"class":82},[68,38668,711],{"class":335},[68,38670,31084],{"class":5421},[68,38672,381],{"class":331},[68,38674,551],{"class":82},[68,38676,38248],{"class":335},[68,38678,38679],{"class":70,"line":8182},[68,38680,38253],{"class":335},[68,38682,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715],{"class":70,"line":8188},[68,38684,38215],{"class":335},[68,38686,31057],{"class":5421},[68,38688,381],{"class":331},[68,38690,38658],{"class":82},[68,38692,711],{"class":335},[68,38694,31066],{"class":5421},[68,38696,381],{"class":331},[68,38698,38658],{"class":82},[68,38700,711],{"class":335},[68,38702,31075],{"class":5421},[68,38704,381],{"class":331},[68,38706,406],{"class":82},[68,38708,711],{"class":335},[68,38710,31084],{"class":5421},[68,38712,381],{"class":331},[68,38714,551],{"class":82},[68,38716,38248],{"class":335},[68,38718,38719],{"class":70,"line":8215},[68,38720,38253],{"class":335},[68,38722,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755],{"class":70,"line":8220},[68,38724,38215],{"class":335},[68,38726,31057],{"class":5421},[68,38728,381],{"class":331},[68,38730,38658],{"class":82},[68,38732,711],{"class":335},[68,38734,31066],{"class":5421},[68,38736,381],{"class":331},[68,38738,38658],{"class":82},[68,38740,711],{"class":335},[68,38742,31075],{"class":5421},[68,38744,381],{"class":331},[68,38746,406],{"class":82},[68,38748,711],{"class":335},[68,38750,31084],{"class":5421},[68,38752,381],{"class":331},[68,38754,551],{"class":82},[68,38756,38248],{"class":335},[68,38758,38759],{"class":70,"line":8226},[68,38760,38253],{"class":335},[68,38762,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787],{"class":70,"line":8238},[68,38764,38298],{"class":335},[68,38766,31075],{"class":5421},[68,38768,381],{"class":331},[68,38770,412],{"class":82},[68,38772,711],{"class":335},[68,38774,31130],{"class":5421},[68,38776,381],{"class":331},[68,38778,412],{"class":82},[68,38780,711],{"class":335},[68,38782,31084],{"class":5421},[68,38784,381],{"class":331},[68,38786,525],{"class":82},[68,38788,342],{"class":335},[68,38790,38791],{"class":70,"line":8250},[68,38792,38327],{"class":335},[68,38794,38795],{"class":70,"line":8262},[68,38796,38797],{"class":393},"        # 第五层\n",[68,38799,38800,38802,38805,38807],{"class":70,"line":9921},[68,38801,31046],{"class":82},[68,38803,38804],{"class":335},".block5",[68,38806,381],{"class":331},[68,38808,38210],{"class":335},[68,38810,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843],{"class":70,"line":9946},[68,38812,38215],{"class":335},[68,38814,31057],{"class":5421},[68,38816,381],{"class":331},[68,38818,38658],{"class":82},[68,38820,711],{"class":335},[68,38822,31066],{"class":5421},[68,38824,381],{"class":331},[68,38826,38658],{"class":82},[68,38828,711],{"class":335},[68,38830,31075],{"class":5421},[68,38832,381],{"class":331},[68,38834,406],{"class":82},[68,38836,711],{"class":335},[68,38838,31084],{"class":5421},[68,38840,381],{"class":331},[68,38842,551],{"class":82},[68,38844,38248],{"class":335},[68,38846,38847],{"class":70,"line":9969},[68,38848,38253],{"class":335},[68,38850,38851,38853,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881,38883],{"class":70,"line":9993},[68,38852,38215],{"class":335},[68,38854,31057],{"class":5421},[68,38856,381],{"class":331},[68,38858,38658],{"class":82},[68,38860,711],{"class":335},[68,38862,31066],{"class":5421},[68,38864,381],{"class":331},[68,38866,38658],{"class":82},[68,38868,711],{"class":335},[68,38870,31075],{"class":5421},[68,38872,381],{"class":331},[68,38874,406],{"class":82},[68,38876,711],{"class":335},[68,38878,31084],{"class":5421},[68,38880,381],{"class":331},[68,38882,551],{"class":82},[68,38884,38248],{"class":335},[68,38886,38887],{"class":70,"line":9998},[68,38888,38253],{"class":335},[68,38890,38891,38893,38895,38897,38899,38901,38903,38905,38907,38909,38911,38913,38915,38917,38919,38921,38923],{"class":70,"line":10003},[68,38892,38215],{"class":335},[68,38894,31057],{"class":5421},[68,38896,381],{"class":331},[68,38898,38658],{"class":82},[68,38900,711],{"class":335},[68,38902,31066],{"class":5421},[68,38904,381],{"class":331},[68,38906,38658],{"class":82},[68,38908,711],{"class":335},[68,38910,31075],{"class":5421},[68,38912,381],{"class":331},[68,38914,406],{"class":82},[68,38916,711],{"class":335},[68,38918,31084],{"class":5421},[68,38920,381],{"class":331},[68,38922,551],{"class":82},[68,38924,38248],{"class":335},[68,38926,38927],{"class":70,"line":10008},[68,38928,38253],{"class":335},[68,38930,38931,38933,38935,38937,38939,38941,38943,38945,38947,38949,38951,38953,38955],{"class":70,"line":10017},[68,38932,38298],{"class":335},[68,38934,31075],{"class":5421},[68,38936,381],{"class":331},[68,38938,412],{"class":82},[68,38940,711],{"class":335},[68,38942,31130],{"class":5421},[68,38944,381],{"class":331},[68,38946,412],{"class":82},[68,38948,711],{"class":335},[68,38950,31084],{"class":5421},[68,38952,381],{"class":331},[68,38954,525],{"class":82},[68,38956,342],{"class":335},[68,38958,38959],{"class":70,"line":10022},[68,38960,38327],{"class":335},[68,38962,38963],{"class":70,"line":10028},[68,38964,38965],{"class":393},"        # 全连接层\n",[68,38967,38968,38970,38973,38975],{"class":70,"line":10049},[68,38969,31046],{"class":82},[68,38971,38972],{"class":335},".block6",[68,38974,381],{"class":331},[68,38976,38210],{"class":335},[68,38978,38979],{"class":70,"line":10055},[68,38980,38981],{"class":393},"            # 平展操作\n",[68,38983,38984],{"class":70,"line":10069},[68,38985,38986],{"class":393},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[68,38988,38989],{"class":70,"line":10075},[68,38990,38991],{"class":335},"            nn.Flatten(),\n",[68,38993,38994,38997,38999,39001,39003,39005,39007,39009,39011],{"class":70,"line":10102},[68,38995,38996],{"class":335},"            nn.Linear(",[68,38998,702],{"class":82},[68,39000,788],{"class":331},[68,39002,702],{"class":82},[68,39004,788],{"class":331},[68,39006,38658],{"class":82},[68,39008,711],{"class":335},[68,39010,35071],{"class":82},[68,39012,38248],{"class":335},[68,39014,39015],{"class":70,"line":10111},[68,39016,38253],{"class":335},[68,39018,39019,39021,39023,39025,39027],{"class":70,"line":10117},[68,39020,38996],{"class":335},[68,39022,35071],{"class":82},[68,39024,711],{"class":335},[68,39026,32271],{"class":82},[68,39028,38248],{"class":335},[68,39030,39031],{"class":70,"line":10125},[68,39032,38253],{"class":335},[68,39034,39035,39037,39039,39041,39043],{"class":70,"line":10130},[68,39036,38996],{"class":335},[68,39038,32271],{"class":82},[68,39040,711],{"class":335},[68,39042,779],{"class":82},[68,39044,342],{"class":335},[68,39046,39047],{"class":70,"line":16809},[68,39048,38327],{"class":335},[68,39050,39051],{"class":70,"line":16815},[68,39052,2606],{"emptyLinePlaceholder":260},[68,39054,39055],{"class":70,"line":16838},[68,39056,39057],{"class":393},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[68,39059,39060],{"class":70,"line":16844},[68,39061,39062],{"class":393},"        # 循环遍历模型\n",[68,39064,39065,39067,39070,39072,39075],{"class":70,"line":16867},[68,39066,3609],{"class":331},[68,39068,39069],{"class":335}," m ",[68,39071,26247],{"class":331},[68,39073,39074],{"class":82}," self",[68,39076,39077],{"class":335},".modules():\n",[68,39079,39080],{"class":70,"line":16881},[68,39081,39082],{"class":393},"            # print(m)\n",[68,39084,39085,39087,39090],{"class":70,"line":16901},[68,39086,4848],{"class":331},[68,39088,39089],{"class":82}," isinstance",[68,39091,39092],{"class":335},"(m,nn.Conv2d):\n",[68,39094,39095],{"class":70,"line":16907},[68,39096,39097],{"class":393},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[68,39099,39100,39103,39106,39108,39111],{"class":70,"line":16918},[68,39101,39102],{"class":335},"                nn.init.kaiming_normal_(m.weight,",[68,39104,39105],{"class":5421},"nonlinearity",[68,39107,381],{"class":331},[68,39109,39110],{"class":78},"'relu'",[68,39112,342],{"class":335},[68,39114,39115],{"class":70,"line":16941},[68,39116,39117],{"class":393},"                # 判断b参数是否存在\n",[68,39119,39120,39123,39126,39129,39132,39135],{"class":70,"line":16963},[68,39121,39122],{"class":331},"                if",[68,39124,39125],{"class":335}," m.bias ",[68,39127,39128],{"class":331},"is",[68,39130,39131],{"class":331}," not",[68,39133,39134],{"class":82}," None",[68,39136,3945],{"class":335},[68,39138,39139],{"class":70,"line":16968},[68,39140,39141],{"class":393},"                    # 如果参数不存在的化初始化b=0\n",[68,39143,39144,39147,39149],{"class":70,"line":16974},[68,39145,39146],{"class":335},"                    nn.init.constant_(m.bias,",[68,39148,525],{"class":82},[68,39150,342],{"class":335},[68,39152,39153],{"class":70,"line":16988},[68,39154,39155],{"class":393},"            # 全连接层初始化\n",[68,39157,39158,39161,39163],{"class":70,"line":17001},[68,39159,39160],{"class":331},"            elif",[68,39162,39089],{"class":82},[68,39164,39165],{"class":335},"(m,nn.Linear):\n",[68,39167,39168],{"class":70,"line":17006},[68,39169,39170],{"class":393},"                # 这个初始化方法是利用的是正太分布的方式\n",[68,39172,39173],{"class":70,"line":17020},[68,39174,39175],{"class":393},"                # 均值为0，方差为0.01\n",[68,39177,39178,39181,39183,39185,39188],{"class":70,"line":17025},[68,39179,39180],{"class":335},"                nn.init.normal_(m.weight,",[68,39182,525],{"class":82},[68,39184,711],{"class":335},[68,39186,39187],{"class":82},"0.01",[68,39189,342],{"class":335},[68,39191,39192],{"class":70,"line":17031},[68,39193,39194],{"class":393},"                # 初始化b参数\n",[68,39196,39197,39199,39201,39203,39205,39207],{"class":70,"line":17036},[68,39198,39122],{"class":331},[68,39200,39125],{"class":335},[68,39202,39128],{"class":331},[68,39204,39131],{"class":331},[68,39206,39134],{"class":82},[68,39208,3945],{"class":335},[68,39210,39211,39213,39215],{"class":70,"line":17050},[68,39212,39146],{"class":335},[68,39214,525],{"class":82},[68,39216,342],{"class":335},[68,39218,39219],{"class":70,"line":17055},[68,39220,2606],{"emptyLinePlaceholder":260},[68,39222,39223],{"class":70,"line":17060},[68,39224,35366],{"class":393},[68,39226,39227,39229,39231],{"class":70,"line":17074},[68,39228,31002],{"class":331},[68,39230,31294],{"class":74},[68,39232,31297],{"class":335},[68,39234,39235,39237,39239,39241],{"class":70,"line":17086},[68,39236,31302],{"class":335},[68,39238,381],{"class":331},[68,39240,31024],{"class":82},[68,39242,39243],{"class":335},".block1(x)\n",[68,39245,39246,39248,39250,39252],{"class":70,"line":17091},[68,39247,31302],{"class":335},[68,39249,381],{"class":331},[68,39251,31024],{"class":82},[68,39253,39254],{"class":335},".block2(x)\n",[68,39256,39257,39259,39261,39263],{"class":70,"line":17104},[68,39258,31302],{"class":335},[68,39260,381],{"class":331},[68,39262,31024],{"class":82},[68,39264,39265],{"class":335},".block3(x)\n",[68,39267,39268,39270,39272,39274],{"class":70,"line":17109},[68,39269,31302],{"class":335},[68,39271,381],{"class":331},[68,39273,31024],{"class":82},[68,39275,39276],{"class":335},".block4(x)\n",[68,39278,39279,39281,39283,39285],{"class":70,"line":17114},[68,39280,31302],{"class":335},[68,39282,381],{"class":331},[68,39284,31024],{"class":82},[68,39286,39287],{"class":335},".block5(x)\n",[68,39289,39290,39292,39294,39296],{"class":70,"line":17119},[68,39291,31302],{"class":335},[68,39293,381],{"class":331},[68,39295,31024],{"class":82},[68,39297,39298],{"class":335},".block6(x)\n",[68,39300,39301,39303],{"class":70,"line":17132},[68,39302,14957],{"class":331},[68,39304,31410],{"class":335},[68,39306,39307],{"class":70,"line":17137},[68,39308,2606],{"emptyLinePlaceholder":260},[68,39310,39311],{"class":70,"line":32834},[68,39312,39313],{"class":393},"# 验证模型\n",[68,39315,39316,39318,39320,39322,39325],{"class":70,"line":32840},[68,39317,1738],{"class":331},[68,39319,31421],{"class":82},[68,39321,3155],{"class":331},[68,39323,39324],{"class":78},"'__main__'",[68,39326,3945],{"class":335},[68,39328,39329,39331,39333,39335,39337,39339,39341,39343,39345],{"class":70,"line":32846},[68,39330,31438],{"class":335},[68,39332,381],{"class":331},[68,39334,30652],{"class":335},[68,39336,31445],{"class":78},[68,39338,1911],{"class":331},[68,39340,31450],{"class":335},[68,39342,1908],{"class":331},[68,39344,30677],{"class":78},[68,39346,342],{"class":335},[68,39348,39349,39351],{"class":70,"line":32852},[68,39350,31500],{"class":82},[68,39352,30686],{"class":335},[68,39354,39355,39357,39359],{"class":70,"line":32858},[68,39356,31490],{"class":335},[68,39358,381],{"class":331},[68,39360,39361],{"class":335},"VGG16().to(device)\n",[68,39363,39364,39366,39368,39370,39372,39374,39376,39378],{"class":70,"line":32869},[68,39365,31500],{"class":82},[68,39367,31503],{"class":335},[68,39369,551],{"class":82},[68,39371,711],{"class":335},[68,39373,31702],{"class":82},[68,39375,711],{"class":335},[68,39377,31702],{"class":82},[68,39379,31516],{"class":335},[23,39381,39382],{"start":92},[26,39383,39384],{},"训练代码",[19,39386,39387],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39389,39390],{},"解决方式:",[19,39392,39393],{},"①权重初始化",[58,39395,39397],{"className":30579,"code":39396,"language":30581,"meta":63,"style":63},"# 权重初始化,保证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",[65,39398,39399,39404,39409,39421,39426,39434,39439,39452,39457,39471,39476,39485,39490,39499,39504,39509,39522,39527,39541],{"__ignoreMap":63},[68,39400,39401],{"class":70,"line":71},[68,39402,39403],{"class":393},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[68,39405,39406],{"class":70,"line":92},[68,39407,39408],{"class":393},"# 循环遍历模型\n",[68,39410,39411,39413,39415,39417,39419],{"class":70,"line":1387},[68,39412,3231],{"class":331},[68,39414,39069],{"class":335},[68,39416,26247],{"class":331},[68,39418,39074],{"class":82},[68,39420,39077],{"class":335},[68,39422,39423],{"class":70,"line":1402},[68,39424,39425],{"class":393},"    # print(m)\n",[68,39427,39428,39430,39432],{"class":70,"line":1408},[68,39429,3307],{"class":331},[68,39431,39089],{"class":82},[68,39433,39092],{"class":335},[68,39435,39436],{"class":70,"line":1422},[68,39437,39438],{"class":393},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[68,39440,39441,39444,39446,39448,39450],{"class":70,"line":1428},[68,39442,39443],{"class":335},"        nn.init.kaiming_normal_(m.weight,",[68,39445,39105],{"class":5421},[68,39447,381],{"class":331},[68,39449,39110],{"class":78},[68,39451,342],{"class":335},[68,39453,39454],{"class":70,"line":1519},[68,39455,39456],{"class":393},"        # 判断b参数是否存在\n",[68,39458,39459,39461,39463,39465,39467,39469],{"class":70,"line":1525},[68,39460,2703],{"class":331},[68,39462,39125],{"class":335},[68,39464,39128],{"class":331},[68,39466,39131],{"class":331},[68,39468,39134],{"class":82},[68,39470,3945],{"class":335},[68,39472,39473],{"class":70,"line":1537},[68,39474,39475],{"class":393},"            # 如果参数不存在的化初始化b=0\n",[68,39477,39478,39481,39483],{"class":70,"line":1819},[68,39479,39480],{"class":335},"            nn.init.constant_(m.bias,",[68,39482,525],{"class":82},[68,39484,342],{"class":335},[68,39486,39487],{"class":70,"line":1824},[68,39488,39489],{"class":393},"    # 全连接层初始化\n",[68,39491,39492,39495,39497],{"class":70,"line":1830},[68,39493,39494],{"class":331},"    elif",[68,39496,39089],{"class":82},[68,39498,39165],{"class":335},[68,39500,39501],{"class":70,"line":1835},[68,39502,39503],{"class":393},"        # 这个初始化方法是利用的是正太分布的方式\n",[68,39505,39506],{"class":70,"line":1849},[68,39507,39508],{"class":393},"        # 均值为0，方差为0.01\n",[68,39510,39511,39514,39516,39518,39520],{"class":70,"line":1854},[68,39512,39513],{"class":335},"        nn.init.normal_(m.weight,",[68,39515,525],{"class":82},[68,39517,711],{"class":335},[68,39519,39187],{"class":82},[68,39521,342],{"class":335},[68,39523,39524],{"class":70,"line":1860},[68,39525,39526],{"class":393},"        # 初始化b参数\n",[68,39528,39529,39531,39533,39535,39537,39539],{"class":70,"line":1881},[68,39530,2703],{"class":331},[68,39532,39125],{"class":335},[68,39534,39128],{"class":331},[68,39536,39131],{"class":331},[68,39538,39134],{"class":82},[68,39540,3945],{"class":335},[68,39542,39543,39545,39547],{"class":70,"line":1886},[68,39544,39480],{"class":335},[68,39546,525],{"class":82},[68,39548,342],{"class":335},[19,39550,39551],{},"②尽可能地增加批次",[19,39553,39554],{},"训练完整代码：",[58,39556,39557],{"className":30579,"code":38100,"language":30581,"meta":63,"style":63},[65,39558,39559,39565,39575,39585,39595,39599,39615,39623,39641,39645,39649,39659,39695,39699,39735,39739,39767,39771,39775,39785,39821,39825,39861,39865,39893,39897,39901,39911,39947,39951,39987,39991,40027,40031,40059,40063,40067,40077,40113,40117,40153,40157,40193,40197,40225,40229,40233,40243,40279,40283,40319,40323,40359,40363,40391,40395,40399,40409,40413,40417,40421,40441,40445,40457,40461,40473,40477,40481,40485,40489,40501,40505,40513,40517,40529,40533,40547,40551,40559,40563,40571,40575,40579,40591,40595,40609,40617,40621,40625,40633,40643,40653,40663,40673,40683,40693,40699,40703,40707,40719,40739,40745,40753],{"__ignoreMap":63},[68,39560,39561,39563],{"class":70,"line":71},[68,39562,30593],{"class":331},[68,39564,30596],{"class":335},[68,39566,39567,39569,39571,39573],{"class":70,"line":92},[68,39568,30938],{"class":331},[68,39570,38115],{"class":335},[68,39572,30593],{"class":331},[68,39574,38120],{"class":335},[68,39576,39577,39579,39581,39583],{"class":70,"line":1387},[68,39578,30938],{"class":331},[68,39580,30941],{"class":335},[68,39582,30593],{"class":331},[68,39584,30946],{"class":335},[68,39586,39587,39589,39591,39593],{"class":70,"line":1402},[68,39588,30938],{"class":331},[68,39590,30958],{"class":335},[68,39592,30593],{"class":331},[68,39594,30963],{"class":335},[68,39596,39597],{"class":70,"line":1408},[68,39598,2606],{"emptyLinePlaceholder":260},[68,39600,39601,39603,39605,39607,39609,39611,39613],{"class":70,"line":1422},[68,39602,14899],{"class":331},[68,39604,38151],{"class":74},[68,39606,336],{"class":335},[68,39608,30979],{"class":74},[68,39610,891],{"class":335},[68,39612,30984],{"class":74},[68,39614,30987],{"class":335},[68,39616,39617,39619,39621],{"class":70,"line":1428},[68,39618,31002],{"class":331},[68,39620,31005],{"class":82},[68,39622,31008],{"class":335},[68,39624,39625,39627,39629,39631,39633,39635,39637,39639],{"class":70,"line":1519},[68,39626,31018],{"class":82},[68,39628,336],{"class":335},[68,39630,38178],{"class":82},[68,39632,12640],{"class":335},[68,39634,31024],{"class":82},[68,39636,31027],{"class":335},[68,39638,31030],{"class":82},[68,39640,2182],{"class":335},[68,39642,39643],{"class":70,"line":1525},[68,39644,38193],{"class":393},[68,39646,39647],{"class":70,"line":1537},[68,39648,38198],{"class":393},[68,39650,39651,39653,39655,39657],{"class":70,"line":1819},[68,39652,31046],{"class":82},[68,39654,38205],{"class":335},[68,39656,381],{"class":331},[68,39658,38210],{"class":335},[68,39660,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693],{"class":70,"line":1824},[68,39662,38215],{"class":335},[68,39664,31057],{"class":5421},[68,39666,381],{"class":331},[68,39668,551],{"class":82},[68,39670,711],{"class":335},[68,39672,31066],{"class":5421},[68,39674,381],{"class":331},[68,39676,537],{"class":82},[68,39678,711],{"class":335},[68,39680,31075],{"class":5421},[68,39682,381],{"class":331},[68,39684,406],{"class":82},[68,39686,711],{"class":335},[68,39688,31084],{"class":5421},[68,39690,381],{"class":331},[68,39692,551],{"class":82},[68,39694,38248],{"class":335},[68,39696,39697],{"class":70,"line":1830},[68,39698,38253],{"class":335},[68,39700,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733],{"class":70,"line":1835},[68,39702,38215],{"class":335},[68,39704,31057],{"class":5421},[68,39706,381],{"class":331},[68,39708,537],{"class":82},[68,39710,711],{"class":335},[68,39712,31066],{"class":5421},[68,39714,381],{"class":331},[68,39716,537],{"class":82},[68,39718,711],{"class":335},[68,39720,31075],{"class":5421},[68,39722,381],{"class":331},[68,39724,406],{"class":82},[68,39726,711],{"class":335},[68,39728,31084],{"class":5421},[68,39730,381],{"class":331},[68,39732,551],{"class":82},[68,39734,38248],{"class":335},[68,39736,39737],{"class":70,"line":1849},[68,39738,38253],{"class":335},[68,39740,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765],{"class":70,"line":1854},[68,39742,38298],{"class":335},[68,39744,31075],{"class":5421},[68,39746,381],{"class":331},[68,39748,412],{"class":82},[68,39750,711],{"class":335},[68,39752,31130],{"class":5421},[68,39754,381],{"class":331},[68,39756,412],{"class":82},[68,39758,711],{"class":335},[68,39760,31084],{"class":5421},[68,39762,381],{"class":331},[68,39764,525],{"class":82},[68,39766,342],{"class":335},[68,39768,39769],{"class":70,"line":1860},[68,39770,38327],{"class":335},[68,39772,39773],{"class":70,"line":1881},[68,39774,38332],{"class":393},[68,39776,39777,39779,39781,39783],{"class":70,"line":1886},[68,39778,31046],{"class":82},[68,39780,38339],{"class":335},[68,39782,381],{"class":331},[68,39784,38210],{"class":335},[68,39786,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819],{"class":70,"line":1900},[68,39788,38215],{"class":335},[68,39790,31057],{"class":5421},[68,39792,381],{"class":331},[68,39794,537],{"class":82},[68,39796,711],{"class":335},[68,39798,31066],{"class":5421},[68,39800,381],{"class":331},[68,39802,32271],{"class":82},[68,39804,711],{"class":335},[68,39806,31075],{"class":5421},[68,39808,381],{"class":331},[68,39810,406],{"class":82},[68,39812,711],{"class":335},[68,39814,31084],{"class":5421},[68,39816,381],{"class":331},[68,39818,551],{"class":82},[68,39820,38248],{"class":335},[68,39822,39823],{"class":70,"line":1905},[68,39824,38253],{"class":335},[68,39826,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859],{"class":70,"line":1934},[68,39828,38215],{"class":335},[68,39830,31057],{"class":5421},[68,39832,381],{"class":331},[68,39834,32271],{"class":82},[68,39836,711],{"class":335},[68,39838,31066],{"class":5421},[68,39840,381],{"class":331},[68,39842,32271],{"class":82},[68,39844,711],{"class":335},[68,39846,31075],{"class":5421},[68,39848,381],{"class":331},[68,39850,406],{"class":82},[68,39852,711],{"class":335},[68,39854,31084],{"class":5421},[68,39856,381],{"class":331},[68,39858,551],{"class":82},[68,39860,38248],{"class":335},[68,39862,39863],{"class":70,"line":1939},[68,39864,38253],{"class":335},[68,39866,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891],{"class":70,"line":1956},[68,39868,38298],{"class":335},[68,39870,31075],{"class":5421},[68,39872,381],{"class":331},[68,39874,412],{"class":82},[68,39876,711],{"class":335},[68,39878,31130],{"class":5421},[68,39880,381],{"class":331},[68,39882,412],{"class":82},[68,39884,711],{"class":335},[68,39886,31084],{"class":5421},[68,39888,381],{"class":331},[68,39890,525],{"class":82},[68,39892,342],{"class":335},[68,39894,39895],{"class":70,"line":1961},[68,39896,38327],{"class":335},[68,39898,39899],{"class":70,"line":1966},[68,39900,38460],{"class":393},[68,39902,39903,39905,39907,39909],{"class":70,"line":1971},[68,39904,31046],{"class":82},[68,39906,38467],{"class":335},[68,39908,381],{"class":331},[68,39910,38210],{"class":335},[68,39912,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945],{"class":70,"line":1985},[68,39914,38215],{"class":335},[68,39916,31057],{"class":5421},[68,39918,381],{"class":331},[68,39920,32271],{"class":82},[68,39922,711],{"class":335},[68,39924,31066],{"class":5421},[68,39926,381],{"class":331},[68,39928,35071],{"class":82},[68,39930,711],{"class":335},[68,39932,31075],{"class":5421},[68,39934,381],{"class":331},[68,39936,406],{"class":82},[68,39938,711],{"class":335},[68,39940,31084],{"class":5421},[68,39942,381],{"class":331},[68,39944,551],{"class":82},[68,39946,38248],{"class":335},[68,39948,39949],{"class":70,"line":1990},[68,39950,38253],{"class":335},[68,39952,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985],{"class":70,"line":2783},[68,39954,38215],{"class":335},[68,39956,31057],{"class":5421},[68,39958,381],{"class":331},[68,39960,35071],{"class":82},[68,39962,711],{"class":335},[68,39964,31066],{"class":5421},[68,39966,381],{"class":331},[68,39968,35071],{"class":82},[68,39970,711],{"class":335},[68,39972,31075],{"class":5421},[68,39974,381],{"class":331},[68,39976,406],{"class":82},[68,39978,711],{"class":335},[68,39980,31084],{"class":5421},[68,39982,381],{"class":331},[68,39984,551],{"class":82},[68,39986,38248],{"class":335},[68,39988,39989],{"class":70,"line":2797},[68,39990,38253],{"class":335},[68,39992,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025],{"class":70,"line":2805},[68,39994,38215],{"class":335},[68,39996,31057],{"class":5421},[68,39998,381],{"class":331},[68,40000,35071],{"class":82},[68,40002,711],{"class":335},[68,40004,31066],{"class":5421},[68,40006,381],{"class":331},[68,40008,35071],{"class":82},[68,40010,711],{"class":335},[68,40012,31075],{"class":5421},[68,40014,381],{"class":331},[68,40016,406],{"class":82},[68,40018,711],{"class":335},[68,40020,31084],{"class":5421},[68,40022,381],{"class":331},[68,40024,551],{"class":82},[68,40026,38248],{"class":335},[68,40028,40029],{"class":70,"line":2810},[68,40030,38253],{"class":335},[68,40032,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057],{"class":70,"line":2816},[68,40034,38298],{"class":335},[68,40036,31075],{"class":5421},[68,40038,381],{"class":331},[68,40040,412],{"class":82},[68,40042,711],{"class":335},[68,40044,31130],{"class":5421},[68,40046,381],{"class":331},[68,40048,412],{"class":82},[68,40050,711],{"class":335},[68,40052,31084],{"class":5421},[68,40054,381],{"class":331},[68,40056,525],{"class":82},[68,40058,342],{"class":335},[68,40060,40061],{"class":70,"line":2822},[68,40062,38327],{"class":335},[68,40064,40065],{"class":70,"line":2827},[68,40066,38628],{"class":393},[68,40068,40069,40071,40073,40075],{"class":70,"line":8153},[68,40070,31046],{"class":82},[68,40072,38635],{"class":335},[68,40074,381],{"class":331},[68,40076,38210],{"class":335},[68,40078,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111],{"class":70,"line":8177},[68,40080,38215],{"class":335},[68,40082,31057],{"class":5421},[68,40084,381],{"class":331},[68,40086,35071],{"class":82},[68,40088,711],{"class":335},[68,40090,31066],{"class":5421},[68,40092,381],{"class":331},[68,40094,38658],{"class":82},[68,40096,711],{"class":335},[68,40098,31075],{"class":5421},[68,40100,381],{"class":331},[68,40102,406],{"class":82},[68,40104,711],{"class":335},[68,40106,31084],{"class":5421},[68,40108,381],{"class":331},[68,40110,551],{"class":82},[68,40112,38248],{"class":335},[68,40114,40115],{"class":70,"line":8182},[68,40116,38253],{"class":335},[68,40118,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151],{"class":70,"line":8188},[68,40120,38215],{"class":335},[68,40122,31057],{"class":5421},[68,40124,381],{"class":331},[68,40126,38658],{"class":82},[68,40128,711],{"class":335},[68,40130,31066],{"class":5421},[68,40132,381],{"class":331},[68,40134,38658],{"class":82},[68,40136,711],{"class":335},[68,40138,31075],{"class":5421},[68,40140,381],{"class":331},[68,40142,406],{"class":82},[68,40144,711],{"class":335},[68,40146,31084],{"class":5421},[68,40148,381],{"class":331},[68,40150,551],{"class":82},[68,40152,38248],{"class":335},[68,40154,40155],{"class":70,"line":8215},[68,40156,38253],{"class":335},[68,40158,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191],{"class":70,"line":8220},[68,40160,38215],{"class":335},[68,40162,31057],{"class":5421},[68,40164,381],{"class":331},[68,40166,38658],{"class":82},[68,40168,711],{"class":335},[68,40170,31066],{"class":5421},[68,40172,381],{"class":331},[68,40174,38658],{"class":82},[68,40176,711],{"class":335},[68,40178,31075],{"class":5421},[68,40180,381],{"class":331},[68,40182,406],{"class":82},[68,40184,711],{"class":335},[68,40186,31084],{"class":5421},[68,40188,381],{"class":331},[68,40190,551],{"class":82},[68,40192,38248],{"class":335},[68,40194,40195],{"class":70,"line":8226},[68,40196,38253],{"class":335},[68,40198,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223],{"class":70,"line":8238},[68,40200,38298],{"class":335},[68,40202,31075],{"class":5421},[68,40204,381],{"class":331},[68,40206,412],{"class":82},[68,40208,711],{"class":335},[68,40210,31130],{"class":5421},[68,40212,381],{"class":331},[68,40214,412],{"class":82},[68,40216,711],{"class":335},[68,40218,31084],{"class":5421},[68,40220,381],{"class":331},[68,40222,525],{"class":82},[68,40224,342],{"class":335},[68,40226,40227],{"class":70,"line":8250},[68,40228,38327],{"class":335},[68,40230,40231],{"class":70,"line":8262},[68,40232,38797],{"class":393},[68,40234,40235,40237,40239,40241],{"class":70,"line":9921},[68,40236,31046],{"class":82},[68,40238,38804],{"class":335},[68,40240,381],{"class":331},[68,40242,38210],{"class":335},[68,40244,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277],{"class":70,"line":9946},[68,40246,38215],{"class":335},[68,40248,31057],{"class":5421},[68,40250,381],{"class":331},[68,40252,38658],{"class":82},[68,40254,711],{"class":335},[68,40256,31066],{"class":5421},[68,40258,381],{"class":331},[68,40260,38658],{"class":82},[68,40262,711],{"class":335},[68,40264,31075],{"class":5421},[68,40266,381],{"class":331},[68,40268,406],{"class":82},[68,40270,711],{"class":335},[68,40272,31084],{"class":5421},[68,40274,381],{"class":331},[68,40276,551],{"class":82},[68,40278,38248],{"class":335},[68,40280,40281],{"class":70,"line":9969},[68,40282,38253],{"class":335},[68,40284,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317],{"class":70,"line":9993},[68,40286,38215],{"class":335},[68,40288,31057],{"class":5421},[68,40290,381],{"class":331},[68,40292,38658],{"class":82},[68,40294,711],{"class":335},[68,40296,31066],{"class":5421},[68,40298,381],{"class":331},[68,40300,38658],{"class":82},[68,40302,711],{"class":335},[68,40304,31075],{"class":5421},[68,40306,381],{"class":331},[68,40308,406],{"class":82},[68,40310,711],{"class":335},[68,40312,31084],{"class":5421},[68,40314,381],{"class":331},[68,40316,551],{"class":82},[68,40318,38248],{"class":335},[68,40320,40321],{"class":70,"line":9998},[68,40322,38253],{"class":335},[68,40324,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357],{"class":70,"line":10003},[68,40326,38215],{"class":335},[68,40328,31057],{"class":5421},[68,40330,381],{"class":331},[68,40332,38658],{"class":82},[68,40334,711],{"class":335},[68,40336,31066],{"class":5421},[68,40338,381],{"class":331},[68,40340,38658],{"class":82},[68,40342,711],{"class":335},[68,40344,31075],{"class":5421},[68,40346,381],{"class":331},[68,40348,406],{"class":82},[68,40350,711],{"class":335},[68,40352,31084],{"class":5421},[68,40354,381],{"class":331},[68,40356,551],{"class":82},[68,40358,38248],{"class":335},[68,40360,40361],{"class":70,"line":10008},[68,40362,38253],{"class":335},[68,40364,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387,40389],{"class":70,"line":10017},[68,40366,38298],{"class":335},[68,40368,31075],{"class":5421},[68,40370,381],{"class":331},[68,40372,412],{"class":82},[68,40374,711],{"class":335},[68,40376,31130],{"class":5421},[68,40378,381],{"class":331},[68,40380,412],{"class":82},[68,40382,711],{"class":335},[68,40384,31084],{"class":5421},[68,40386,381],{"class":331},[68,40388,525],{"class":82},[68,40390,342],{"class":335},[68,40392,40393],{"class":70,"line":10022},[68,40394,38327],{"class":335},[68,40396,40397],{"class":70,"line":10028},[68,40398,38965],{"class":393},[68,40400,40401,40403,40405,40407],{"class":70,"line":10049},[68,40402,31046],{"class":82},[68,40404,38972],{"class":335},[68,40406,381],{"class":331},[68,40408,38210],{"class":335},[68,40410,40411],{"class":70,"line":10055},[68,40412,38981],{"class":393},[68,40414,40415],{"class":70,"line":10069},[68,40416,38986],{"class":393},[68,40418,40419],{"class":70,"line":10075},[68,40420,38991],{"class":335},[68,40422,40423,40425,40427,40429,40431,40433,40435,40437,40439],{"class":70,"line":10102},[68,40424,38996],{"class":335},[68,40426,702],{"class":82},[68,40428,788],{"class":331},[68,40430,702],{"class":82},[68,40432,788],{"class":331},[68,40434,38658],{"class":82},[68,40436,711],{"class":335},[68,40438,35071],{"class":82},[68,40440,38248],{"class":335},[68,40442,40443],{"class":70,"line":10111},[68,40444,38253],{"class":335},[68,40446,40447,40449,40451,40453,40455],{"class":70,"line":10117},[68,40448,38996],{"class":335},[68,40450,35071],{"class":82},[68,40452,711],{"class":335},[68,40454,32271],{"class":82},[68,40456,38248],{"class":335},[68,40458,40459],{"class":70,"line":10125},[68,40460,38253],{"class":335},[68,40462,40463,40465,40467,40469,40471],{"class":70,"line":10130},[68,40464,38996],{"class":335},[68,40466,32271],{"class":82},[68,40468,711],{"class":335},[68,40470,779],{"class":82},[68,40472,342],{"class":335},[68,40474,40475],{"class":70,"line":16809},[68,40476,38327],{"class":335},[68,40478,40479],{"class":70,"line":16815},[68,40480,2606],{"emptyLinePlaceholder":260},[68,40482,40483],{"class":70,"line":16838},[68,40484,39057],{"class":393},[68,40486,40487],{"class":70,"line":16844},[68,40488,39062],{"class":393},[68,40490,40491,40493,40495,40497,40499],{"class":70,"line":16867},[68,40492,3609],{"class":331},[68,40494,39069],{"class":335},[68,40496,26247],{"class":331},[68,40498,39074],{"class":82},[68,40500,39077],{"class":335},[68,40502,40503],{"class":70,"line":16881},[68,40504,39082],{"class":393},[68,40506,40507,40509,40511],{"class":70,"line":16901},[68,40508,4848],{"class":331},[68,40510,39089],{"class":82},[68,40512,39092],{"class":335},[68,40514,40515],{"class":70,"line":16907},[68,40516,39097],{"class":393},[68,40518,40519,40521,40523,40525,40527],{"class":70,"line":16918},[68,40520,39102],{"class":335},[68,40522,39105],{"class":5421},[68,40524,381],{"class":331},[68,40526,39110],{"class":78},[68,40528,342],{"class":335},[68,40530,40531],{"class":70,"line":16941},[68,40532,39117],{"class":393},[68,40534,40535,40537,40539,40541,40543,40545],{"class":70,"line":16963},[68,40536,39122],{"class":331},[68,40538,39125],{"class":335},[68,40540,39128],{"class":331},[68,40542,39131],{"class":331},[68,40544,39134],{"class":82},[68,40546,3945],{"class":335},[68,40548,40549],{"class":70,"line":16968},[68,40550,39141],{"class":393},[68,40552,40553,40555,40557],{"class":70,"line":16974},[68,40554,39146],{"class":335},[68,40556,525],{"class":82},[68,40558,342],{"class":335},[68,40560,40561],{"class":70,"line":16988},[68,40562,39155],{"class":393},[68,40564,40565,40567,40569],{"class":70,"line":17001},[68,40566,39160],{"class":331},[68,40568,39089],{"class":82},[68,40570,39165],{"class":335},[68,40572,40573],{"class":70,"line":17006},[68,40574,39170],{"class":393},[68,40576,40577],{"class":70,"line":17020},[68,40578,39175],{"class":393},[68,40580,40581,40583,40585,40587,40589],{"class":70,"line":17025},[68,40582,39180],{"class":335},[68,40584,525],{"class":82},[68,40586,711],{"class":335},[68,40588,39187],{"class":82},[68,40590,342],{"class":335},[68,40592,40593],{"class":70,"line":17031},[68,40594,39194],{"class":393},[68,40596,40597,40599,40601,40603,40605,40607],{"class":70,"line":17036},[68,40598,39122],{"class":331},[68,40600,39125],{"class":335},[68,40602,39128],{"class":331},[68,40604,39131],{"class":331},[68,40606,39134],{"class":82},[68,40608,3945],{"class":335},[68,40610,40611,40613,40615],{"class":70,"line":17050},[68,40612,39146],{"class":335},[68,40614,525],{"class":82},[68,40616,342],{"class":335},[68,40618,40619],{"class":70,"line":17055},[68,40620,2606],{"emptyLinePlaceholder":260},[68,40622,40623],{"class":70,"line":17060},[68,40624,35366],{"class":393},[68,40626,40627,40629,40631],{"class":70,"line":17074},[68,40628,31002],{"class":331},[68,40630,31294],{"class":74},[68,40632,31297],{"class":335},[68,40634,40635,40637,40639,40641],{"class":70,"line":17086},[68,40636,31302],{"class":335},[68,40638,381],{"class":331},[68,40640,31024],{"class":82},[68,40642,39243],{"class":335},[68,40644,40645,40647,40649,40651],{"class":70,"line":17091},[68,40646,31302],{"class":335},[68,40648,381],{"class":331},[68,40650,31024],{"class":82},[68,40652,39254],{"class":335},[68,40654,40655,40657,40659,40661],{"class":70,"line":17104},[68,40656,31302],{"class":335},[68,40658,381],{"class":331},[68,40660,31024],{"class":82},[68,40662,39265],{"class":335},[68,40664,40665,40667,40669,40671],{"class":70,"line":17109},[68,40666,31302],{"class":335},[68,40668,381],{"class":331},[68,40670,31024],{"class":82},[68,40672,39276],{"class":335},[68,40674,40675,40677,40679,40681],{"class":70,"line":17114},[68,40676,31302],{"class":335},[68,40678,381],{"class":331},[68,40680,31024],{"class":82},[68,40682,39287],{"class":335},[68,40684,40685,40687,40689,40691],{"class":70,"line":17119},[68,40686,31302],{"class":335},[68,40688,381],{"class":331},[68,40690,31024],{"class":82},[68,40692,39298],{"class":335},[68,40694,40695,40697],{"class":70,"line":17132},[68,40696,14957],{"class":331},[68,40698,31410],{"class":335},[68,40700,40701],{"class":70,"line":17137},[68,40702,2606],{"emptyLinePlaceholder":260},[68,40704,40705],{"class":70,"line":32834},[68,40706,39313],{"class":393},[68,40708,40709,40711,40713,40715,40717],{"class":70,"line":32840},[68,40710,1738],{"class":331},[68,40712,31421],{"class":82},[68,40714,3155],{"class":331},[68,40716,39324],{"class":78},[68,40718,3945],{"class":335},[68,40720,40721,40723,40725,40727,40729,40731,40733,40735,40737],{"class":70,"line":32846},[68,40722,31438],{"class":335},[68,40724,381],{"class":331},[68,40726,30652],{"class":335},[68,40728,31445],{"class":78},[68,40730,1911],{"class":331},[68,40732,31450],{"class":335},[68,40734,1908],{"class":331},[68,40736,30677],{"class":78},[68,40738,342],{"class":335},[68,40740,40741,40743],{"class":70,"line":32852},[68,40742,31500],{"class":82},[68,40744,30686],{"class":335},[68,40746,40747,40749,40751],{"class":70,"line":32858},[68,40748,31490],{"class":335},[68,40750,381],{"class":331},[68,40752,39361],{"class":335},[68,40754,40755,40757,40759,40761,40763,40765,40767,40769],{"class":70,"line":32869},[68,40756,31500],{"class":82},[68,40758,31503],{"class":335},[68,40760,551],{"class":82},[68,40762,711],{"class":335},[68,40764,31702],{"class":82},[68,40766,711],{"class":335},[68,40768,31702],{"class":82},[68,40770,31516],{"class":335},[23,40772,40773],{"start":1387},[26,40774,40775],{},"测试代码",[58,40777,40779],{"className":30579,"code":40778,"language":30581,"meta":63,"style":63},"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",[65,40780,40781,40787,40797,40807,40811,40821,40832,40836,40840,40844,40852,40868,40878,40894,40904,40918,40922,40932,40942,40952,40958,40962,40966,40974,40978,40994,41002,41006,41010,41018,41026,41030,41034,41038,41042,41048,41052,41062,41070,41078,41082,41086,41090,41098,41102,41118,41122,41126,41130,41142,41146,41158,41162,41166,41178,41182,41192,41196,41200,41212,41216,41225,41229,41233,41241,41245,41253,41257,41261,41265,41269,41273,41289,41297,41301,41305,41353,41359,41363,41373,41381,41389,41393,41397,41401,41405,41413,41417,41433,41437,41445,41453],{"__ignoreMap":63},[68,40782,40783,40785],{"class":70,"line":71},[68,40784,30593],{"class":331},[68,40786,30596],{"class":335},[68,40788,40789,40791,40793,40795],{"class":70,"line":92},[68,40790,30593],{"class":331},[68,40792,31616],{"class":335},[68,40794,31584],{"class":331},[68,40796,31621],{"class":335},[68,40798,40799,40801,40803,40805],{"class":70,"line":1387},[68,40800,30938],{"class":331},[68,40802,31599],{"class":335},[68,40804,30593],{"class":331},[68,40806,31604],{"class":335},[68,40808,40809],{"class":70,"line":1402},[68,40810,34123],{"class":393},[68,40812,40813,40815,40817,40819],{"class":70,"line":1408},[68,40814,30938],{"class":331},[68,40816,31569],{"class":335},[68,40818,30593],{"class":331},[68,40820,31574],{"class":335},[68,40822,40823,40825,40827,40829],{"class":70,"line":1422},[68,40824,30938],{"class":331},[68,40826,32115],{"class":335},[68,40828,30593],{"class":331},[68,40830,40831],{"class":82}," VGG16\n",[68,40833,40834],{"class":70,"line":1428},[68,40835,2606],{"emptyLinePlaceholder":260},[68,40837,40838],{"class":70,"line":1519},[68,40839,2606],{"emptyLinePlaceholder":260},[68,40841,40842],{"class":70,"line":1525},[68,40843,34152],{"class":393},[68,40845,40846,40848,40850],{"class":70,"line":1537},[68,40847,32148],{"class":331},[68,40849,34159],{"class":74},[68,40851,32154],{"class":335},[68,40853,40854,40856,40858,40860,40862,40864,40866],{"class":70,"line":1819},[68,40855,34166],{"class":335},[68,40857,381],{"class":331},[68,40859,31656],{"class":335},[68,40861,31659],{"class":5421},[68,40863,381],{"class":331},[68,40865,31664],{"class":78},[68,40867,31667],{"class":335},[68,40869,40870,40872,40874,40876],{"class":70,"line":1824},[68,40871,34183],{"class":5421},[68,40873,381],{"class":331},[68,40875,34188],{"class":82},[68,40877,31667],{"class":335},[68,40879,40880,40882,40884,40886,40888,40890,40892],{"class":70,"line":1830},[68,40881,34195],{"class":5421},[68,40883,381],{"class":331},[68,40885,31694],{"class":335},[68,40887,31697],{"class":5421},[68,40889,381],{"class":331},[68,40891,31702],{"class":82},[68,40893,31705],{"class":335},[68,40895,40896,40898,40900,40902],{"class":70,"line":1835},[68,40897,34212],{"class":5421},[68,40899,381],{"class":331},[68,40901,31677],{"class":82},[68,40903,342],{"class":335},[68,40905,40906,40908,40910,40912,40914,40916],{"class":70,"line":1849},[68,40907,34223],{"class":335},[68,40909,381],{"class":331},[68,40911,31735],{"class":335},[68,40913,31738],{"class":5421},[68,40915,381],{"class":331},[68,40917,34234],{"class":335},[68,40919,40920],{"class":70,"line":1854},[68,40921,34239],{"class":393},[68,40923,40924,40926,40928,40930],{"class":70,"line":1860},[68,40925,34244],{"class":5421},[68,40927,381],{"class":331},[68,40929,551],{"class":82},[68,40931,31667],{"class":335},[68,40933,40934,40936,40938,40940],{"class":70,"line":1881},[68,40935,34255],{"class":5421},[68,40937,381],{"class":331},[68,40939,31677],{"class":82},[68,40941,31667],{"class":335},[68,40943,40944,40946,40948,40950],{"class":70,"line":1886},[68,40945,34266],{"class":5421},[68,40947,381],{"class":331},[68,40949,525],{"class":82},[68,40951,342],{"class":335},[68,40953,40954,40956],{"class":70,"line":1900},[68,40955,4296],{"class":331},[68,40957,34279],{"class":335},[68,40959,40960],{"class":70,"line":1905},[68,40961,2606],{"emptyLinePlaceholder":260},[68,40963,40964],{"class":70,"line":1934},[68,40965,34288],{"class":393},[68,40967,40968,40970,40972],{"class":70,"line":1939},[68,40969,32148],{"class":331},[68,40971,34295],{"class":74},[68,40973,34298],{"class":335},[68,40975,40976],{"class":70,"line":1956},[68,40977,34303],{"class":393},[68,40979,40980,40982,40984,40986,40988,40990,40992],{"class":70,"line":1961},[68,40981,31438],{"class":335},[68,40983,381],{"class":331},[68,40985,31445],{"class":78},[68,40987,1911],{"class":331},[68,40989,31450],{"class":335},[68,40991,1908],{"class":331},[68,40993,34320],{"class":78},[68,40995,40996,40998,41000],{"class":70,"line":1966},[68,40997,31490],{"class":335},[68,40999,381],{"class":331},[68,41001,32490],{"class":335},[68,41003,41004],{"class":70,"line":1971},[68,41005,2606],{"emptyLinePlaceholder":260},[68,41007,41008],{"class":70,"line":1985},[68,41009,34337],{"class":393},[68,41011,41012,41014,41016],{"class":70,"line":1990},[68,41013,34342],{"class":335},[68,41015,381],{"class":331},[68,41017,32543],{"class":82},[68,41019,41020,41022,41024],{"class":70,"line":2783},[68,41021,34351],{"class":335},[68,41023,381],{"class":331},[68,41025,3291],{"class":82},[68,41027,41028],{"class":70,"line":2797},[68,41029,2606],{"emptyLinePlaceholder":260},[68,41031,41032],{"class":70,"line":2805},[68,41033,34364],{"class":393},[68,41035,41036],{"class":70,"line":2810},[68,41037,34369],{"class":393},[68,41039,41040],{"class":70,"line":2816},[68,41041,34374],{"class":393},[68,41043,41044,41046],{"class":70,"line":2822},[68,41045,34379],{"class":331},[68,41047,33085],{"class":335},[68,41049,41050],{"class":70,"line":2827},[68,41051,34386],{"class":393},[68,41053,41054,41056,41058,41060],{"class":70,"line":8153},[68,41055,3609],{"class":331},[68,41057,34393],{"class":335},[68,41059,26247],{"class":331},[68,41061,34398],{"class":335},[68,41063,41064,41066,41068],{"class":70,"line":8177},[68,41065,34403],{"class":335},[68,41067,381],{"class":331},[68,41069,34408],{"class":335},[68,41071,41072,41074,41076],{"class":70,"line":8182},[68,41073,34413],{"class":335},[68,41075,381],{"class":331},[68,41077,34418],{"class":335},[68,41079,41080],{"class":70,"line":8188},[68,41081,34423],{"class":393},[68,41083,41084],{"class":70,"line":8215},[68,41085,33076],{"class":335},[68,41087,41088],{"class":70,"line":8220},[68,41089,34432],{"class":393},[68,41091,41092,41094,41096],{"class":70,"line":8226},[68,41093,32861],{"class":335},[68,41095,381],{"class":331},[68,41097,34441],{"class":335},[68,41099,41100],{"class":70,"line":8238},[68,41101,34446],{"class":393},[68,41103,41104,41106,41108,41110,41112,41114,41116],{"class":70,"line":8250},[68,41105,32878],{"class":335},[68,41107,381],{"class":331},[68,41109,32883],{"class":335},[68,41111,32886],{"class":5421},[68,41113,381],{"class":331},[68,41115,551],{"class":82},[68,41117,342],{"class":335},[68,41119,41120],{"class":70,"line":8262},[68,41121,34467],{"class":393},[68,41123,41124],{"class":70,"line":9921},[68,41125,34472],{"class":393},[68,41127,41128],{"class":70,"line":9946},[68,41129,34477],{"class":393},[68,41131,41132,41134,41136,41138,41140],{"class":70,"line":9969},[68,41133,34482],{"class":335},[68,41135,9682],{"class":331},[68,41137,32988],{"class":335},[68,41139,3155],{"class":331},[68,41141,34491],{"class":335},[68,41143,41144],{"class":70,"line":9993},[68,41145,34496],{"class":393},[68,41147,41148,41150,41152,41154,41156],{"class":70,"line":9998},[68,41149,34501],{"class":335},[68,41151,9682],{"class":331},[68,41153,34506],{"class":335},[68,41155,525],{"class":82},[68,41157,342],{"class":335},[68,41159,41160],{"class":70,"line":10003},[68,41161,2606],{"emptyLinePlaceholder":260},[68,41163,41164],{"class":70,"line":10008},[68,41165,34519],{"class":393},[68,41167,41168,41170,41172,41174,41176],{"class":70,"line":10017},[68,41169,34524],{"class":335},[68,41171,381],{"class":331},[68,41173,34529],{"class":335},[68,41175,917],{"class":331},[68,41177,34534],{"class":335},[68,41179,41180],{"class":70,"line":10022},[68,41181,34539],{"class":393},[68,41183,41184,41186,41188,41190],{"class":70,"line":10028},[68,41185,32652],{"class":82},[68,41187,336],{"class":335},[68,41189,34548],{"class":78},[68,41191,34551],{"class":335},[68,41193,41194],{"class":70,"line":10049},[68,41195,2606],{"emptyLinePlaceholder":260},[68,41197,41198],{"class":70,"line":10055},[68,41199,34560],{"class":393},[68,41201,41202,41204,41206,41208,41210],{"class":70,"line":10069},[68,41203,1738],{"class":331},[68,41205,31421],{"class":82},[68,41207,3155],{"class":331},[68,41209,31426],{"class":78},[68,41211,3945],{"class":335},[68,41213,41214],{"class":70,"line":10075},[68,41215,34577],{"class":393},[68,41217,41218,41220,41222],{"class":70,"line":10102},[68,41219,31490],{"class":335},[68,41221,381],{"class":331},[68,41223,41224],{"class":335},"VGG16()\n",[68,41226,41227],{"class":70,"line":10111},[68,41228,34590],{"class":393},[68,41230,41231],{"class":70,"line":10117},[68,41232,34595],{"class":393},[68,41234,41235,41237,41239],{"class":70,"line":10125},[68,41236,34600],{"class":335},[68,41238,34603],{"class":78},[68,41240,30698],{"class":335},[68,41242,41243],{"class":70,"line":10130},[68,41244,34610],{"class":393},[68,41246,41247,41249,41251],{"class":70,"line":16809},[68,41248,34223],{"class":335},[68,41250,381],{"class":331},[68,41252,34619],{"class":335},[68,41254,41255],{"class":70,"line":16815},[68,41256,34624],{"class":393},[68,41258,41259],{"class":70,"line":16838},[68,41260,34629],{"class":335},[68,41262,41263],{"class":70,"line":16844},[68,41264,2606],{"emptyLinePlaceholder":260},[68,41266,41267],{"class":70,"line":16867},[68,41268,34638],{"class":393},[68,41270,41271],{"class":70,"line":16881},[68,41272,34643],{"class":393},[68,41274,41275,41277,41279,41281,41283,41285,41287],{"class":70,"line":16901},[68,41276,31438],{"class":335},[68,41278,381],{"class":331},[68,41280,31445],{"class":78},[68,41282,1911],{"class":331},[68,41284,31450],{"class":335},[68,41286,1908],{"class":331},[68,41288,34320],{"class":78},[68,41290,41291,41293,41295],{"class":70,"line":16907},[68,41292,31490],{"class":335},[68,41294,381],{"class":331},[68,41296,32490],{"class":335},[68,41298,41299],{"class":70,"line":16918},[68,41300,34672],{"class":393},[68,41302,41303],{"class":70,"line":16941},[68,41304,34677],{"class":393},[68,41306,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327,41329,41331,41333,41335,41337,41339,41341,41343,41345,41347,41349,41351],{"class":70,"line":16963},[68,41308,34682],{"class":335},[68,41310,381],{"class":331},[68,41312,1223],{"class":335},[68,41314,34689],{"class":78},[68,41316,711],{"class":335},[68,41318,34694],{"class":78},[68,41320,711],{"class":335},[68,41322,34699],{"class":78},[68,41324,711],{"class":335},[68,41326,34704],{"class":78},[68,41328,711],{"class":335},[68,41330,34709],{"class":78},[68,41332,711],{"class":335},[68,41334,34714],{"class":78},[68,41336,711],{"class":335},[68,41338,34719],{"class":78},[68,41340,711],{"class":335},[68,41342,34724],{"class":78},[68,41344,711],{"class":335},[68,41346,34729],{"class":78},[68,41348,711],{"class":335},[68,41350,34734],{"class":78},[68,41352,33447],{"class":335},[68,41354,41355,41357],{"class":70,"line":16968},[68,41356,34379],{"class":331},[68,41358,33085],{"class":335},[68,41360,41361],{"class":70,"line":16974},[68,41362,34747],{"class":393},[68,41364,41365,41367,41369,41371],{"class":70,"line":16988},[68,41366,3609],{"class":331},[68,41368,34754],{"class":335},[68,41370,26247],{"class":331},[68,41372,34398],{"class":335},[68,41374,41375,41377,41379],{"class":70,"line":17001},[68,41376,32811],{"class":335},[68,41378,381],{"class":331},[68,41380,32816],{"class":335},[68,41382,41383,41385,41387],{"class":70,"line":17006},[68,41384,32826],{"class":335},[68,41386,381],{"class":331},[68,41388,32831],{"class":335},[68,41390,41391],{"class":70,"line":17020},[68,41392,2606],{"emptyLinePlaceholder":260},[68,41394,41395],{"class":70,"line":17025},[68,41396,34783],{"class":393},[68,41398,41399],{"class":70,"line":17031},[68,41400,33076],{"class":335},[68,41402,41403],{"class":70,"line":17036},[68,41404,34792],{"class":393},[68,41406,41407,41409,41411],{"class":70,"line":17050},[68,41408,32861],{"class":335},[68,41410,381],{"class":331},[68,41412,32866],{"class":335},[68,41414,41415],{"class":70,"line":17055},[68,41416,34805],{"class":393},[68,41418,41419,41421,41423,41425,41427,41429,41431],{"class":70,"line":17060},[68,41420,32878],{"class":335},[68,41422,381],{"class":331},[68,41424,32883],{"class":335},[68,41426,32886],{"class":5421},[68,41428,381],{"class":331},[68,41430,551],{"class":82},[68,41432,342],{"class":335},[68,41434,41435],{"class":70,"line":17074},[68,41436,34826],{"class":393},[68,41438,41439,41441,41443],{"class":70,"line":17086},[68,41440,34831],{"class":335},[68,41442,381],{"class":331},[68,41444,34836],{"class":335},[68,41446,41447,41449,41451],{"class":70,"line":17091},[68,41448,34841],{"class":335},[68,41450,381],{"class":331},[68,41452,34846],{"class":335},[68,41454,41455,41457,41459,41461,41463,41465,41467,41469],{"class":70,"line":17104},[68,41456,34851],{"class":82},[68,41458,336],{"class":335},[68,41460,34856],{"class":78},[68,41462,34859],{"class":335},[68,41464,34862],{"class":78},[68,41466,711],{"class":335},[68,41468,34867],{"class":78},[68,41470,34870],{"class":335},[301,41472,41474],{"id":41473},"_23googlenet","2.3.GoogLeNet",[22203,41476,41478],{"id":41477},"_231原理","2.3.1.原理",[23,41480,41481],{},[26,41482,41483],{},"网络结构",[19,41485,41486],{},[48,41487],{"alt":63,"src":41488},"\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",[19,41490,41491],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41493,41494],{},[48,41495],{"alt":63,"src":41496},"\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",[19,41498,41499],{},[48,41500],{"alt":63,"src":41501},"\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",[19,41503,41504],{},[48,41505],{"alt":63,"src":41506},"\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",[23,41508,41509],{"start":92},[26,41510,41511],{},"1x1卷积的优点",[19,41513,41514],{},[48,41515],{"alt":63,"src":41516},"\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",[23,41518,41519],{"start":1387},[26,41520,41521],{},"全局平均池化层优点",[19,41523,41524],{},[48,41525],{"alt":63,"src":41526},"\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",[19,41528,41529],{},[48,41530],{"alt":63,"src":41531},"\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",[23,41533,41534],{"start":1402},[26,41535,41536],{},"参数详细描述",[19,41538,41539],{},[48,41540],{"alt":63,"src":41541},"\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",[19,41543,41544],{},[48,41545],{"alt":63,"src":41546},"\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",[19,41548,41549],{},[48,41550],{"alt":63,"src":41551},"\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",[19,41553,41554],{},[48,41555],{"alt":63,"src":41556},"\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",[19,41558,41559],{},[48,41560],{"alt":63,"src":41561},"\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",[19,41563,41564],{},[48,41565],{"alt":63,"src":41566},"\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",[19,41568,41569],{},[48,41570],{"alt":63,"src":41571},"\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",[19,41573,41574],{},[48,41575],{"alt":63,"src":41576},"\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",[19,41578,41579],{},[48,41580],{"alt":63,"src":41581},"\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",[19,41583,41584],{},[48,41585],{"alt":63,"src":41586},"\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",[19,41588,41589],{},[48,41590],{"alt":63,"src":41591},"\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",[19,41593,41594],{},[48,41595],{"alt":63,"src":41596},"\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",[19,41598,41599],{},[48,41600],{"alt":63,"src":41601},"\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",[19,41603,41604],{},[48,41605],{"alt":63,"src":41606},"\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",[19,41608,41609],{},[48,41610],{"alt":63,"src":41611},"\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",[19,41613,41614],{},[48,41615],{"alt":63,"src":41616},"\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",[19,41618,41619],{},[48,41620],{"alt":63,"src":41621},"\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",[19,41623,41624],{},[48,41625],{"alt":63,"src":41626},"\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",[19,41628,41629],{},[48,41630],{"alt":63,"src":41631},"\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",[19,41633,41634],{},[48,41635],{"alt":63,"src":41636},"\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",[19,41638,41639],{},[48,41640],{"alt":63,"src":41641},"\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",[22203,41643,41645],{"id":41644},"_232代码实现","2.3.2.代码实现",[23,41647,41648],{},[26,41649,30912],{},[19,41651,41652],{},"根据原理一步一步搭建即可",[58,41654,41656],{"className":30579,"code":41655,"language":30581,"meta":63,"style":63},"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",[65,41657,41658,41664,41674,41684,41688,41705,41714,41729,41739,41744,41777,41782,41819,41866,41871,41907,41954,41959,41964,41999,42031,42035,42043,42059,42083,42108,42129,42134,42149,42153,42157,42162,42179,42184,42193,42208,42219,42263,42267,42295,42299,42310,42338,42342,42379,42383,42411,42415,42426,42462,42494,42522,42526,42537,42571,42603,42635,42668,42702,42730,42734,42745,42778,42810,42824,42828,42841,42845,42850,42862,42870,42892,42897,42902,42907,42912,42917,42922,42936,42944,42953,42966,42981,42990,42994,43002,43013,43024,43035,43046,43057,43063,43067,43072,43084,43104,43113],{"__ignoreMap":63},[68,41659,41660,41662],{"class":70,"line":71},[68,41661,30593],{"class":331},[68,41663,30596],{"class":335},[68,41665,41666,41668,41670,41672],{"class":70,"line":92},[68,41667,30938],{"class":331},[68,41669,30941],{"class":335},[68,41671,30593],{"class":331},[68,41673,30946],{"class":335},[68,41675,41676,41678,41680,41682],{"class":70,"line":1387},[68,41677,30938],{"class":331},[68,41679,30958],{"class":335},[68,41681,30593],{"class":331},[68,41683,30963],{"class":335},[68,41685,41686],{"class":70,"line":1402},[68,41687,2606],{"emptyLinePlaceholder":260},[68,41689,41690,41692,41695,41697,41699,41701,41703],{"class":70,"line":1408},[68,41691,14899],{"class":331},[68,41693,41694],{"class":74}," Inception",[68,41696,336],{"class":335},[68,41698,30979],{"class":74},[68,41700,891],{"class":335},[68,41702,30984],{"class":74},[68,41704,30987],{"class":335},[68,41706,41707,41709,41711],{"class":70,"line":1422},[68,41708,31002],{"class":331},[68,41710,31005],{"class":82},[68,41712,41713],{"class":335},"(self,in_channels,c1,c2,c3,c4):\n",[68,41715,41716,41718,41721,41723,41725,41727],{"class":70,"line":1428},[68,41717,31018],{"class":82},[68,41719,41720],{"class":335},"(Inception,",[68,41722,31024],{"class":82},[68,41724,31027],{"class":335},[68,41726,31030],{"class":82},[68,41728,2182],{"class":335},[68,41730,41731,41733,41735,41737],{"class":70,"line":1519},[68,41732,31046],{"class":82},[68,41734,34972],{"class":335},[68,41736,381],{"class":331},[68,41738,34977],{"class":335},[68,41740,41741],{"class":70,"line":1525},[68,41742,41743],{"class":393},"        # 路线1：定义1*1卷积\n",[68,41745,41746,41748,41751,41753,41755,41757,41759,41762,41764,41766,41769,41771,41773,41775],{"class":70,"line":1537},[68,41747,31046],{"class":82},[68,41749,41750],{"class":335},".p1_1",[68,41752,381],{"class":331},[68,41754,31054],{"class":335},[68,41756,31057],{"class":5421},[68,41758,381],{"class":331},[68,41760,41761],{"class":335},"in_channels,",[68,41763,31066],{"class":5421},[68,41765,381],{"class":331},[68,41767,41768],{"class":335},"c1,",[68,41770,31075],{"class":5421},[68,41772,381],{"class":331},[68,41774,551],{"class":82},[68,41776,342],{"class":335},[68,41778,41779],{"class":70,"line":1819},[68,41780,41781],{"class":393},"        # 路线2：定义1*1卷积和3*3\n",[68,41783,41784,41786,41789,41791,41793,41795,41797,41799,41801,41803,41806,41808,41811,41813,41815,41817],{"class":70,"line":1824},[68,41785,31046],{"class":82},[68,41787,41788],{"class":335},".p2_1",[68,41790,381],{"class":331},[68,41792,31054],{"class":335},[68,41794,31057],{"class":5421},[68,41796,381],{"class":331},[68,41798,41761],{"class":335},[68,41800,31066],{"class":5421},[68,41802,381],{"class":331},[68,41804,41805],{"class":335},"c2[",[68,41807,525],{"class":82},[68,41809,41810],{"class":335},"],",[68,41812,31075],{"class":5421},[68,41814,381],{"class":331},[68,41816,551],{"class":82},[68,41818,342],{"class":335},[68,41820,41821,41823,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864],{"class":70,"line":1830},[68,41822,31046],{"class":82},[68,41824,41825],{"class":335},".p2_2",[68,41827,381],{"class":331},[68,41829,31054],{"class":335},[68,41831,31057],{"class":5421},[68,41833,381],{"class":331},[68,41835,41805],{"class":335},[68,41837,525],{"class":82},[68,41839,41810],{"class":335},[68,41841,31066],{"class":5421},[68,41843,381],{"class":331},[68,41845,41805],{"class":335},[68,41847,551],{"class":82},[68,41849,41810],{"class":335},[68,41851,31075],{"class":5421},[68,41853,381],{"class":331},[68,41855,406],{"class":82},[68,41857,711],{"class":335},[68,41859,31084],{"class":5421},[68,41861,381],{"class":331},[68,41863,551],{"class":82},[68,41865,342],{"class":335},[68,41867,41868],{"class":70,"line":1835},[68,41869,41870],{"class":393},"        # 路线3：定义1*1卷积和5*5\n",[68,41872,41873,41875,41878,41880,41882,41884,41886,41888,41890,41892,41895,41897,41899,41901,41903,41905],{"class":70,"line":1849},[68,41874,31046],{"class":82},[68,41876,41877],{"class":335},".p3_1",[68,41879,381],{"class":331},[68,41881,31054],{"class":335},[68,41883,31057],{"class":5421},[68,41885,381],{"class":331},[68,41887,41761],{"class":335},[68,41889,31066],{"class":5421},[68,41891,381],{"class":331},[68,41893,41894],{"class":335},"c3[",[68,41896,525],{"class":82},[68,41898,41810],{"class":335},[68,41900,31075],{"class":5421},[68,41902,381],{"class":331},[68,41904,551],{"class":82},[68,41906,342],{"class":335},[68,41908,41909,41911,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940,41942,41944,41946,41948,41950,41952],{"class":70,"line":1854},[68,41910,31046],{"class":82},[68,41912,41913],{"class":335},".p3_2",[68,41915,381],{"class":331},[68,41917,31054],{"class":335},[68,41919,31057],{"class":5421},[68,41921,381],{"class":331},[68,41923,41894],{"class":335},[68,41925,525],{"class":82},[68,41927,41810],{"class":335},[68,41929,31066],{"class":5421},[68,41931,381],{"class":331},[68,41933,41894],{"class":335},[68,41935,551],{"class":82},[68,41937,41810],{"class":335},[68,41939,31075],{"class":5421},[68,41941,381],{"class":331},[68,41943,652],{"class":82},[68,41945,711],{"class":335},[68,41947,31084],{"class":5421},[68,41949,381],{"class":331},[68,41951,412],{"class":82},[68,41953,342],{"class":335},[68,41955,41956],{"class":70,"line":1860},[68,41957,41958],{"class":393},"        # 路线4：定义3*3最大池化和1*1卷积\n",[68,41960,41961],{"class":70,"line":1881},[68,41962,41963],{"class":393},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[68,41965,41966,41968,41971,41973,41975,41977,41979,41981,41983,41985,41987,41989,41991,41993,41995,41997],{"class":70,"line":1886},[68,41967,31046],{"class":82},[68,41969,41970],{"class":335},".p4_1",[68,41972,381],{"class":331},[68,41974,35030],{"class":335},[68,41976,31075],{"class":5421},[68,41978,381],{"class":331},[68,41980,406],{"class":82},[68,41982,711],{"class":335},[68,41984,31130],{"class":5421},[68,41986,381],{"class":331},[68,41988,551],{"class":82},[68,41990,711],{"class":335},[68,41992,31084],{"class":5421},[68,41994,381],{"class":331},[68,41996,551],{"class":82},[68,41998,342],{"class":335},[68,42000,42001,42003,42006,42008,42010,42012,42014,42016,42018,42020,42023,42025,42027,42029],{"class":70,"line":1900},[68,42002,31046],{"class":82},[68,42004,42005],{"class":335},".p4_2",[68,42007,381],{"class":331},[68,42009,31054],{"class":335},[68,42011,31057],{"class":5421},[68,42013,381],{"class":331},[68,42015,41761],{"class":335},[68,42017,31066],{"class":5421},[68,42019,381],{"class":331},[68,42021,42022],{"class":335},"c4,",[68,42024,31075],{"class":5421},[68,42026,381],{"class":331},[68,42028,551],{"class":82},[68,42030,342],{"class":335},[68,42032,42033],{"class":70,"line":1905},[68,42034,2606],{"emptyLinePlaceholder":260},[68,42036,42037,42039,42041],{"class":70,"line":1934},[68,42038,31002],{"class":331},[68,42040,31294],{"class":74},[68,42042,31297],{"class":335},[68,42044,42045,42048,42050,42052,42054,42056],{"class":70,"line":1939},[68,42046,42047],{"class":335},"        p1",[68,42049,381],{"class":331},[68,42051,31024],{"class":82},[68,42053,35385],{"class":335},[68,42055,31024],{"class":82},[68,42057,42058],{"class":335},".p1_1(x))\n",[68,42060,42061,42063,42065,42067,42069,42071,42074,42076,42078,42080],{"class":70,"line":1956},[68,42062,7290],{"class":335},[68,42064,381],{"class":331},[68,42066,31024],{"class":82},[68,42068,35385],{"class":335},[68,42070,31024],{"class":82},[68,42072,42073],{"class":335},".p2_2(",[68,42075,31024],{"class":82},[68,42077,35385],{"class":335},[68,42079,31024],{"class":82},[68,42081,42082],{"class":335},".p2_1(x))))\n",[68,42084,42085,42088,42090,42092,42094,42096,42099,42101,42103,42105],{"class":70,"line":1961},[68,42086,42087],{"class":335},"        p3",[68,42089,381],{"class":331},[68,42091,31024],{"class":82},[68,42093,35385],{"class":335},[68,42095,31024],{"class":82},[68,42097,42098],{"class":335},".p3_2(",[68,42100,31024],{"class":82},[68,42102,35385],{"class":335},[68,42104,31024],{"class":82},[68,42106,42107],{"class":335},".p3_1(x))))\n",[68,42109,42110,42113,42115,42117,42119,42121,42124,42126],{"class":70,"line":1966},[68,42111,42112],{"class":335},"        p4",[68,42114,381],{"class":331},[68,42116,31024],{"class":82},[68,42118,35385],{"class":335},[68,42120,31024],{"class":82},[68,42122,42123],{"class":335},".p4_2(",[68,42125,31024],{"class":82},[68,42127,42128],{"class":335},".p4_1(x)))\n",[68,42130,42131],{"class":70,"line":1971},[68,42132,42133],{"class":393},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[68,42135,42136,42138,42141,42143,42145,42147],{"class":70,"line":1985},[68,42137,14957],{"class":331},[68,42139,42140],{"class":335}," torch.cat((p1,p2,p3,p4),",[68,42142,32886],{"class":5421},[68,42144,381],{"class":331},[68,42146,551],{"class":82},[68,42148,342],{"class":335},[68,42150,42151],{"class":70,"line":1990},[68,42152,2606],{"emptyLinePlaceholder":260},[68,42154,42155],{"class":70,"line":2783},[68,42156,2606],{"emptyLinePlaceholder":260},[68,42158,42159],{"class":70,"line":2797},[68,42160,42161],{"class":393},"# 搭建GoogLeNet网络\n",[68,42163,42164,42166,42169,42171,42173,42175,42177],{"class":70,"line":2805},[68,42165,14899],{"class":331},[68,42167,42168],{"class":74}," GoogLeNet",[68,42170,336],{"class":335},[68,42172,30979],{"class":74},[68,42174,891],{"class":335},[68,42176,30984],{"class":74},[68,42178,30987],{"class":335},[68,42180,42181],{"class":70,"line":2810},[68,42182,42183],{"class":393},"    # 必须把Inception导入到里边\n",[68,42185,42186,42188,42190],{"class":70,"line":2816},[68,42187,31002],{"class":331},[68,42189,31005],{"class":82},[68,42191,42192],{"class":335},"(self,Inception):\n",[68,42194,42195,42197,42200,42202,42204,42206],{"class":70,"line":2822},[68,42196,31018],{"class":82},[68,42198,42199],{"class":335},"(GoogLeNet,",[68,42201,31024],{"class":82},[68,42203,31027],{"class":335},[68,42205,31030],{"class":82},[68,42207,2182],{"class":335},[68,42209,42210,42212,42215,42217],{"class":70,"line":2827},[68,42211,31046],{"class":82},[68,42213,42214],{"class":335},".b1",[68,42216,381],{"class":331},[68,42218,38210],{"class":335},[68,42220,42221,42223,42225,42227,42229,42231,42233,42235,42237,42239,42241,42243,42245,42247,42249,42251,42253,42255,42257,42259,42261],{"class":70,"line":8153},[68,42222,38215],{"class":335},[68,42224,31057],{"class":5421},[68,42226,381],{"class":331},[68,42228,551],{"class":82},[68,42230,711],{"class":335},[68,42232,31066],{"class":5421},[68,42234,381],{"class":331},[68,42236,537],{"class":82},[68,42238,711],{"class":335},[68,42240,31075],{"class":5421},[68,42242,381],{"class":331},[68,42244,702],{"class":82},[68,42246,711],{"class":335},[68,42248,31130],{"class":5421},[68,42250,381],{"class":331},[68,42252,412],{"class":82},[68,42254,711],{"class":335},[68,42256,31084],{"class":5421},[68,42258,381],{"class":331},[68,42260,406],{"class":82},[68,42262,38248],{"class":335},[68,42264,42265],{"class":70,"line":8177},[68,42266,38253],{"class":335},[68,42268,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289,42291,42293],{"class":70,"line":8182},[68,42270,38298],{"class":335},[68,42272,31075],{"class":5421},[68,42274,381],{"class":331},[68,42276,406],{"class":82},[68,42278,711],{"class":335},[68,42280,31130],{"class":5421},[68,42282,381],{"class":331},[68,42284,412],{"class":82},[68,42286,711],{"class":335},[68,42288,31084],{"class":5421},[68,42290,381],{"class":331},[68,42292,551],{"class":82},[68,42294,342],{"class":335},[68,42296,42297],{"class":70,"line":8188},[68,42298,38327],{"class":335},[68,42300,42301,42303,42306,42308],{"class":70,"line":8215},[68,42302,31046],{"class":82},[68,42304,42305],{"class":335},".b2",[68,42307,381],{"class":331},[68,42309,38210],{"class":335},[68,42311,42312,42314,42316,42318,42320,42322,42324,42326,42328,42330,42332,42334,42336],{"class":70,"line":8220},[68,42313,38215],{"class":335},[68,42315,31057],{"class":5421},[68,42317,381],{"class":331},[68,42319,537],{"class":82},[68,42321,711],{"class":335},[68,42323,31066],{"class":5421},[68,42325,381],{"class":331},[68,42327,537],{"class":82},[68,42329,711],{"class":335},[68,42331,31075],{"class":5421},[68,42333,381],{"class":331},[68,42335,551],{"class":82},[68,42337,38248],{"class":335},[68,42339,42340],{"class":70,"line":8226},[68,42341,38253],{"class":335},[68,42343,42344,42346,42348,42350,42352,42354,42356,42358,42361,42363,42365,42367,42369,42371,42373,42375,42377],{"class":70,"line":8238},[68,42345,38215],{"class":335},[68,42347,31057],{"class":5421},[68,42349,381],{"class":331},[68,42351,537],{"class":82},[68,42353,711],{"class":335},[68,42355,31066],{"class":5421},[68,42357,381],{"class":331},[68,42359,42360],{"class":82},"192",[68,42362,711],{"class":335},[68,42364,31075],{"class":5421},[68,42366,381],{"class":331},[68,42368,406],{"class":82},[68,42370,711],{"class":335},[68,42372,31084],{"class":5421},[68,42374,381],{"class":331},[68,42376,551],{"class":82},[68,42378,38248],{"class":335},[68,42380,42381],{"class":70,"line":8250},[68,42382,38253],{"class":335},[68,42384,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409],{"class":70,"line":8262},[68,42386,38298],{"class":335},[68,42388,31075],{"class":5421},[68,42390,381],{"class":331},[68,42392,406],{"class":82},[68,42394,711],{"class":335},[68,42396,31130],{"class":5421},[68,42398,381],{"class":331},[68,42400,412],{"class":82},[68,42402,711],{"class":335},[68,42404,31084],{"class":5421},[68,42406,381],{"class":331},[68,42408,551],{"class":82},[68,42410,342],{"class":335},[68,42412,42413],{"class":70,"line":9921},[68,42414,38327],{"class":335},[68,42416,42417,42419,42422,42424],{"class":70,"line":9946},[68,42418,31046],{"class":82},[68,42420,42421],{"class":335},".b3",[68,42423,381],{"class":331},[68,42425,38210],{"class":335},[68,42427,42428,42431,42433,42435,42437,42440,42442,42444,42446,42449,42451,42453,42455,42458,42460],{"class":70,"line":9969},[68,42429,42430],{"class":335},"            Inception(",[68,42432,42360],{"class":82},[68,42434,711],{"class":335},[68,42436,537],{"class":82},[68,42438,42439],{"class":335},",(",[68,42441,543],{"class":82},[68,42443,711],{"class":335},[68,42445,32271],{"class":82},[68,42447,42448],{"class":335},"),(",[68,42450,934],{"class":82},[68,42452,711],{"class":335},[68,42454,531],{"class":82},[68,42456,42457],{"class":335},"),",[68,42459,531],{"class":82},[68,42461,38248],{"class":335},[68,42463,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492],{"class":70,"line":9993},[68,42465,42430],{"class":335},[68,42467,35071],{"class":82},[68,42469,711],{"class":335},[68,42471,32271],{"class":82},[68,42473,42439],{"class":335},[68,42475,32271],{"class":82},[68,42477,711],{"class":335},[68,42479,42360],{"class":82},[68,42481,42448],{"class":335},[68,42483,531],{"class":82},[68,42485,711],{"class":335},[68,42487,543],{"class":82},[68,42489,42457],{"class":335},[68,42491,537],{"class":82},[68,42493,38248],{"class":335},[68,42495,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518,42520],{"class":70,"line":9998},[68,42497,38298],{"class":335},[68,42499,31075],{"class":5421},[68,42501,381],{"class":331},[68,42503,406],{"class":82},[68,42505,711],{"class":335},[68,42507,31130],{"class":5421},[68,42509,381],{"class":331},[68,42511,412],{"class":82},[68,42513,711],{"class":335},[68,42515,31084],{"class":5421},[68,42517,381],{"class":331},[68,42519,551],{"class":82},[68,42521,342],{"class":335},[68,42523,42524],{"class":70,"line":10003},[68,42525,38327],{"class":335},[68,42527,42528,42530,42533,42535],{"class":70,"line":10008},[68,42529,31046],{"class":82},[68,42531,42532],{"class":335},".b4",[68,42534,381],{"class":331},[68,42536,38210],{"class":335},[68,42538,42539,42541,42544,42546,42548,42550,42552,42554,42557,42559,42561,42563,42565,42567,42569],{"class":70,"line":10017},[68,42540,42430],{"class":335},[68,42542,42543],{"class":82},"480",[68,42545,711],{"class":335},[68,42547,42360],{"class":82},[68,42549,42439],{"class":335},[68,42551,543],{"class":82},[68,42553,711],{"class":335},[68,42555,42556],{"class":82},"208",[68,42558,42448],{"class":335},[68,42560,934],{"class":82},[68,42562,711],{"class":335},[68,42564,940],{"class":82},[68,42566,42457],{"class":335},[68,42568,537],{"class":82},[68,42570,38248],{"class":335},[68,42572,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597,42599,42601],{"class":70,"line":10022},[68,42574,42430],{"class":335},[68,42576,38658],{"class":82},[68,42578,711],{"class":335},[68,42580,21253],{"class":82},[68,42582,42439],{"class":335},[68,42584,951],{"class":82},[68,42586,711],{"class":335},[68,42588,31702],{"class":82},[68,42590,42448],{"class":335},[68,42592,1133],{"class":82},[68,42594,711],{"class":335},[68,42596,537],{"class":82},[68,42598,42457],{"class":335},[68,42600,537],{"class":82},[68,42602,38248],{"class":335},[68,42604,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629,42631,42633],{"class":70,"line":10028},[68,42606,42430],{"class":335},[68,42608,38658],{"class":82},[68,42610,711],{"class":335},[68,42612,32271],{"class":82},[68,42614,42439],{"class":335},[68,42616,32271],{"class":82},[68,42618,711],{"class":335},[68,42620,35071],{"class":82},[68,42622,42448],{"class":335},[68,42624,1133],{"class":82},[68,42626,711],{"class":335},[68,42628,537],{"class":82},[68,42630,42457],{"class":335},[68,42632,537],{"class":82},[68,42634,38248],{"class":335},[68,42636,42637,42639,42641,42643,42645,42647,42649,42651,42654,42656,42658,42660,42662,42664,42666],{"class":70,"line":10049},[68,42638,42430],{"class":335},[68,42640,38658],{"class":82},[68,42642,711],{"class":335},[68,42644,951],{"class":82},[68,42646,42439],{"class":335},[68,42648,32271],{"class":82},[68,42650,711],{"class":335},[68,42652,42653],{"class":82},"288",[68,42655,42448],{"class":335},[68,42657,531],{"class":82},[68,42659,711],{"class":335},[68,42661,537],{"class":82},[68,42663,42457],{"class":335},[68,42665,537],{"class":82},[68,42667,38248],{"class":335},[68,42669,42670,42672,42675,42677,42679,42681,42683,42685,42688,42690,42692,42694,42696,42698,42700],{"class":70,"line":10055},[68,42671,42430],{"class":335},[68,42673,42674],{"class":82},"528",[68,42676,711],{"class":335},[68,42678,35071],{"class":82},[68,42680,42439],{"class":335},[68,42682,21253],{"class":82},[68,42684,711],{"class":335},[68,42686,42687],{"class":82},"320",[68,42689,42448],{"class":335},[68,42691,531],{"class":82},[68,42693,711],{"class":335},[68,42695,32271],{"class":82},[68,42697,42457],{"class":335},[68,42699,32271],{"class":82},[68,42701,38248],{"class":335},[68,42703,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722,42724,42726,42728],{"class":70,"line":10069},[68,42705,38298],{"class":335},[68,42707,31075],{"class":5421},[68,42709,381],{"class":331},[68,42711,406],{"class":82},[68,42713,711],{"class":335},[68,42715,31130],{"class":5421},[68,42717,381],{"class":331},[68,42719,412],{"class":82},[68,42721,711],{"class":335},[68,42723,31084],{"class":5421},[68,42725,381],{"class":331},[68,42727,551],{"class":82},[68,42729,342],{"class":335},[68,42731,42732],{"class":70,"line":10075},[68,42733,38327],{"class":335},[68,42735,42736,42738,42741,42743],{"class":70,"line":10102},[68,42737,31046],{"class":82},[68,42739,42740],{"class":335},".b5",[68,42742,381],{"class":331},[68,42744,38210],{"class":335},[68,42746,42747,42749,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776],{"class":70,"line":10111},[68,42748,42430],{"class":335},[68,42750,42751],{"class":82},"832",[68,42753,711],{"class":335},[68,42755,35071],{"class":82},[68,42757,42439],{"class":335},[68,42759,21253],{"class":82},[68,42761,711],{"class":335},[68,42763,42687],{"class":82},[68,42765,42448],{"class":335},[68,42767,531],{"class":82},[68,42769,711],{"class":335},[68,42771,32271],{"class":82},[68,42773,42457],{"class":335},[68,42775,32271],{"class":82},[68,42777,38248],{"class":335},[68,42779,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802,42804,42806,42808],{"class":70,"line":10117},[68,42781,42430],{"class":335},[68,42783,42751],{"class":82},[68,42785,711],{"class":335},[68,42787,35141],{"class":82},[68,42789,42439],{"class":335},[68,42791,42360],{"class":82},[68,42793,711],{"class":335},[68,42795,35141],{"class":82},[68,42797,42448],{"class":335},[68,42799,940],{"class":82},[68,42801,711],{"class":335},[68,42803,32271],{"class":82},[68,42805,42457],{"class":335},[68,42807,32271],{"class":82},[68,42809,38248],{"class":335},[68,42811,42812,42815,42817,42819,42821],{"class":70,"line":10125},[68,42813,42814],{"class":335},"            nn.AdaptiveAvgPool2d((",[68,42816,551],{"class":82},[68,42818,711],{"class":335},[68,42820,551],{"class":82},[68,42822,42823],{"class":335},")),\n",[68,42825,42826],{"class":70,"line":10130},[68,42827,38991],{"class":335},[68,42829,42830,42832,42835,42837,42839],{"class":70,"line":16809},[68,42831,38996],{"class":335},[68,42833,42834],{"class":82},"1024",[68,42836,711],{"class":335},[68,42838,779],{"class":82},[68,42840,342],{"class":335},[68,42842,42843],{"class":70,"line":16815},[68,42844,38327],{"class":335},[68,42846,42847],{"class":70,"line":16838},[68,42848,42849],{"class":393},"        # 对模型参数初始化\n",[68,42851,42852,42854,42856,42858,42860],{"class":70,"line":16844},[68,42853,3609],{"class":331},[68,42855,39069],{"class":335},[68,42857,26247],{"class":331},[68,42859,39074],{"class":82},[68,42861,39077],{"class":335},[68,42863,42864,42866,42868],{"class":70,"line":16867},[68,42865,4848],{"class":331},[68,42867,39089],{"class":82},[68,42869,39092],{"class":335},[68,42871,42872,42874,42877,42879,42882,42884,42886,42888,42890],{"class":70,"line":16881},[68,42873,39102],{"class":335},[68,42875,42876],{"class":5421},"mode",[68,42878,381],{"class":331},[68,42880,42881],{"class":78},"'fan_out'",[68,42883,711],{"class":335},[68,42885,39105],{"class":5421},[68,42887,381],{"class":331},[68,42889,39110],{"class":78},[68,42891,342],{"class":335},[68,42893,42894],{"class":70,"line":16901},[68,42895,42896],{"class":393},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[68,42898,42899],{"class":70,"line":16907},[68,42900,42901],{"class":393},"                # ② mode = 'fan_out'决定使用的fan值：\n",[68,42903,42904],{"class":70,"line":16918},[68,42905,42906],{"class":393},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[68,42908,42909],{"class":70,"line":16941},[68,42910,42911],{"class":393},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[68,42913,42914],{"class":70,"line":16963},[68,42915,42916],{"class":393},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[68,42918,42919],{"class":70,"line":16968},[68,42920,42921],{"class":393},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[68,42923,42924,42926,42928,42930,42932,42934],{"class":70,"line":16974},[68,42925,39122],{"class":331},[68,42927,39125],{"class":335},[68,42929,39128],{"class":331},[68,42931,39131],{"class":331},[68,42933,39134],{"class":82},[68,42935,3945],{"class":335},[68,42937,42938,42940,42942],{"class":70,"line":16988},[68,42939,39146],{"class":335},[68,42941,525],{"class":82},[68,42943,342],{"class":335},[68,42945,42946,42949,42951],{"class":70,"line":17001},[68,42947,42948],{"class":331},"                elif",[68,42950,39089],{"class":82},[68,42952,39165],{"class":335},[68,42954,42955,42958,42960,42962,42964],{"class":70,"line":17006},[68,42956,42957],{"class":335},"                    nn.init.normal_(m.weight,",[68,42959,525],{"class":82},[68,42961,711],{"class":335},[68,42963,39187],{"class":82},[68,42965,342],{"class":335},[68,42967,42968,42971,42973,42975,42977,42979],{"class":70,"line":17020},[68,42969,42970],{"class":331},"                    if",[68,42972,39125],{"class":335},[68,42974,39128],{"class":331},[68,42976,39131],{"class":331},[68,42978,39134],{"class":82},[68,42980,3945],{"class":335},[68,42982,42983,42986,42988],{"class":70,"line":17025},[68,42984,42985],{"class":335},"                        nn.init.constant_(m.bias,",[68,42987,525],{"class":82},[68,42989,342],{"class":335},[68,42991,42992],{"class":70,"line":17031},[68,42993,35366],{"class":393},[68,42995,42996,42998,43000],{"class":70,"line":17036},[68,42997,31002],{"class":331},[68,42999,31294],{"class":74},[68,43001,31297],{"class":335},[68,43003,43004,43006,43008,43010],{"class":70,"line":17050},[68,43005,31302],{"class":335},[68,43007,381],{"class":331},[68,43009,31024],{"class":82},[68,43011,43012],{"class":335},".b1(x)\n",[68,43014,43015,43017,43019,43021],{"class":70,"line":17055},[68,43016,31302],{"class":335},[68,43018,381],{"class":331},[68,43020,31024],{"class":82},[68,43022,43023],{"class":335},".b2(x)\n",[68,43025,43026,43028,43030,43032],{"class":70,"line":17060},[68,43027,31302],{"class":335},[68,43029,381],{"class":331},[68,43031,31024],{"class":82},[68,43033,43034],{"class":335},".b3(x)\n",[68,43036,43037,43039,43041,43043],{"class":70,"line":17074},[68,43038,31302],{"class":335},[68,43040,381],{"class":331},[68,43042,31024],{"class":82},[68,43044,43045],{"class":335},".b4(x)\n",[68,43047,43048,43050,43052,43054],{"class":70,"line":17086},[68,43049,31302],{"class":335},[68,43051,381],{"class":331},[68,43053,31024],{"class":82},[68,43055,43056],{"class":335},".b5(x)\n",[68,43058,43059,43061],{"class":70,"line":17091},[68,43060,14957],{"class":331},[68,43062,31410],{"class":335},[68,43064,43065],{"class":70,"line":17104},[68,43066,2606],{"emptyLinePlaceholder":260},[68,43068,43069],{"class":70,"line":17109},[68,43070,43071],{"class":393},"# 模型展示\n",[68,43073,43074,43076,43078,43080,43082],{"class":70,"line":17114},[68,43075,1738],{"class":331},[68,43077,31421],{"class":82},[68,43079,3155],{"class":331},[68,43081,31426],{"class":78},[68,43083,3945],{"class":335},[68,43085,43086,43088,43090,43092,43094,43096,43098,43100,43102],{"class":70,"line":17119},[68,43087,31438],{"class":335},[68,43089,381],{"class":331},[68,43091,30652],{"class":335},[68,43093,31445],{"class":78},[68,43095,1911],{"class":331},[68,43097,31450],{"class":335},[68,43099,1908],{"class":331},[68,43101,30677],{"class":78},[68,43103,342],{"class":335},[68,43105,43106,43108,43110],{"class":70,"line":17132},[68,43107,31490],{"class":335},[68,43109,381],{"class":331},[68,43111,43112],{"class":335},"GoogLeNet(Inception).to(device)\n",[68,43114,43115,43117,43119,43121,43123,43125,43127,43129],{"class":70,"line":17137},[68,43116,31500],{"class":82},[68,43118,31503],{"class":335},[68,43120,551],{"class":82},[68,43122,711],{"class":335},[68,43124,31702],{"class":82},[68,43126,711],{"class":335},[68,43128,31702],{"class":82},[68,43130,31516],{"class":335},[23,43132,43133],{"start":92},[26,43134,39384],{},[58,43136,43138],{"className":30579,"code":43137,"language":30581,"meta":63,"style":63},"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",[65,43139,43140,43146,43152,43162,43168,43178,43188,43198,43208,43218,43222,43233,43243,43247,43251,43255,43263,43275,43285,43301,43311,43343,43357,43367,43377,43381,43391,43405,43415,43425,43435,43441,43445,43449,43453,43457,43461,43469,43489,43493,43497,43501,43505,43509,43525,43529,43533,43541,43545,43549,43557,43561,43565,43569,43577,43581,43585,43589,43593,43601,43605,43613,43617,43625,43629,43637,43641,43649,43653,43657,43665,43669,43673,43677,43689,43713,43727,43731,43735,43739,43747,43751,43759,43763,43771,43775,43783,43787,43795,43799,43807,43811,43823,43827,43835,43839,43847,43851,43855,43859,43863,43871,43875,43891,43895,43903,43907,43911,43915,43919,43923,43927,43931,43947,43951,43963,43967,43979,43983,43995,43999,44007,44011,44019,44023,44027,44031,44037,44041,44049,44053,44069,44073,44081,44085,44101,44113,44117,44129,44133,44137,44145,44149,44153,44161,44165,44173,44177,44185,44189,44193,44235,44277,44281,44285,44301,44305,44321,44325,44329,44337,44341,44345,44357,44395,44399,44403,44411,44415,44429,44439,44445,44451,44457,44463,44467,44471,44477,44481,44485,44493,44497,44515,44519,44523,44527,44543,44547,44551,44555,44559,44563,44583,44603,44607,44611,44615,44623,44631,44635,44651,44671,44691,44695,44699,44707,44715,44719,44723,44727,44739,44743,44753,44761,44778],{"__ignoreMap":63},[68,43141,43142,43144],{"class":70,"line":71},[68,43143,30593],{"class":331},[68,43145,32023],{"class":335},[68,43147,43148,43150],{"class":70,"line":92},[68,43149,30593],{"class":331},[68,43151,32030],{"class":335},[68,43153,43154,43156,43158,43160],{"class":70,"line":1387},[68,43155,30593],{"class":331},[68,43157,32041],{"class":335},[68,43159,31584],{"class":331},[68,43161,32046],{"class":335},[68,43163,43164,43166],{"class":70,"line":1402},[68,43165,30593],{"class":331},[68,43167,30596],{"class":335},[68,43169,43170,43172,43174,43176],{"class":70,"line":1408},[68,43171,30938],{"class":331},[68,43173,31616],{"class":335},[68,43175,30593],{"class":331},[68,43177,32063],{"class":335},[68,43179,43180,43182,43184,43186],{"class":70,"line":1422},[68,43181,30938],{"class":331},[68,43183,31569],{"class":335},[68,43185,30593],{"class":331},[68,43187,31574],{"class":335},[68,43189,43190,43192,43194,43196],{"class":70,"line":1428},[68,43191,30938],{"class":331},[68,43193,31599],{"class":335},[68,43195,30593],{"class":331},[68,43197,31604],{"class":335},[68,43199,43200,43202,43204,43206],{"class":70,"line":1519},[68,43201,30593],{"class":331},[68,43203,31616],{"class":335},[68,43205,31584],{"class":331},[68,43207,31621],{"class":335},[68,43209,43210,43212,43214,43216],{"class":70,"line":1525},[68,43211,30593],{"class":331},[68,43213,31633],{"class":335},[68,43215,31584],{"class":331},[68,43217,31638],{"class":335},[68,43219,43220],{"class":70,"line":1537},[68,43221,32108],{"class":393},[68,43223,43224,43226,43228,43230],{"class":70,"line":1819},[68,43225,30938],{"class":331},[68,43227,32115],{"class":335},[68,43229,30593],{"class":331},[68,43231,43232],{"class":335}," GoogLeNet, Inception\n",[68,43234,43235,43237,43239,43241],{"class":70,"line":1824},[68,43236,30938],{"class":331},[68,43238,30941],{"class":335},[68,43240,30593],{"class":331},[68,43242,30946],{"class":335},[68,43244,43245],{"class":70,"line":1830},[68,43246,2606],{"emptyLinePlaceholder":260},[68,43248,43249],{"class":70,"line":1835},[68,43250,2606],{"emptyLinePlaceholder":260},[68,43252,43253],{"class":70,"line":1849},[68,43254,32143],{"class":393},[68,43256,43257,43259,43261],{"class":70,"line":1854},[68,43258,32148],{"class":331},[68,43260,32151],{"class":74},[68,43262,32154],{"class":335},[68,43264,43265,43267,43269,43271,43273],{"class":70,"line":1860},[68,43266,32159],{"class":335},[68,43268,381],{"class":331},[68,43270,31656],{"class":335},[68,43272,31664],{"class":78},[68,43274,31667],{"class":335},[68,43276,43277,43279,43281,43283],{"class":70,"line":1881},[68,43278,32172],{"class":5421},[68,43280,381],{"class":331},[68,43282,31677],{"class":82},[68,43284,31667],{"class":335},[68,43286,43287,43289,43291,43293,43295,43297,43299],{"class":70,"line":1886},[68,43288,32183],{"class":5421},[68,43290,381],{"class":331},[68,43292,31694],{"class":335},[68,43294,31697],{"class":5421},[68,43296,381],{"class":331},[68,43298,35650],{"class":82},[68,43300,31705],{"class":335},[68,43302,43303,43305,43307,43309],{"class":70,"line":1900},[68,43304,32200],{"class":5421},[68,43306,381],{"class":331},[68,43308,31677],{"class":82},[68,43310,342],{"class":335},[68,43312,43313,43315,43317,43319,43321,43323,43325,43327,43329,43331,43333,43335,43337,43339,43341],{"class":70,"line":1905},[68,43314,32211],{"class":335},[68,43316,381],{"class":331},[68,43318,32216],{"class":335},[68,43320,32219],{"class":82},[68,43322,336],{"class":335},[68,43324,32224],{"class":82},[68,43326,788],{"class":331},[68,43328,7563],{"class":82},[68,43330,32231],{"class":335},[68,43332,32219],{"class":82},[68,43334,336],{"class":335},[68,43336,32238],{"class":82},[68,43338,788],{"class":331},[68,43340,7563],{"class":82},[68,43342,32245],{"class":335},[68,43344,43345,43347,43349,43351,43353,43355],{"class":70,"line":1934},[68,43346,32250],{"class":335},[68,43348,381],{"class":331},[68,43350,32255],{"class":335},[68,43352,31738],{"class":5421},[68,43354,381],{"class":331},[68,43356,31743],{"class":335},[68,43358,43359,43361,43363,43365],{"class":70,"line":1939},[68,43360,32266],{"class":5421},[68,43362,381],{"class":331},[68,43364,531],{"class":82},[68,43366,31667],{"class":335},[68,43368,43369,43371,43373,43375],{"class":70,"line":1956},[68,43370,32278],{"class":5421},[68,43372,381],{"class":331},[68,43374,31677],{"class":82},[68,43376,31667],{"class":335},[68,43378,43379],{"class":70,"line":1961},[68,43380,32289],{"class":393},[68,43382,43383,43385,43387,43389],{"class":70,"line":1966},[68,43384,32294],{"class":5421},[68,43386,381],{"class":331},[68,43388,728],{"class":82},[68,43390,342],{"class":335},[68,43392,43393,43395,43397,43399,43401,43403],{"class":70,"line":1971},[68,43394,32305],{"class":335},[68,43396,381],{"class":331},[68,43398,31735],{"class":335},[68,43400,31738],{"class":5421},[68,43402,381],{"class":331},[68,43404,32316],{"class":335},[68,43406,43407,43409,43411,43413],{"class":70,"line":1985},[68,43408,32321],{"class":5421},[68,43410,381],{"class":331},[68,43412,531],{"class":82},[68,43414,31667],{"class":335},[68,43416,43417,43419,43421,43423],{"class":70,"line":1990},[68,43418,32332],{"class":5421},[68,43420,381],{"class":331},[68,43422,31677],{"class":82},[68,43424,31667],{"class":335},[68,43426,43427,43429,43431,43433],{"class":70,"line":2783},[68,43428,32343],{"class":5421},[68,43430,381],{"class":331},[68,43432,728],{"class":82},[68,43434,342],{"class":335},[68,43436,43437,43439],{"class":70,"line":2797},[68,43438,4296],{"class":331},[68,43440,32356],{"class":335},[68,43442,43443],{"class":70,"line":2805},[68,43444,2606],{"emptyLinePlaceholder":260},[68,43446,43447],{"class":70,"line":2810},[68,43448,32365],{"class":393},[68,43450,43451],{"class":70,"line":2816},[68,43452,32370],{"class":393},[68,43454,43455],{"class":70,"line":2822},[68,43456,2606],{"emptyLinePlaceholder":260},[68,43458,43459],{"class":70,"line":2827},[68,43460,32379],{"class":393},[68,43462,43463,43465,43467],{"class":70,"line":8153},[68,43464,32148],{"class":331},[68,43466,32386],{"class":74},[68,43468,32389],{"class":335},[68,43470,43471,43473,43475,43477,43479,43481,43483,43485,43487],{"class":70,"line":8177},[68,43472,31438],{"class":335},[68,43474,381],{"class":331},[68,43476,30652],{"class":335},[68,43478,31445],{"class":78},[68,43480,1911],{"class":331},[68,43482,31450],{"class":335},[68,43484,1908],{"class":331},[68,43486,32408],{"class":78},[68,43488,342],{"class":335},[68,43490,43491],{"class":70,"line":8182},[68,43492,2606],{"emptyLinePlaceholder":260},[68,43494,43495],{"class":70,"line":8188},[68,43496,2606],{"emptyLinePlaceholder":260},[68,43498,43499],{"class":70,"line":8215},[68,43500,32423],{"class":393},[68,43502,43503],{"class":70,"line":8220},[68,43504,32428],{"class":393},[68,43506,43507],{"class":70,"line":8226},[68,43508,32433],{"class":393},[68,43510,43511,43513,43515,43517,43519,43521,43523],{"class":70,"line":8238},[68,43512,32438],{"class":335},[68,43514,381],{"class":331},[68,43516,32443],{"class":335},[68,43518,32446],{"class":5421},[68,43520,381],{"class":331},[68,43522,32451],{"class":82},[68,43524,342],{"class":335},[68,43526,43527],{"class":70,"line":8250},[68,43528,2606],{"emptyLinePlaceholder":260},[68,43530,43531],{"class":70,"line":8262},[68,43532,32462],{"class":393},[68,43534,43535,43537,43539],{"class":70,"line":9921},[68,43536,32467],{"class":335},[68,43538,381],{"class":331},[68,43540,32472],{"class":335},[68,43542,43543],{"class":70,"line":9946},[68,43544,2606],{"emptyLinePlaceholder":260},[68,43546,43547],{"class":70,"line":9969},[68,43548,32481],{"class":393},[68,43550,43551,43553,43555],{"class":70,"line":9993},[68,43552,31490],{"class":335},[68,43554,381],{"class":331},[68,43556,32490],{"class":335},[68,43558,43559],{"class":70,"line":9998},[68,43560,32495],{"class":393},[68,43562,43563],{"class":70,"line":10003},[68,43564,32500],{"class":393},[68,43566,43567],{"class":70,"line":10008},[68,43568,32505],{"class":393},[68,43570,43571,43573,43575],{"class":70,"line":10017},[68,43572,32510],{"class":335},[68,43574,381],{"class":331},[68,43576,32515],{"class":335},[68,43578,43579],{"class":70,"line":10022},[68,43580,2606],{"emptyLinePlaceholder":260},[68,43582,43583],{"class":70,"line":10028},[68,43584,2606],{"emptyLinePlaceholder":260},[68,43586,43587],{"class":70,"line":10049},[68,43588,32528],{"class":393},[68,43590,43591],{"class":70,"line":10055},[68,43592,32533],{"class":393},[68,43594,43595,43597,43599],{"class":70,"line":10069},[68,43596,32538],{"class":335},[68,43598,381],{"class":331},[68,43600,32543],{"class":82},[68,43602,43603],{"class":70,"line":10075},[68,43604,32548],{"class":393},[68,43606,43607,43609,43611],{"class":70,"line":10102},[68,43608,32553],{"class":335},[68,43610,381],{"class":331},[68,43612,32558],{"class":335},[68,43614,43615],{"class":70,"line":10111},[68,43616,32563],{"class":393},[68,43618,43619,43621,43623],{"class":70,"line":10117},[68,43620,32568],{"class":335},[68,43622,381],{"class":331},[68,43624,32558],{"class":335},[68,43626,43627],{"class":70,"line":10125},[68,43628,32577],{"class":393},[68,43630,43631,43633,43635],{"class":70,"line":10130},[68,43632,32582],{"class":335},[68,43634,381],{"class":331},[68,43636,32558],{"class":335},[68,43638,43639],{"class":70,"line":16809},[68,43640,32591],{"class":393},[68,43642,43643,43645,43647],{"class":70,"line":16815},[68,43644,32596],{"class":335},[68,43646,381],{"class":331},[68,43648,32558],{"class":335},[68,43650,43651],{"class":70,"line":16838},[68,43652,2606],{"emptyLinePlaceholder":260},[68,43654,43655],{"class":70,"line":16844},[68,43656,32609],{"class":393},[68,43658,43659,43661,43663],{"class":70,"line":16867},[68,43660,32614],{"class":335},[68,43662,381],{"class":331},[68,43664,32619],{"class":335},[68,43666,43667],{"class":70,"line":16881},[68,43668,2606],{"emptyLinePlaceholder":260},[68,43670,43671],{"class":70,"line":16901},[68,43672,2606],{"emptyLinePlaceholder":260},[68,43674,43675],{"class":70,"line":16907},[68,43676,32632],{"class":393},[68,43678,43679,43681,43683,43685,43687],{"class":70,"line":16918},[68,43680,3407],{"class":331},[68,43682,32639],{"class":335},[68,43684,26247],{"class":331},[68,43686,32644],{"class":82},[68,43688,32647],{"class":335},[68,43690,43691,43693,43695,43697,43699,43701,43703,43705,43707,43709,43711],{"class":70,"line":16941},[68,43692,32652],{"class":82},[68,43694,336],{"class":335},[68,43696,32657],{"class":78},[68,43698,32660],{"class":82},[68,43700,917],{"class":78},[68,43702,32660],{"class":82},[68,43704,584],{"class":78},[68,43706,32669],{"class":335},[68,43708,865],{"class":331},[68,43710,551],{"class":82},[68,43712,30698],{"class":335},[68,43714,43715,43717,43719,43721,43723,43725],{"class":70,"line":16963},[68,43716,32652],{"class":82},[68,43718,336],{"class":335},[68,43720,32684],{"class":78},[68,43722,788],{"class":331},[68,43724,779],{"class":82},[68,43726,342],{"class":335},[68,43728,43729],{"class":70,"line":16968},[68,43730,2606],{"emptyLinePlaceholder":260},[68,43732,43733],{"class":70,"line":16974},[68,43734,32699],{"class":393},[68,43736,43737],{"class":70,"line":16988},[68,43738,32704],{"class":393},[68,43740,43741,43743,43745],{"class":70,"line":17001},[68,43742,32709],{"class":335},[68,43744,381],{"class":331},[68,43746,32543],{"class":82},[68,43748,43749],{"class":70,"line":17006},[68,43750,32718],{"class":393},[68,43752,43753,43755,43757],{"class":70,"line":17020},[68,43754,32723],{"class":335},[68,43756,381],{"class":331},[68,43758,3291],{"class":82},[68,43760,43761],{"class":70,"line":17025},[68,43762,32732],{"class":393},[68,43764,43765,43767,43769],{"class":70,"line":17031},[68,43766,32737],{"class":335},[68,43768,381],{"class":331},[68,43770,32543],{"class":82},[68,43772,43773],{"class":70,"line":17036},[68,43774,32746],{"class":393},[68,43776,43777,43779,43781],{"class":70,"line":17050},[68,43778,32751],{"class":335},[68,43780,381],{"class":331},[68,43782,3291],{"class":82},[68,43784,43785],{"class":70,"line":17055},[68,43786,32760],{"class":393},[68,43788,43789,43791,43793],{"class":70,"line":17060},[68,43790,32765],{"class":335},[68,43792,381],{"class":331},[68,43794,3291],{"class":82},[68,43796,43797],{"class":70,"line":17074},[68,43798,32774],{"class":393},[68,43800,43801,43803,43805],{"class":70,"line":17086},[68,43802,32779],{"class":335},[68,43804,381],{"class":331},[68,43806,3291],{"class":82},[68,43808,43809],{"class":70,"line":17091},[68,43810,32788],{"class":393},[68,43812,43813,43815,43817,43819,43821],{"class":70,"line":17104},[68,43814,3609],{"class":331},[68,43816,31802],{"class":335},[68,43818,26247],{"class":331},[68,43820,31807],{"class":82},[68,43822,32801],{"class":335},[68,43824,43825],{"class":70,"line":17109},[68,43826,32806],{"class":393},[68,43828,43829,43831,43833],{"class":70,"line":17114},[68,43830,32811],{"class":335},[68,43832,381],{"class":331},[68,43834,32816],{"class":335},[68,43836,43837],{"class":70,"line":17119},[68,43838,32821],{"class":393},[68,43840,43841,43843,43845],{"class":70,"line":17132},[68,43842,32826],{"class":335},[68,43844,381],{"class":331},[68,43846,32831],{"class":335},[68,43848,43849],{"class":70,"line":17137},[68,43850,32837],{"class":393},[68,43852,43853],{"class":70,"line":32834},[68,43854,32843],{"class":335},[68,43856,43857],{"class":70,"line":32840},[68,43858,32849],{"class":393},[68,43860,43861],{"class":70,"line":32846},[68,43862,32855],{"class":393},[68,43864,43865,43867,43869],{"class":70,"line":32852},[68,43866,32861],{"class":335},[68,43868,381],{"class":331},[68,43870,32866],{"class":335},[68,43872,43873],{"class":70,"line":32858},[68,43874,32872],{"class":393},[68,43876,43877,43879,43881,43883,43885,43887,43889],{"class":70,"line":32869},[68,43878,32878],{"class":335},[68,43880,381],{"class":331},[68,43882,32883],{"class":335},[68,43884,32886],{"class":5421},[68,43886,381],{"class":331},[68,43888,551],{"class":82},[68,43890,342],{"class":335},[68,43892,43893],{"class":70,"line":32875},[68,43894,32898],{"class":393},[68,43896,43897,43899,43901],{"class":70,"line":32895},[68,43898,32904],{"class":335},[68,43900,381],{"class":331},[68,43902,32909],{"class":335},[68,43904,43905],{"class":70,"line":32901},[68,43906,32915],{"class":393},[68,43908,43909],{"class":70,"line":32912},[68,43910,32921],{"class":335},[68,43912,43913],{"class":70,"line":32918},[68,43914,32927],{"class":393},[68,43916,43917],{"class":70,"line":32924},[68,43918,32933],{"class":335},[68,43920,43921],{"class":70,"line":32930},[68,43922,32939],{"class":393},[68,43924,43925],{"class":70,"line":32936},[68,43926,32945],{"class":335},[68,43928,43929],{"class":70,"line":32942},[68,43930,32951],{"class":393},[68,43932,43933,43935,43937,43939,43941,43943,43945],{"class":70,"line":32948},[68,43934,32957],{"class":335},[68,43936,9682],{"class":331},[68,43938,32962],{"class":335},[68,43940,788],{"class":331},[68,43942,32967],{"class":335},[68,43944,525],{"class":82},[68,43946,342],{"class":335},[68,43948,43949],{"class":70,"line":32954},[68,43950,32977],{"class":393},[68,43952,43953,43955,43957,43959,43961],{"class":70,"line":32974},[68,43954,32983],{"class":335},[68,43956,9682],{"class":331},[68,43958,32988],{"class":335},[68,43960,3155],{"class":331},[68,43962,32993],{"class":335},[68,43964,43965],{"class":70,"line":32980},[68,43966,32999],{"class":393},[68,43968,43969,43971,43973,43975,43977],{"class":70,"line":32996},[68,43970,33005],{"class":335},[68,43972,9682],{"class":331},[68,43974,32967],{"class":335},[68,43976,525],{"class":82},[68,43978,342],{"class":335},[68,43980,43981],{"class":70,"line":33002},[68,43982,33019],{"class":393},[68,43984,43985,43987,43989,43991,43993],{"class":70,"line":33016},[68,43986,3609],{"class":331},[68,43988,33027],{"class":335},[68,43990,26247],{"class":331},[68,43992,31807],{"class":82},[68,43994,33034],{"class":335},[68,43996,43997],{"class":70,"line":33022},[68,43998,33040],{"class":393},[68,44000,44001,44003,44005],{"class":70,"line":33037},[68,44002,32811],{"class":335},[68,44004,381],{"class":331},[68,44006,32816],{"class":335},[68,44008,44009],{"class":70,"line":33043},[68,44010,33055],{"class":393},[68,44012,44013,44015,44017],{"class":70,"line":33052},[68,44014,32826],{"class":335},[68,44016,381],{"class":331},[68,44018,32831],{"class":335},[68,44020,44021],{"class":70,"line":33058},[68,44022,33070],{"class":393},[68,44024,44025],{"class":70,"line":33067},[68,44026,33076],{"class":335},[68,44028,44029],{"class":70,"line":33073},[68,44030,36557],{"class":393},[68,44032,44033,44035],{"class":70,"line":33079},[68,44034,33082],{"class":331},[68,44036,33085],{"class":335},[68,44038,44039],{"class":70,"line":33088},[68,44040,33091],{"class":393},[68,44042,44043,44045,44047],{"class":70,"line":33094},[68,44044,36572],{"class":335},[68,44046,381],{"class":331},[68,44048,32866],{"class":335},[68,44050,44051],{"class":70,"line":33105},[68,44052,33108],{"class":393},[68,44054,44055,44057,44059,44061,44063,44065,44067],{"class":70,"line":33111},[68,44056,36585],{"class":335},[68,44058,381],{"class":331},[68,44060,32883],{"class":335},[68,44062,32886],{"class":5421},[68,44064,381],{"class":331},[68,44066,551],{"class":82},[68,44068,342],{"class":335},[68,44070,44071],{"class":70,"line":33130},[68,44072,33133],{"class":393},[68,44074,44075,44077,44079],{"class":70,"line":33136},[68,44076,36606],{"class":335},[68,44078,381],{"class":331},[68,44080,32909],{"class":335},[68,44082,44083],{"class":70,"line":33147},[68,44084,33150],{"class":393},[68,44086,44087,44089,44091,44093,44095,44097,44099],{"class":70,"line":33153},[68,44088,36619],{"class":335},[68,44090,9682],{"class":331},[68,44092,36624],{"class":335},[68,44094,788],{"class":331},[68,44096,32967],{"class":335},[68,44098,525],{"class":82},[68,44100,342],{"class":335},[68,44102,44103,44105,44107,44109,44111],{"class":70,"line":33173},[68,44104,36637],{"class":335},[68,44106,9682],{"class":331},[68,44108,32988],{"class":335},[68,44110,3155],{"class":331},[68,44112,32993],{"class":335},[68,44114,44115],{"class":70,"line":33189},[68,44116,36650],{"class":393},[68,44118,44119,44121,44123,44125,44127],{"class":70,"line":33195},[68,44120,36655],{"class":335},[68,44122,9682],{"class":331},[68,44124,32967],{"class":335},[68,44126,525],{"class":82},[68,44128,342],{"class":335},[68,44130,44131],{"class":70,"line":33209},[68,44132,33212],{"class":393},[68,44134,44135],{"class":70,"line":33215},[68,44136,33218],{"class":393},[68,44138,44139,44141,44143],{"class":70,"line":33221},[68,44140,33224],{"class":335},[68,44142,917],{"class":331},[68,44144,33229],{"class":335},[68,44146,44147],{"class":70,"line":33232},[68,44148,33235],{"class":393},[68,44150,44151],{"class":70,"line":33238},[68,44152,33241],{"class":393},[68,44154,44155,44157,44159],{"class":70,"line":33244},[68,44156,33247],{"class":335},[68,44158,917],{"class":331},[68,44160,33229],{"class":335},[68,44162,44163],{"class":70,"line":33254},[68,44164,33257],{"class":393},[68,44166,44167,44169,44171],{"class":70,"line":33260},[68,44168,33263],{"class":335},[68,44170,917],{"class":331},[68,44172,33268],{"class":335},[68,44174,44175],{"class":70,"line":33271},[68,44176,33274],{"class":393},[68,44178,44179,44181,44183],{"class":70,"line":33277},[68,44180,33280],{"class":335},[68,44182,917],{"class":331},[68,44184,33268],{"class":335},[68,44186,44187],{"class":70,"line":33287},[68,44188,2606],{"emptyLinePlaceholder":260},[68,44190,44191],{"class":70,"line":33292},[68,44192,33295],{"class":393},[68,44194,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231,44233],{"class":70,"line":33298},[68,44196,32652],{"class":82},[68,44198,336],{"class":335},[68,44200,3798],{"class":78},[68,44202,32660],{"class":82},[68,44204,33309],{"class":78},[68,44206,1229],{"class":82},[68,44208,33314],{"class":331},[68,44210,1279],{"class":82},[68,44212,33319],{"class":78},[68,44214,1229],{"class":82},[68,44216,33314],{"class":331},[68,44218,1279],{"class":82},[68,44220,3798],{"class":78},[68,44222,33330],{"class":335},[68,44224,865],{"class":331},[68,44226,551],{"class":82},[68,44228,33337],{"class":335},[68,44230,865],{"class":331},[68,44232,551],{"class":82},[68,44234,33344],{"class":335},[68,44236,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271,44273,44275],{"class":70,"line":33347},[68,44238,32652],{"class":82},[68,44240,336],{"class":335},[68,44242,3798],{"class":78},[68,44244,32660],{"class":82},[68,44246,33358],{"class":78},[68,44248,1229],{"class":82},[68,44250,33314],{"class":331},[68,44252,1279],{"class":82},[68,44254,33367],{"class":78},[68,44256,1229],{"class":82},[68,44258,33314],{"class":331},[68,44260,1279],{"class":82},[68,44262,3798],{"class":78},[68,44264,33378],{"class":335},[68,44266,865],{"class":331},[68,44268,551],{"class":82},[68,44270,33385],{"class":335},[68,44272,865],{"class":331},[68,44274,551],{"class":82},[68,44276,33344],{"class":335},[68,44278,44279],{"class":70,"line":33394},[68,44280,2606],{"emptyLinePlaceholder":260},[68,44282,44283],{"class":70,"line":33399},[68,44284,33402],{"class":393},[68,44286,44287,44289,44291,44293,44295,44297,44299],{"class":70,"line":33405},[68,44288,2703],{"class":331},[68,44290,33410],{"class":335},[68,44292,865],{"class":331},[68,44294,551],{"class":82},[68,44296,1273],{"class":335},[68,44298,1293],{"class":331},[68,44300,33421],{"class":335},[68,44302,44303],{"class":70,"line":33424},[68,44304,33427],{"class":393},[68,44306,44307,44309,44311,44313,44315,44317,44319],{"class":70,"line":33430},[68,44308,33433],{"class":335},[68,44310,375],{"class":82},[68,44312,381],{"class":331},[68,44314,33440],{"class":335},[68,44316,865],{"class":331},[68,44318,551],{"class":82},[68,44320,33447],{"class":335},[68,44322,44323],{"class":70,"line":33450},[68,44324,33453],{"class":393},[68,44326,44327],{"class":70,"line":33456},[68,44328,33459],{"class":393},[68,44330,44331,44333,44335],{"class":70,"line":33462},[68,44332,33465],{"class":335},[68,44334,381],{"class":331},[68,44336,32515],{"class":335},[68,44338,44339],{"class":70,"line":33472},[68,44340,2606],{"emptyLinePlaceholder":260},[68,44342,44343],{"class":70,"line":33477},[68,44344,33480],{"class":393},[68,44346,44347,44349,44351,44353,44355],{"class":70,"line":33483},[68,44348,33486],{"class":335},[68,44350,381],{"class":331},[68,44352,33491],{"class":335},[68,44354,865],{"class":331},[68,44356,33496],{"class":335},[68,44358,44359,44361,44363,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393],{"class":70,"line":33499},[68,44360,32652],{"class":82},[68,44362,336],{"class":335},[68,44364,33506],{"class":78},[68,44366,1229],{"class":82},[68,44368,33511],{"class":331},[68,44370,1279],{"class":82},[68,44372,877],{"class":78},[68,44374,1229],{"class":82},[68,44376,33511],{"class":331},[68,44378,1279],{"class":82},[68,44380,33524],{"class":78},[68,44382,33527],{"class":335},[68,44384,33530],{"class":331},[68,44386,1240],{"class":82},[68,44388,33535],{"class":335},[68,44390,661],{"class":331},[68,44392,1240],{"class":82},[68,44394,30698],{"class":335},[68,44396,44397],{"class":70,"line":33544},[68,44398,36934],{"class":393},[68,44400,44401],{"class":70,"line":33550},[68,44402,36939],{"class":393},[68,44404,44405,44407,44409],{"class":70,"line":33556},[68,44406,36944],{"class":335},[68,44408,33568],{"class":78},[68,44410,342],{"class":335},[68,44412,44413],{"class":70,"line":33562},[68,44414,33588],{"class":393},[68,44416,44417,44419,44421,44423,44425,44427],{"class":70,"line":33573},[68,44418,33594],{"class":335},[68,44420,381],{"class":331},[68,44422,33599],{"class":335},[68,44424,33602],{"class":5421},[68,44426,381],{"class":331},[68,44428,1753],{"class":335},[68,44430,44431,44433,44435,44437],{"class":70,"line":33579},[68,44432,33612],{"class":78},[68,44434,1192],{"class":335},[68,44436,33617],{"class":82},[68,44438,33620],{"class":335},[68,44440,44441,44443],{"class":70,"line":33585},[68,44442,33626],{"class":78},[68,44444,33629],{"class":335},[68,44446,44447,44449],{"class":70,"line":33591},[68,44448,33635],{"class":78},[68,44450,33638],{"class":335},[68,44452,44453,44455],{"class":70,"line":33609},[68,44454,33644],{"class":78},[68,44456,33647],{"class":335},[68,44458,44459,44461],{"class":70,"line":33623},[68,44460,33653],{"class":78},[68,44462,33656],{"class":335},[68,44464,44465],{"class":70,"line":33632},[68,44466,33662],{"class":335},[68,44468,44469],{"class":70,"line":33641},[68,44470,33668],{"class":393},[68,44472,44473,44475],{"class":70,"line":33650},[68,44474,4296],{"class":331},[68,44476,33676],{"class":335},[68,44478,44479],{"class":70,"line":33659},[68,44480,2606],{"emptyLinePlaceholder":260},[68,44482,44483],{"class":70,"line":33665},[68,44484,33687],{"class":393},[68,44486,44487,44489,44491],{"class":70,"line":33671},[68,44488,32148],{"class":331},[68,44490,33695],{"class":74},[68,44492,33698],{"class":335},[68,44494,44495],{"class":70,"line":33679},[68,44496,33704],{"class":393},[68,44498,44499,44501,44503,44505,44507,44509,44511,44513],{"class":70,"line":33684},[68,44500,33710],{"class":335},[68,44502,31894],{"class":5421},[68,44504,381],{"class":331},[68,44506,336],{"class":335},[68,44508,831],{"class":82},[68,44510,711],{"class":335},[68,44512,626],{"class":82},[68,44514,30698],{"class":335},[68,44516,44517],{"class":70,"line":33690},[68,44518,33730],{"class":393},[68,44520,44521],{"class":70,"line":33701},[68,44522,33736],{"class":393},[68,44524,44525],{"class":70,"line":33707},[68,44526,33742],{"class":393},[68,44528,44529,44531,44533,44535,44537,44539,44541],{"class":70,"line":33727},[68,44530,31928],{"class":335},[68,44532,551],{"class":82},[68,44534,711],{"class":335},[68,44536,412],{"class":82},[68,44538,711],{"class":335},[68,44540,551],{"class":82},[68,44542,342],{"class":335},[68,44544,44545],{"class":70,"line":33733},[68,44546,33765],{"class":393},[68,44548,44549],{"class":70,"line":33739},[68,44550,33771],{"class":393},[68,44552,44553],{"class":70,"line":33745},[68,44554,33777],{"class":393},[68,44556,44557],{"class":70,"line":33762},[68,44558,33783],{"class":393},[68,44560,44561],{"class":70,"line":33768},[68,44562,33789],{"class":393},[68,44564,44565,44567,44569,44571,44573,44575,44577,44579,44581],{"class":70,"line":33774},[68,44566,33795],{"class":335},[68,44568,33798],{"class":78},[68,44570,33801],{"class":335},[68,44572,33804],{"class":78},[68,44574,711],{"class":335},[68,44576,33809],{"class":5421},[68,44578,381],{"class":331},[68,44580,33814],{"class":78},[68,44582,342],{"class":335},[68,44584,44585,44587,44589,44591,44593,44595,44597,44599,44601],{"class":70,"line":33780},[68,44586,33795],{"class":335},[68,44588,33798],{"class":78},[68,44590,33826],{"class":335},[68,44592,33829],{"class":78},[68,44594,711],{"class":335},[68,44596,33809],{"class":5421},[68,44598,381],{"class":331},[68,44600,33838],{"class":78},[68,44602,342],{"class":335},[68,44604,44605],{"class":70,"line":33786},[68,44606,33846],{"class":393},[68,44608,44609],{"class":70,"line":33792},[68,44610,33852],{"class":335},[68,44612,44613],{"class":70,"line":33819},[68,44614,33858],{"class":393},[68,44616,44617,44619,44621],{"class":70,"line":33843},[68,44618,33864],{"class":335},[68,44620,33867],{"class":78},[68,44622,342],{"class":335},[68,44624,44625,44627,44629],{"class":70,"line":33849},[68,44626,33875],{"class":335},[68,44628,33878],{"class":78},[68,44630,342],{"class":335},[68,44632,44633],{"class":70,"line":33855},[68,44634,33886],{"class":393},[68,44636,44637,44639,44641,44643,44645,44647,44649],{"class":70,"line":33861},[68,44638,31928],{"class":335},[68,44640,551],{"class":82},[68,44642,711],{"class":335},[68,44644,412],{"class":82},[68,44646,711],{"class":335},[68,44648,412],{"class":82},[68,44650,342],{"class":335},[68,44652,44653,44655,44657,44659,44661,44663,44665,44667,44669],{"class":70,"line":33872},[68,44654,33795],{"class":335},[68,44656,33798],{"class":78},[68,44658,33913],{"class":335},[68,44660,33804],{"class":78},[68,44662,711],{"class":335},[68,44664,33809],{"class":5421},[68,44666,381],{"class":331},[68,44668,33924],{"class":78},[68,44670,342],{"class":335},[68,44672,44673,44675,44677,44679,44681,44683,44685,44687,44689],{"class":70,"line":33883},[68,44674,33795],{"class":335},[68,44676,33798],{"class":78},[68,44678,33936],{"class":335},[68,44680,33829],{"class":78},[68,44682,711],{"class":335},[68,44684,33809],{"class":5421},[68,44686,381],{"class":331},[68,44688,33947],{"class":78},[68,44690,342],{"class":335},[68,44692,44693],{"class":70,"line":33889},[68,44694,33955],{"class":393},[68,44696,44697],{"class":70,"line":33906},[68,44698,33852],{"class":335},[68,44700,44701,44703,44705],{"class":70,"line":33929},[68,44702,33864],{"class":335},[68,44704,33798],{"class":78},[68,44706,342],{"class":335},[68,44708,44709,44711,44713],{"class":70,"line":33952},[68,44710,33875],{"class":335},[68,44712,33977],{"class":78},[68,44714,342],{"class":335},[68,44716,44717],{"class":70,"line":33958},[68,44718,33985],{"class":335},[68,44720,44721],{"class":70,"line":33963},[68,44722,2606],{"emptyLinePlaceholder":260},[68,44724,44725],{"class":70,"line":33972},[68,44726,33996],{"class":393},[68,44728,44729,44731,44733,44735,44737],{"class":70,"line":33982},[68,44730,1738],{"class":331},[68,44732,31421],{"class":82},[68,44734,3155],{"class":331},[68,44736,31426],{"class":78},[68,44738,3945],{"class":335},[68,44740,44741],{"class":70,"line":33988},[68,44742,34015],{"class":393},[68,44744,44745,44748,44750],{"class":70,"line":33993},[68,44746,44747],{"class":335},"    GoogLeNet",[68,44749,381],{"class":331},[68,44751,44752],{"class":335},"GoogLeNet(Inception)\n",[68,44754,44755,44757,44759],{"class":70,"line":33999},[68,44756,34032],{"class":335},[68,44758,381],{"class":331},[68,44760,34037],{"class":335},[68,44762,44763,44765,44767,44770,44772,44774,44776],{"class":70,"line":34012},[68,44764,33594],{"class":335},[68,44766,381],{"class":331},[68,44768,44769],{"class":335},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[68,44771,34050],{"class":5421},[68,44773,381],{"class":331},[68,44775,1284],{"class":82},[68,44777,342],{"class":335},[68,44779,44780],{"class":70,"line":34018},[68,44781,34062],{"class":335},[23,44783,44784],{"start":1387},[26,44785,40775],{},[58,44787,44789],{"className":30579,"code":44788,"language":30581,"meta":63,"style":63},"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",[65,44790,44791,44797,44807,44817,44821,44831,44842,44846,44850,44854,44862,44878,44888,44904,44914,44928,44932,44942,44952,44962,44968,44972,44976,44984,44988,45004,45012,45016,45020,45028,45036,45040,45044,45048,45052,45058,45062,45072,45080,45088,45092,45096,45100,45108,45112,45128,45132,45136,45140,45152,45156,45168,45172,45176,45188,45192,45202,45206,45210,45222,45226,45234,45238,45242,45250,45254,45262,45266,45270,45274,45278,45282,45298,45306,45310,45314,45362,45368,45372,45382,45390,45398,45402,45406,45410,45414,45422,45426,45442,45446,45454,45462],{"__ignoreMap":63},[68,44792,44793,44795],{"class":70,"line":71},[68,44794,30593],{"class":331},[68,44796,30596],{"class":335},[68,44798,44799,44801,44803,44805],{"class":70,"line":92},[68,44800,30593],{"class":331},[68,44802,31616],{"class":335},[68,44804,31584],{"class":331},[68,44806,31621],{"class":335},[68,44808,44809,44811,44813,44815],{"class":70,"line":1387},[68,44810,30938],{"class":331},[68,44812,31599],{"class":335},[68,44814,30593],{"class":331},[68,44816,31604],{"class":335},[68,44818,44819],{"class":70,"line":1402},[68,44820,34123],{"class":393},[68,44822,44823,44825,44827,44829],{"class":70,"line":1408},[68,44824,30938],{"class":331},[68,44826,31569],{"class":335},[68,44828,30593],{"class":331},[68,44830,31574],{"class":335},[68,44832,44833,44835,44837,44839],{"class":70,"line":1422},[68,44834,30938],{"class":331},[68,44836,32115],{"class":335},[68,44838,30593],{"class":331},[68,44840,44841],{"class":335}," GoogLeNet,Inception\n",[68,44843,44844],{"class":70,"line":1428},[68,44845,2606],{"emptyLinePlaceholder":260},[68,44847,44848],{"class":70,"line":1519},[68,44849,2606],{"emptyLinePlaceholder":260},[68,44851,44852],{"class":70,"line":1525},[68,44853,34152],{"class":393},[68,44855,44856,44858,44860],{"class":70,"line":1537},[68,44857,32148],{"class":331},[68,44859,34159],{"class":74},[68,44861,32154],{"class":335},[68,44863,44864,44866,44868,44870,44872,44874,44876],{"class":70,"line":1819},[68,44865,34166],{"class":335},[68,44867,381],{"class":331},[68,44869,31656],{"class":335},[68,44871,31659],{"class":5421},[68,44873,381],{"class":331},[68,44875,31664],{"class":78},[68,44877,31667],{"class":335},[68,44879,44880,44882,44884,44886],{"class":70,"line":1824},[68,44881,34183],{"class":5421},[68,44883,381],{"class":331},[68,44885,34188],{"class":82},[68,44887,31667],{"class":335},[68,44889,44890,44892,44894,44896,44898,44900,44902],{"class":70,"line":1830},[68,44891,34195],{"class":5421},[68,44893,381],{"class":331},[68,44895,31694],{"class":335},[68,44897,31697],{"class":5421},[68,44899,381],{"class":331},[68,44901,35650],{"class":82},[68,44903,31705],{"class":335},[68,44905,44906,44908,44910,44912],{"class":70,"line":1835},[68,44907,34212],{"class":5421},[68,44909,381],{"class":331},[68,44911,31677],{"class":82},[68,44913,342],{"class":335},[68,44915,44916,44918,44920,44922,44924,44926],{"class":70,"line":1849},[68,44917,34223],{"class":335},[68,44919,381],{"class":331},[68,44921,31735],{"class":335},[68,44923,31738],{"class":5421},[68,44925,381],{"class":331},[68,44927,34234],{"class":335},[68,44929,44930],{"class":70,"line":1854},[68,44931,34239],{"class":393},[68,44933,44934,44936,44938,44940],{"class":70,"line":1860},[68,44935,34244],{"class":5421},[68,44937,381],{"class":331},[68,44939,551],{"class":82},[68,44941,31667],{"class":335},[68,44943,44944,44946,44948,44950],{"class":70,"line":1881},[68,44945,34255],{"class":5421},[68,44947,381],{"class":331},[68,44949,31677],{"class":82},[68,44951,31667],{"class":335},[68,44953,44954,44956,44958,44960],{"class":70,"line":1886},[68,44955,34266],{"class":5421},[68,44957,381],{"class":331},[68,44959,525],{"class":82},[68,44961,342],{"class":335},[68,44963,44964,44966],{"class":70,"line":1900},[68,44965,4296],{"class":331},[68,44967,34279],{"class":335},[68,44969,44970],{"class":70,"line":1905},[68,44971,2606],{"emptyLinePlaceholder":260},[68,44973,44974],{"class":70,"line":1934},[68,44975,34288],{"class":393},[68,44977,44978,44980,44982],{"class":70,"line":1939},[68,44979,32148],{"class":331},[68,44981,34295],{"class":74},[68,44983,34298],{"class":335},[68,44985,44986],{"class":70,"line":1956},[68,44987,34303],{"class":393},[68,44989,44990,44992,44994,44996,44998,45000,45002],{"class":70,"line":1961},[68,44991,31438],{"class":335},[68,44993,381],{"class":331},[68,44995,31445],{"class":78},[68,44997,1911],{"class":331},[68,44999,31450],{"class":335},[68,45001,1908],{"class":331},[68,45003,34320],{"class":78},[68,45005,45006,45008,45010],{"class":70,"line":1966},[68,45007,31490],{"class":335},[68,45009,381],{"class":331},[68,45011,32490],{"class":335},[68,45013,45014],{"class":70,"line":1971},[68,45015,2606],{"emptyLinePlaceholder":260},[68,45017,45018],{"class":70,"line":1985},[68,45019,34337],{"class":393},[68,45021,45022,45024,45026],{"class":70,"line":1990},[68,45023,34342],{"class":335},[68,45025,381],{"class":331},[68,45027,32543],{"class":82},[68,45029,45030,45032,45034],{"class":70,"line":2783},[68,45031,34351],{"class":335},[68,45033,381],{"class":331},[68,45035,3291],{"class":82},[68,45037,45038],{"class":70,"line":2797},[68,45039,2606],{"emptyLinePlaceholder":260},[68,45041,45042],{"class":70,"line":2805},[68,45043,34364],{"class":393},[68,45045,45046],{"class":70,"line":2810},[68,45047,34369],{"class":393},[68,45049,45050],{"class":70,"line":2816},[68,45051,34374],{"class":393},[68,45053,45054,45056],{"class":70,"line":2822},[68,45055,34379],{"class":331},[68,45057,33085],{"class":335},[68,45059,45060],{"class":70,"line":2827},[68,45061,34386],{"class":393},[68,45063,45064,45066,45068,45070],{"class":70,"line":8153},[68,45065,3609],{"class":331},[68,45067,34393],{"class":335},[68,45069,26247],{"class":331},[68,45071,34398],{"class":335},[68,45073,45074,45076,45078],{"class":70,"line":8177},[68,45075,34403],{"class":335},[68,45077,381],{"class":331},[68,45079,34408],{"class":335},[68,45081,45082,45084,45086],{"class":70,"line":8182},[68,45083,34413],{"class":335},[68,45085,381],{"class":331},[68,45087,34418],{"class":335},[68,45089,45090],{"class":70,"line":8188},[68,45091,34423],{"class":393},[68,45093,45094],{"class":70,"line":8215},[68,45095,33076],{"class":335},[68,45097,45098],{"class":70,"line":8220},[68,45099,34432],{"class":393},[68,45101,45102,45104,45106],{"class":70,"line":8226},[68,45103,32861],{"class":335},[68,45105,381],{"class":331},[68,45107,34441],{"class":335},[68,45109,45110],{"class":70,"line":8238},[68,45111,34446],{"class":393},[68,45113,45114,45116,45118,45120,45122,45124,45126],{"class":70,"line":8250},[68,45115,32878],{"class":335},[68,45117,381],{"class":331},[68,45119,32883],{"class":335},[68,45121,32886],{"class":5421},[68,45123,381],{"class":331},[68,45125,551],{"class":82},[68,45127,342],{"class":335},[68,45129,45130],{"class":70,"line":8262},[68,45131,34467],{"class":393},[68,45133,45134],{"class":70,"line":9921},[68,45135,34472],{"class":393},[68,45137,45138],{"class":70,"line":9946},[68,45139,34477],{"class":393},[68,45141,45142,45144,45146,45148,45150],{"class":70,"line":9969},[68,45143,34482],{"class":335},[68,45145,9682],{"class":331},[68,45147,32988],{"class":335},[68,45149,3155],{"class":331},[68,45151,34491],{"class":335},[68,45153,45154],{"class":70,"line":9993},[68,45155,34496],{"class":393},[68,45157,45158,45160,45162,45164,45166],{"class":70,"line":9998},[68,45159,34501],{"class":335},[68,45161,9682],{"class":331},[68,45163,34506],{"class":335},[68,45165,525],{"class":82},[68,45167,342],{"class":335},[68,45169,45170],{"class":70,"line":10003},[68,45171,2606],{"emptyLinePlaceholder":260},[68,45173,45174],{"class":70,"line":10008},[68,45175,34519],{"class":393},[68,45177,45178,45180,45182,45184,45186],{"class":70,"line":10017},[68,45179,34524],{"class":335},[68,45181,381],{"class":331},[68,45183,34529],{"class":335},[68,45185,917],{"class":331},[68,45187,34534],{"class":335},[68,45189,45190],{"class":70,"line":10022},[68,45191,34539],{"class":393},[68,45193,45194,45196,45198,45200],{"class":70,"line":10028},[68,45195,32652],{"class":82},[68,45197,336],{"class":335},[68,45199,34548],{"class":78},[68,45201,34551],{"class":335},[68,45203,45204],{"class":70,"line":10049},[68,45205,2606],{"emptyLinePlaceholder":260},[68,45207,45208],{"class":70,"line":10055},[68,45209,34560],{"class":393},[68,45211,45212,45214,45216,45218,45220],{"class":70,"line":10069},[68,45213,1738],{"class":331},[68,45215,31421],{"class":82},[68,45217,3155],{"class":331},[68,45219,31426],{"class":78},[68,45221,3945],{"class":335},[68,45223,45224],{"class":70,"line":10075},[68,45225,34577],{"class":393},[68,45227,45228,45230,45232],{"class":70,"line":10102},[68,45229,31490],{"class":335},[68,45231,381],{"class":331},[68,45233,44752],{"class":335},[68,45235,45236],{"class":70,"line":10111},[68,45237,34590],{"class":393},[68,45239,45240],{"class":70,"line":10117},[68,45241,34595],{"class":393},[68,45243,45244,45246,45248],{"class":70,"line":10125},[68,45245,34600],{"class":335},[68,45247,34603],{"class":78},[68,45249,30698],{"class":335},[68,45251,45252],{"class":70,"line":10130},[68,45253,34610],{"class":393},[68,45255,45256,45258,45260],{"class":70,"line":16809},[68,45257,34223],{"class":335},[68,45259,381],{"class":331},[68,45261,34619],{"class":335},[68,45263,45264],{"class":70,"line":16815},[68,45265,34624],{"class":393},[68,45267,45268],{"class":70,"line":16838},[68,45269,34629],{"class":335},[68,45271,45272],{"class":70,"line":16844},[68,45273,2606],{"emptyLinePlaceholder":260},[68,45275,45276],{"class":70,"line":16867},[68,45277,34638],{"class":393},[68,45279,45280],{"class":70,"line":16881},[68,45281,34643],{"class":393},[68,45283,45284,45286,45288,45290,45292,45294,45296],{"class":70,"line":16901},[68,45285,31438],{"class":335},[68,45287,381],{"class":331},[68,45289,31445],{"class":78},[68,45291,1911],{"class":331},[68,45293,31450],{"class":335},[68,45295,1908],{"class":331},[68,45297,34320],{"class":78},[68,45299,45300,45302,45304],{"class":70,"line":16907},[68,45301,31490],{"class":335},[68,45303,381],{"class":331},[68,45305,32490],{"class":335},[68,45307,45308],{"class":70,"line":16918},[68,45309,34672],{"class":393},[68,45311,45312],{"class":70,"line":16941},[68,45313,34677],{"class":393},[68,45315,45316,45318,45320,45322,45324,45326,45328,45330,45332,45334,45336,45338,45340,45342,45344,45346,45348,45350,45352,45354,45356,45358,45360],{"class":70,"line":16963},[68,45317,34682],{"class":335},[68,45319,381],{"class":331},[68,45321,1223],{"class":335},[68,45323,34689],{"class":78},[68,45325,711],{"class":335},[68,45327,34694],{"class":78},[68,45329,711],{"class":335},[68,45331,34699],{"class":78},[68,45333,711],{"class":335},[68,45335,34704],{"class":78},[68,45337,711],{"class":335},[68,45339,34709],{"class":78},[68,45341,711],{"class":335},[68,45343,34714],{"class":78},[68,45345,711],{"class":335},[68,45347,34719],{"class":78},[68,45349,711],{"class":335},[68,45351,34724],{"class":78},[68,45353,711],{"class":335},[68,45355,34729],{"class":78},[68,45357,711],{"class":335},[68,45359,34734],{"class":78},[68,45361,33447],{"class":335},[68,45363,45364,45366],{"class":70,"line":16968},[68,45365,34379],{"class":331},[68,45367,33085],{"class":335},[68,45369,45370],{"class":70,"line":16974},[68,45371,34747],{"class":393},[68,45373,45374,45376,45378,45380],{"class":70,"line":16988},[68,45375,3609],{"class":331},[68,45377,34754],{"class":335},[68,45379,26247],{"class":331},[68,45381,34398],{"class":335},[68,45383,45384,45386,45388],{"class":70,"line":17001},[68,45385,32811],{"class":335},[68,45387,381],{"class":331},[68,45389,32816],{"class":335},[68,45391,45392,45394,45396],{"class":70,"line":17006},[68,45393,32826],{"class":335},[68,45395,381],{"class":331},[68,45397,32831],{"class":335},[68,45399,45400],{"class":70,"line":17020},[68,45401,2606],{"emptyLinePlaceholder":260},[68,45403,45404],{"class":70,"line":17025},[68,45405,34783],{"class":393},[68,45407,45408],{"class":70,"line":17031},[68,45409,33076],{"class":335},[68,45411,45412],{"class":70,"line":17036},[68,45413,34792],{"class":393},[68,45415,45416,45418,45420],{"class":70,"line":17050},[68,45417,32861],{"class":335},[68,45419,381],{"class":331},[68,45421,32866],{"class":335},[68,45423,45424],{"class":70,"line":17055},[68,45425,34805],{"class":393},[68,45427,45428,45430,45432,45434,45436,45438,45440],{"class":70,"line":17060},[68,45429,32878],{"class":335},[68,45431,381],{"class":331},[68,45433,32883],{"class":335},[68,45435,32886],{"class":5421},[68,45437,381],{"class":331},[68,45439,551],{"class":82},[68,45441,342],{"class":335},[68,45443,45444],{"class":70,"line":17074},[68,45445,34826],{"class":393},[68,45447,45448,45450,45452],{"class":70,"line":17086},[68,45449,34831],{"class":335},[68,45451,381],{"class":331},[68,45453,34836],{"class":335},[68,45455,45456,45458,45460],{"class":70,"line":17091},[68,45457,34841],{"class":335},[68,45459,381],{"class":331},[68,45461,34846],{"class":335},[68,45463,45464,45466,45468,45470,45472,45474,45476,45478],{"class":70,"line":17104},[68,45465,34851],{"class":82},[68,45467,336],{"class":335},[68,45469,34856],{"class":78},[68,45471,34859],{"class":335},[68,45473,34862],{"class":78},[68,45475,711],{"class":335},[68,45477,34867],{"class":78},[68,45479,34870],{"class":335},[301,45481,45483],{"id":45482},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45485,45486],{},"猫狗分类任务",[19,45488,45489],{},"划分数据集和验证集",[58,45491,45493],{"className":30579,"code":45492,"language":30581,"meta":63,"style":63},"# 创建脚本，用于划分数据集和验证集\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",[65,45494,45495,45500,45507,45512,45523,45530,45534,45544,45558,45567,45571,45576,45586,45606,45610,45615,45625,45636,45649,45653,45658,45667,45677,45688,45692,45697,45707,45711,45716,45721,45726,45731,45736,45740,45750,45777,45790,45802,45829,45834,45839,45853,45858,45870,45885,45900,45908,45912,45917,45923,45935,45948,45953,45958,45963,46013,46019,46023],{"__ignoreMap":63},[68,45496,45497],{"class":70,"line":71},[68,45498,45499],{"class":393},"# 创建脚本，用于划分数据集和验证集\n",[68,45501,45502,45504],{"class":70,"line":92},[68,45503,30593],{"class":331},[68,45505,45506],{"class":335}," os\n",[68,45508,45509],{"class":70,"line":1387},[68,45510,45511],{"class":393},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[68,45513,45514,45516,45519,45521],{"class":70,"line":1402},[68,45515,30938],{"class":331},[68,45517,45518],{"class":335}," shutil ",[68,45520,30593],{"class":331},[68,45522,32023],{"class":335},[68,45524,45525,45527],{"class":70,"line":1408},[68,45526,30593],{"class":331},[68,45528,45529],{"class":335}," random\n",[68,45531,45532],{"class":70,"line":1422},[68,45533,2606],{"emptyLinePlaceholder":260},[68,45535,45536,45538,45541],{"class":70,"line":1428},[68,45537,32148],{"class":331},[68,45539,45540],{"class":74}," mkfile",[68,45542,45543],{"class":335},"(file):\n",[68,45545,45546,45548,45550,45553,45556],{"class":70,"line":1519},[68,45547,3307],{"class":331},[68,45549,39131],{"class":331},[68,45551,45552],{"class":335}," os.path.exists(",[68,45554,45555],{"class":5421},"file",[68,45557,30987],{"class":335},[68,45559,45560,45563,45565],{"class":70,"line":1525},[68,45561,45562],{"class":335},"        os.makedirs(",[68,45564,45555],{"class":5421},[68,45566,342],{"class":335},[68,45568,45569],{"class":70,"line":1537},[68,45570,2606],{"emptyLinePlaceholder":260},[68,45572,45573],{"class":70,"line":1819},[68,45574,45575],{"class":393},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[68,45577,45578,45581,45583],{"class":70,"line":1824},[68,45579,45580],{"class":335},"file_path",[68,45582,381],{"class":331},[68,45584,45585],{"class":78},"'data_cat_dog'\n",[68,45587,45588,45591,45593,45596,45598,45601,45603],{"class":70,"line":1830},[68,45589,45590],{"class":335},"flower_class",[68,45592,381],{"class":331},[68,45594,45595],{"class":335},"[cla ",[68,45597,3231],{"class":331},[68,45599,45600],{"class":335}," cla ",[68,45602,26247],{"class":331},[68,45604,45605],{"class":335}," os.listdir(file_path)]\n",[68,45607,45608],{"class":70,"line":1835},[68,45609,2606],{"emptyLinePlaceholder":260},[68,45611,45612],{"class":70,"line":1849},[68,45613,45614],{"class":393},"# 创建训练集train文件夹\n",[68,45616,45617,45620,45623],{"class":70,"line":1854},[68,45618,45619],{"class":335},"mkfile(",[68,45621,45622],{"class":78},"'data\u002Ftrain'",[68,45624,342],{"class":335},[68,45626,45627,45629,45631,45633],{"class":70,"line":1860},[68,45628,3231],{"class":331},[68,45630,45600],{"class":335},[68,45632,26247],{"class":331},[68,45634,45635],{"class":335}," flower_class:\n",[68,45637,45638,45641,45644,45646],{"class":70,"line":1881},[68,45639,45640],{"class":335},"    mkfile(",[68,45642,45643],{"class":78},"'data\u002Ftrain\u002F'",[68,45645,814],{"class":331},[68,45647,45648],{"class":335},"cla)\n",[68,45650,45651],{"class":70,"line":1886},[68,45652,2606],{"emptyLinePlaceholder":260},[68,45654,45655],{"class":70,"line":1900},[68,45656,45657],{"class":393},"# 创建验证集val文件夹\n",[68,45659,45660,45662,45665],{"class":70,"line":1905},[68,45661,45619],{"class":335},[68,45663,45664],{"class":78},"'data\u002Ftest'",[68,45666,342],{"class":335},[68,45668,45669,45671,45673,45675],{"class":70,"line":1934},[68,45670,3231],{"class":331},[68,45672,45600],{"class":335},[68,45674,26247],{"class":331},[68,45676,45635],{"class":335},[68,45678,45679,45681,45684,45686],{"class":70,"line":1939},[68,45680,45640],{"class":335},[68,45682,45683],{"class":78},"'data\u002Ftest\u002F'",[68,45685,814],{"class":331},[68,45687,45648],{"class":335},[68,45689,45690],{"class":70,"line":1956},[68,45691,2606],{"emptyLinePlaceholder":260},[68,45693,45694],{"class":70,"line":1961},[68,45695,45696],{"class":393},"# 划分比例，训练集：测试集=9：1\n",[68,45698,45699,45702,45704],{"class":70,"line":1966},[68,45700,45701],{"class":335},"split_rate",[68,45703,381],{"class":331},[68,45705,45706],{"class":82},"0.1\n",[68,45708,45709],{"class":70,"line":1971},[68,45710,2606],{"emptyLinePlaceholder":260},[68,45712,45713],{"class":70,"line":1985},[68,45714,45715],{"class":393},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[68,45717,45718],{"class":70,"line":1990},[68,45719,45720],{"class":393},"# cla_path：当前类别的原始图片路径\n",[68,45722,45723],{"class":70,"line":2783},[68,45724,45725],{"class":393},"# images：当前类别下所有图片的文件名列表\n",[68,45727,45728],{"class":70,"line":2797},[68,45729,45730],{"class":393},"# num：该类别图片总数\n",[68,45732,45733],{"class":70,"line":2805},[68,45734,45735],{"class":393},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[68,45737,45738],{"class":70,"line":2810},[68,45739,2606],{"emptyLinePlaceholder":260},[68,45741,45742,45744,45746,45748],{"class":70,"line":2816},[68,45743,3231],{"class":331},[68,45745,45600],{"class":335},[68,45747,26247],{"class":331},[68,45749,45635],{"class":335},[68,45751,45752,45755,45757,45760,45762,45765,45768,45770,45772,45774],{"class":70,"line":2822},[68,45753,45754],{"class":335},"    cla_path ",[68,45756,381],{"class":331},[68,45758,45759],{"class":335}," file_path ",[68,45761,814],{"class":331},[68,45763,45764],{"class":78}," '\u002F'",[68,45766,45767],{"class":331}," +",[68,45769,45600],{"class":335},[68,45771,814],{"class":331},[68,45773,45764],{"class":78},[68,45775,45776],{"class":393},"  # 某一类别的子目录\n",[68,45778,45779,45782,45784,45787],{"class":70,"line":2827},[68,45780,45781],{"class":335},"    images ",[68,45783,381],{"class":331},[68,45785,45786],{"class":335}," os.listdir(cla_path)  ",[68,45788,45789],{"class":393},"# iamges 列表存储了该目录下所有图像的名称\n",[68,45791,45792,45795,45797,45799],{"class":70,"line":8153},[68,45793,45794],{"class":335},"    num ",[68,45796,381],{"class":331},[68,45798,7536],{"class":82},[68,45800,45801],{"class":335},"(images)\n",[68,45803,45804,45807,45809,45812,45814,45816,45818,45821,45823,45826],{"class":70,"line":8177},[68,45805,45806],{"class":335},"    eval_index ",[68,45808,381],{"class":331},[68,45810,45811],{"class":335}," random.sample(images, ",[68,45813,826],{"class":5421},[68,45815,381],{"class":331},[68,45817,339],{"class":82},[68,45819,45820],{"class":335},"(num ",[68,45822,788],{"class":331},[68,45824,45825],{"class":335}," split_rate))  ",[68,45827,45828],{"class":393},"# 从images列表中随机抽取 k 个图像名称\n",[68,45830,45831],{"class":70,"line":8182},[68,45832,45833],{"class":393},"    # 遍历该类别下的所有图片\n",[68,45835,45836],{"class":70,"line":8188},[68,45837,45838],{"class":393},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[68,45840,45841,45843,45846,45848,45850],{"class":70,"line":8215},[68,45842,3407],{"class":331},[68,45844,45845],{"class":335}," index, image ",[68,45847,26247],{"class":331},[68,45849,31807],{"class":82},[68,45851,45852],{"class":335},"(images):\n",[68,45854,45855],{"class":70,"line":8220},[68,45856,45857],{"class":393},"        # eval_index 中保存验证集val的图像名称\n",[68,45859,45860,45862,45865,45867],{"class":70,"line":8226},[68,45861,2703],{"class":331},[68,45863,45864],{"class":335}," image ",[68,45866,26247],{"class":331},[68,45868,45869],{"class":335}," eval_index:\n",[68,45871,45872,45875,45877,45880,45882],{"class":70,"line":8238},[68,45873,45874],{"class":335},"            image_path ",[68,45876,381],{"class":331},[68,45878,45879],{"class":335}," cla_path ",[68,45881,814],{"class":331},[68,45883,45884],{"class":335}," image\n",[68,45886,45887,45890,45892,45895,45897],{"class":70,"line":8250},[68,45888,45889],{"class":335},"            new_path ",[68,45891,381],{"class":331},[68,45893,45894],{"class":78}," 'data\u002Ftest\u002F'",[68,45896,45767],{"class":331},[68,45898,45899],{"class":335}," cla\n",[68,45901,45902,45905],{"class":70,"line":8262},[68,45903,45904],{"class":335},"            copy(image_path, new_path)  ",[68,45906,45907],{"class":393},"# 将选中的图像复制到新路径\n",[68,45909,45910],{"class":70,"line":9921},[68,45911,2606],{"emptyLinePlaceholder":260},[68,45913,45914],{"class":70,"line":9946},[68,45915,45916],{"class":393},"        # 其余的图像保存在训练集train中\n",[68,45918,45919,45921],{"class":70,"line":9969},[68,45920,2740],{"class":331},[68,45922,3945],{"class":335},[68,45924,45925,45927,45929,45931,45933],{"class":70,"line":9993},[68,45926,45874],{"class":335},[68,45928,381],{"class":331},[68,45930,45879],{"class":335},[68,45932,814],{"class":331},[68,45934,45884],{"class":335},[68,45936,45937,45939,45941,45944,45946],{"class":70,"line":9998},[68,45938,45889],{"class":335},[68,45940,381],{"class":331},[68,45942,45943],{"class":78}," 'data\u002Ftrain\u002F'",[68,45945,45767],{"class":331},[68,45947,45899],{"class":335},[68,45949,45950],{"class":70,"line":10003},[68,45951,45952],{"class":335},"            copy(image_path, new_path)\n",[68,45954,45955],{"class":70,"line":10008},[68,45956,45957],{"class":393},"            # 打印进度条信息\n",[68,45959,45960],{"class":70,"line":10017},[68,45961,45962],{"class":393},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[68,45964,45965,45967,45969,45971,45974,45976,45978,45981,45983,45985,45987,45990,45993,45995,45997,46000,46003,46005,46007,46010],{"class":70,"line":10022},[68,45966,32652],{"class":82},[68,45968,336],{"class":335},[68,45970,584],{"class":78},[68,45972,45973],{"class":82},"\\r",[68,45975,1223],{"class":78},[68,45977,32660],{"class":82},[68,45979,45980],{"class":78},"] processing [",[68,45982,32660],{"class":82},[68,45984,917],{"class":78},[68,45986,32660],{"class":82},[68,45988,45989],{"class":78},"]\"",[68,45991,45992],{"class":335},".format(cla, index ",[68,45994,814],{"class":331},[68,45996,25322],{"class":82},[68,45998,45999],{"class":335},", num), ",[68,46001,46002],{"class":5421},"end",[68,46004,381],{"class":331},[68,46006,7857],{"class":78},[68,46008,46009],{"class":335},")  ",[68,46011,46012],{"class":393},"# processing bar\n",[68,46014,46015,46017],{"class":70,"line":10028},[68,46016,31500],{"class":82},[68,46018,2182],{"class":335},[68,46020,46021],{"class":70,"line":10049},[68,46022,2606],{"emptyLinePlaceholder":260},[68,46024,46025,46027,46029,46032],{"class":70,"line":10055},[68,46026,30616],{"class":82},[68,46028,336],{"class":335},[68,46030,46031],{"class":78},"\"processing done!\"",[68,46033,342],{"class":335},[19,46035,46036],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22203,46038,46040],{"id":46039},"_242模型代码","2.4.2.模型代码",[19,46042,46043],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[58,46045,46047],{"className":30579,"code":46046,"language":30581,"meta":63,"style":63},"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",[65,46048,46049,46055,46065,46075,46079,46095,46103,46117,46127,46131,46161,46165,46199,46245,46249,46283,46329,46333,46337,46371,46401,46405,46413,46427,46449,46471,46489,46493,46507,46511,46515,46531,46535,46543,46557,46567,46611,46615,46643,46647,46657,46685,46689,46725,46729,46757,46761,46771,46803,46835,46863,46867,46877,46909,46941,46973,47005,47037,47065,47069,47079,47111,47143,47155,47159,47171,47175,47179,47191,47199,47219,47223,47227,47231,47235,47239,47243,47257,47265,47273,47285,47299,47307,47311,47319,47329,47339,47349,47359,47369,47375,47379,47383,47395,47415,47423],{"__ignoreMap":63},[68,46050,46051,46053],{"class":70,"line":71},[68,46052,30593],{"class":331},[68,46054,30596],{"class":335},[68,46056,46057,46059,46061,46063],{"class":70,"line":92},[68,46058,30938],{"class":331},[68,46060,30941],{"class":335},[68,46062,30593],{"class":331},[68,46064,30946],{"class":335},[68,46066,46067,46069,46071,46073],{"class":70,"line":1387},[68,46068,30938],{"class":331},[68,46070,30958],{"class":335},[68,46072,30593],{"class":331},[68,46074,30963],{"class":335},[68,46076,46077],{"class":70,"line":1402},[68,46078,2606],{"emptyLinePlaceholder":260},[68,46080,46081,46083,46085,46087,46089,46091,46093],{"class":70,"line":1408},[68,46082,14899],{"class":331},[68,46084,41694],{"class":74},[68,46086,336],{"class":335},[68,46088,30979],{"class":74},[68,46090,891],{"class":335},[68,46092,30984],{"class":74},[68,46094,30987],{"class":335},[68,46096,46097,46099,46101],{"class":70,"line":1422},[68,46098,31002],{"class":331},[68,46100,31005],{"class":82},[68,46102,41713],{"class":335},[68,46104,46105,46107,46109,46111,46113,46115],{"class":70,"line":1428},[68,46106,31018],{"class":82},[68,46108,41720],{"class":335},[68,46110,31024],{"class":82},[68,46112,31027],{"class":335},[68,46114,31030],{"class":82},[68,46116,2182],{"class":335},[68,46118,46119,46121,46123,46125],{"class":70,"line":1519},[68,46120,31046],{"class":82},[68,46122,34972],{"class":335},[68,46124,381],{"class":331},[68,46126,34977],{"class":335},[68,46128,46129],{"class":70,"line":1525},[68,46130,41743],{"class":393},[68,46132,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159],{"class":70,"line":1537},[68,46134,31046],{"class":82},[68,46136,41750],{"class":335},[68,46138,381],{"class":331},[68,46140,31054],{"class":335},[68,46142,31057],{"class":5421},[68,46144,381],{"class":331},[68,46146,41761],{"class":335},[68,46148,31066],{"class":5421},[68,46150,381],{"class":331},[68,46152,41768],{"class":335},[68,46154,31075],{"class":5421},[68,46156,381],{"class":331},[68,46158,551],{"class":82},[68,46160,342],{"class":335},[68,46162,46163],{"class":70,"line":1819},[68,46164,41781],{"class":393},[68,46166,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197],{"class":70,"line":1824},[68,46168,31046],{"class":82},[68,46170,41788],{"class":335},[68,46172,381],{"class":331},[68,46174,31054],{"class":335},[68,46176,31057],{"class":5421},[68,46178,381],{"class":331},[68,46180,41761],{"class":335},[68,46182,31066],{"class":5421},[68,46184,381],{"class":331},[68,46186,41805],{"class":335},[68,46188,525],{"class":82},[68,46190,41810],{"class":335},[68,46192,31075],{"class":5421},[68,46194,381],{"class":331},[68,46196,551],{"class":82},[68,46198,342],{"class":335},[68,46200,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243],{"class":70,"line":1830},[68,46202,31046],{"class":82},[68,46204,41825],{"class":335},[68,46206,381],{"class":331},[68,46208,31054],{"class":335},[68,46210,31057],{"class":5421},[68,46212,381],{"class":331},[68,46214,41805],{"class":335},[68,46216,525],{"class":82},[68,46218,41810],{"class":335},[68,46220,31066],{"class":5421},[68,46222,381],{"class":331},[68,46224,41805],{"class":335},[68,46226,551],{"class":82},[68,46228,41810],{"class":335},[68,46230,31075],{"class":5421},[68,46232,381],{"class":331},[68,46234,406],{"class":82},[68,46236,711],{"class":335},[68,46238,31084],{"class":5421},[68,46240,381],{"class":331},[68,46242,551],{"class":82},[68,46244,342],{"class":335},[68,46246,46247],{"class":70,"line":1835},[68,46248,41870],{"class":393},[68,46250,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281],{"class":70,"line":1849},[68,46252,31046],{"class":82},[68,46254,41877],{"class":335},[68,46256,381],{"class":331},[68,46258,31054],{"class":335},[68,46260,31057],{"class":5421},[68,46262,381],{"class":331},[68,46264,41761],{"class":335},[68,46266,31066],{"class":5421},[68,46268,381],{"class":331},[68,46270,41894],{"class":335},[68,46272,525],{"class":82},[68,46274,41810],{"class":335},[68,46276,31075],{"class":5421},[68,46278,381],{"class":331},[68,46280,551],{"class":82},[68,46282,342],{"class":335},[68,46284,46285,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319,46321,46323,46325,46327],{"class":70,"line":1854},[68,46286,31046],{"class":82},[68,46288,41913],{"class":335},[68,46290,381],{"class":331},[68,46292,31054],{"class":335},[68,46294,31057],{"class":5421},[68,46296,381],{"class":331},[68,46298,41894],{"class":335},[68,46300,525],{"class":82},[68,46302,41810],{"class":335},[68,46304,31066],{"class":5421},[68,46306,381],{"class":331},[68,46308,41894],{"class":335},[68,46310,551],{"class":82},[68,46312,41810],{"class":335},[68,46314,31075],{"class":5421},[68,46316,381],{"class":331},[68,46318,652],{"class":82},[68,46320,711],{"class":335},[68,46322,31084],{"class":5421},[68,46324,381],{"class":331},[68,46326,412],{"class":82},[68,46328,342],{"class":335},[68,46330,46331],{"class":70,"line":1860},[68,46332,41958],{"class":393},[68,46334,46335],{"class":70,"line":1881},[68,46336,41963],{"class":393},[68,46338,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369],{"class":70,"line":1886},[68,46340,31046],{"class":82},[68,46342,41970],{"class":335},[68,46344,381],{"class":331},[68,46346,35030],{"class":335},[68,46348,31075],{"class":5421},[68,46350,381],{"class":331},[68,46352,406],{"class":82},[68,46354,711],{"class":335},[68,46356,31130],{"class":5421},[68,46358,381],{"class":331},[68,46360,551],{"class":82},[68,46362,711],{"class":335},[68,46364,31084],{"class":5421},[68,46366,381],{"class":331},[68,46368,551],{"class":82},[68,46370,342],{"class":335},[68,46372,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399],{"class":70,"line":1900},[68,46374,31046],{"class":82},[68,46376,42005],{"class":335},[68,46378,381],{"class":331},[68,46380,31054],{"class":335},[68,46382,31057],{"class":5421},[68,46384,381],{"class":331},[68,46386,41761],{"class":335},[68,46388,31066],{"class":5421},[68,46390,381],{"class":331},[68,46392,42022],{"class":335},[68,46394,31075],{"class":5421},[68,46396,381],{"class":331},[68,46398,551],{"class":82},[68,46400,342],{"class":335},[68,46402,46403],{"class":70,"line":1905},[68,46404,2606],{"emptyLinePlaceholder":260},[68,46406,46407,46409,46411],{"class":70,"line":1934},[68,46408,31002],{"class":331},[68,46410,31294],{"class":74},[68,46412,31297],{"class":335},[68,46414,46415,46417,46419,46421,46423,46425],{"class":70,"line":1939},[68,46416,42047],{"class":335},[68,46418,381],{"class":331},[68,46420,31024],{"class":82},[68,46422,35385],{"class":335},[68,46424,31024],{"class":82},[68,46426,42058],{"class":335},[68,46428,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447],{"class":70,"line":1956},[68,46430,7290],{"class":335},[68,46432,381],{"class":331},[68,46434,31024],{"class":82},[68,46436,35385],{"class":335},[68,46438,31024],{"class":82},[68,46440,42073],{"class":335},[68,46442,31024],{"class":82},[68,46444,35385],{"class":335},[68,46446,31024],{"class":82},[68,46448,42082],{"class":335},[68,46450,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469],{"class":70,"line":1961},[68,46452,42087],{"class":335},[68,46454,381],{"class":331},[68,46456,31024],{"class":82},[68,46458,35385],{"class":335},[68,46460,31024],{"class":82},[68,46462,42098],{"class":335},[68,46464,31024],{"class":82},[68,46466,35385],{"class":335},[68,46468,31024],{"class":82},[68,46470,42107],{"class":335},[68,46472,46473,46475,46477,46479,46481,46483,46485,46487],{"class":70,"line":1966},[68,46474,42112],{"class":335},[68,46476,381],{"class":331},[68,46478,31024],{"class":82},[68,46480,35385],{"class":335},[68,46482,31024],{"class":82},[68,46484,42123],{"class":335},[68,46486,31024],{"class":82},[68,46488,42128],{"class":335},[68,46490,46491],{"class":70,"line":1971},[68,46492,42133],{"class":393},[68,46494,46495,46497,46499,46501,46503,46505],{"class":70,"line":1985},[68,46496,14957],{"class":331},[68,46498,42140],{"class":335},[68,46500,32886],{"class":5421},[68,46502,381],{"class":331},[68,46504,551],{"class":82},[68,46506,342],{"class":335},[68,46508,46509],{"class":70,"line":1990},[68,46510,2606],{"emptyLinePlaceholder":260},[68,46512,46513],{"class":70,"line":2783},[68,46514,42161],{"class":393},[68,46516,46517,46519,46521,46523,46525,46527,46529],{"class":70,"line":2797},[68,46518,14899],{"class":331},[68,46520,42168],{"class":74},[68,46522,336],{"class":335},[68,46524,30979],{"class":74},[68,46526,891],{"class":335},[68,46528,30984],{"class":74},[68,46530,30987],{"class":335},[68,46532,46533],{"class":70,"line":2805},[68,46534,42183],{"class":393},[68,46536,46537,46539,46541],{"class":70,"line":2810},[68,46538,31002],{"class":331},[68,46540,31005],{"class":82},[68,46542,42192],{"class":335},[68,46544,46545,46547,46549,46551,46553,46555],{"class":70,"line":2816},[68,46546,31018],{"class":82},[68,46548,42199],{"class":335},[68,46550,31024],{"class":82},[68,46552,31027],{"class":335},[68,46554,31030],{"class":82},[68,46556,2182],{"class":335},[68,46558,46559,46561,46563,46565],{"class":70,"line":2822},[68,46560,31046],{"class":82},[68,46562,42214],{"class":335},[68,46564,381],{"class":331},[68,46566,38210],{"class":335},[68,46568,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609],{"class":70,"line":2827},[68,46570,38215],{"class":335},[68,46572,31057],{"class":5421},[68,46574,381],{"class":331},[68,46576,406],{"class":82},[68,46578,711],{"class":335},[68,46580,31066],{"class":5421},[68,46582,381],{"class":331},[68,46584,537],{"class":82},[68,46586,711],{"class":335},[68,46588,31075],{"class":5421},[68,46590,381],{"class":331},[68,46592,702],{"class":82},[68,46594,711],{"class":335},[68,46596,31130],{"class":5421},[68,46598,381],{"class":331},[68,46600,412],{"class":82},[68,46602,711],{"class":335},[68,46604,31084],{"class":5421},[68,46606,381],{"class":331},[68,46608,406],{"class":82},[68,46610,38248],{"class":335},[68,46612,46613],{"class":70,"line":8153},[68,46614,38253],{"class":335},[68,46616,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641],{"class":70,"line":8177},[68,46618,38298],{"class":335},[68,46620,31075],{"class":5421},[68,46622,381],{"class":331},[68,46624,406],{"class":82},[68,46626,711],{"class":335},[68,46628,31130],{"class":5421},[68,46630,381],{"class":331},[68,46632,412],{"class":82},[68,46634,711],{"class":335},[68,46636,31084],{"class":5421},[68,46638,381],{"class":331},[68,46640,551],{"class":82},[68,46642,342],{"class":335},[68,46644,46645],{"class":70,"line":8182},[68,46646,38327],{"class":335},[68,46648,46649,46651,46653,46655],{"class":70,"line":8188},[68,46650,31046],{"class":82},[68,46652,42305],{"class":335},[68,46654,381],{"class":331},[68,46656,38210],{"class":335},[68,46658,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683],{"class":70,"line":8215},[68,46660,38215],{"class":335},[68,46662,31057],{"class":5421},[68,46664,381],{"class":331},[68,46666,537],{"class":82},[68,46668,711],{"class":335},[68,46670,31066],{"class":5421},[68,46672,381],{"class":331},[68,46674,537],{"class":82},[68,46676,711],{"class":335},[68,46678,31075],{"class":5421},[68,46680,381],{"class":331},[68,46682,551],{"class":82},[68,46684,38248],{"class":335},[68,46686,46687],{"class":70,"line":8220},[68,46688,38253],{"class":335},[68,46690,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723],{"class":70,"line":8226},[68,46692,38215],{"class":335},[68,46694,31057],{"class":5421},[68,46696,381],{"class":331},[68,46698,537],{"class":82},[68,46700,711],{"class":335},[68,46702,31066],{"class":5421},[68,46704,381],{"class":331},[68,46706,42360],{"class":82},[68,46708,711],{"class":335},[68,46710,31075],{"class":5421},[68,46712,381],{"class":331},[68,46714,406],{"class":82},[68,46716,711],{"class":335},[68,46718,31084],{"class":5421},[68,46720,381],{"class":331},[68,46722,551],{"class":82},[68,46724,38248],{"class":335},[68,46726,46727],{"class":70,"line":8238},[68,46728,38253],{"class":335},[68,46730,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755],{"class":70,"line":8250},[68,46732,38298],{"class":335},[68,46734,31075],{"class":5421},[68,46736,381],{"class":331},[68,46738,406],{"class":82},[68,46740,711],{"class":335},[68,46742,31130],{"class":5421},[68,46744,381],{"class":331},[68,46746,412],{"class":82},[68,46748,711],{"class":335},[68,46750,31084],{"class":5421},[68,46752,381],{"class":331},[68,46754,551],{"class":82},[68,46756,342],{"class":335},[68,46758,46759],{"class":70,"line":8262},[68,46760,38327],{"class":335},[68,46762,46763,46765,46767,46769],{"class":70,"line":9921},[68,46764,31046],{"class":82},[68,46766,42421],{"class":335},[68,46768,381],{"class":331},[68,46770,38210],{"class":335},[68,46772,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801],{"class":70,"line":9946},[68,46774,42430],{"class":335},[68,46776,42360],{"class":82},[68,46778,711],{"class":335},[68,46780,537],{"class":82},[68,46782,42439],{"class":335},[68,46784,543],{"class":82},[68,46786,711],{"class":335},[68,46788,32271],{"class":82},[68,46790,42448],{"class":335},[68,46792,934],{"class":82},[68,46794,711],{"class":335},[68,46796,531],{"class":82},[68,46798,42457],{"class":335},[68,46800,531],{"class":82},[68,46802,38248],{"class":335},[68,46804,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833],{"class":70,"line":9969},[68,46806,42430],{"class":335},[68,46808,35071],{"class":82},[68,46810,711],{"class":335},[68,46812,32271],{"class":82},[68,46814,42439],{"class":335},[68,46816,32271],{"class":82},[68,46818,711],{"class":335},[68,46820,42360],{"class":82},[68,46822,42448],{"class":335},[68,46824,531],{"class":82},[68,46826,711],{"class":335},[68,46828,543],{"class":82},[68,46830,42457],{"class":335},[68,46832,537],{"class":82},[68,46834,38248],{"class":335},[68,46836,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861],{"class":70,"line":9993},[68,46838,38298],{"class":335},[68,46840,31075],{"class":5421},[68,46842,381],{"class":331},[68,46844,406],{"class":82},[68,46846,711],{"class":335},[68,46848,31130],{"class":5421},[68,46850,381],{"class":331},[68,46852,412],{"class":82},[68,46854,711],{"class":335},[68,46856,31084],{"class":5421},[68,46858,381],{"class":331},[68,46860,551],{"class":82},[68,46862,342],{"class":335},[68,46864,46865],{"class":70,"line":9998},[68,46866,38327],{"class":335},[68,46868,46869,46871,46873,46875],{"class":70,"line":10003},[68,46870,31046],{"class":82},[68,46872,42532],{"class":335},[68,46874,381],{"class":331},[68,46876,38210],{"class":335},[68,46878,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907],{"class":70,"line":10008},[68,46880,42430],{"class":335},[68,46882,42543],{"class":82},[68,46884,711],{"class":335},[68,46886,42360],{"class":82},[68,46888,42439],{"class":335},[68,46890,543],{"class":82},[68,46892,711],{"class":335},[68,46894,42556],{"class":82},[68,46896,42448],{"class":335},[68,46898,934],{"class":82},[68,46900,711],{"class":335},[68,46902,940],{"class":82},[68,46904,42457],{"class":335},[68,46906,537],{"class":82},[68,46908,38248],{"class":335},[68,46910,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939],{"class":70,"line":10017},[68,46912,42430],{"class":335},[68,46914,38658],{"class":82},[68,46916,711],{"class":335},[68,46918,21253],{"class":82},[68,46920,42439],{"class":335},[68,46922,951],{"class":82},[68,46924,711],{"class":335},[68,46926,31702],{"class":82},[68,46928,42448],{"class":335},[68,46930,1133],{"class":82},[68,46932,711],{"class":335},[68,46934,537],{"class":82},[68,46936,42457],{"class":335},[68,46938,537],{"class":82},[68,46940,38248],{"class":335},[68,46942,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971],{"class":70,"line":10022},[68,46944,42430],{"class":335},[68,46946,38658],{"class":82},[68,46948,711],{"class":335},[68,46950,32271],{"class":82},[68,46952,42439],{"class":335},[68,46954,32271],{"class":82},[68,46956,711],{"class":335},[68,46958,35071],{"class":82},[68,46960,42448],{"class":335},[68,46962,1133],{"class":82},[68,46964,711],{"class":335},[68,46966,537],{"class":82},[68,46968,42457],{"class":335},[68,46970,537],{"class":82},[68,46972,38248],{"class":335},[68,46974,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003],{"class":70,"line":10028},[68,46976,42430],{"class":335},[68,46978,38658],{"class":82},[68,46980,711],{"class":335},[68,46982,951],{"class":82},[68,46984,42439],{"class":335},[68,46986,32271],{"class":82},[68,46988,711],{"class":335},[68,46990,42653],{"class":82},[68,46992,42448],{"class":335},[68,46994,531],{"class":82},[68,46996,711],{"class":335},[68,46998,537],{"class":82},[68,47000,42457],{"class":335},[68,47002,537],{"class":82},[68,47004,38248],{"class":335},[68,47006,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033,47035],{"class":70,"line":10049},[68,47008,42430],{"class":335},[68,47010,42674],{"class":82},[68,47012,711],{"class":335},[68,47014,35071],{"class":82},[68,47016,42439],{"class":335},[68,47018,21253],{"class":82},[68,47020,711],{"class":335},[68,47022,42687],{"class":82},[68,47024,42448],{"class":335},[68,47026,531],{"class":82},[68,47028,711],{"class":335},[68,47030,32271],{"class":82},[68,47032,42457],{"class":335},[68,47034,32271],{"class":82},[68,47036,38248],{"class":335},[68,47038,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059,47061,47063],{"class":70,"line":10055},[68,47040,38298],{"class":335},[68,47042,31075],{"class":5421},[68,47044,381],{"class":331},[68,47046,406],{"class":82},[68,47048,711],{"class":335},[68,47050,31130],{"class":5421},[68,47052,381],{"class":331},[68,47054,412],{"class":82},[68,47056,711],{"class":335},[68,47058,31084],{"class":5421},[68,47060,381],{"class":331},[68,47062,551],{"class":82},[68,47064,342],{"class":335},[68,47066,47067],{"class":70,"line":10069},[68,47068,38327],{"class":335},[68,47070,47071,47073,47075,47077],{"class":70,"line":10075},[68,47072,31046],{"class":82},[68,47074,42740],{"class":335},[68,47076,381],{"class":331},[68,47078,38210],{"class":335},[68,47080,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107,47109],{"class":70,"line":10102},[68,47082,42430],{"class":335},[68,47084,42751],{"class":82},[68,47086,711],{"class":335},[68,47088,35071],{"class":82},[68,47090,42439],{"class":335},[68,47092,21253],{"class":82},[68,47094,711],{"class":335},[68,47096,42687],{"class":82},[68,47098,42448],{"class":335},[68,47100,531],{"class":82},[68,47102,711],{"class":335},[68,47104,32271],{"class":82},[68,47106,42457],{"class":335},[68,47108,32271],{"class":82},[68,47110,38248],{"class":335},[68,47112,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139,47141],{"class":70,"line":10111},[68,47114,42430],{"class":335},[68,47116,42751],{"class":82},[68,47118,711],{"class":335},[68,47120,35141],{"class":82},[68,47122,42439],{"class":335},[68,47124,42360],{"class":82},[68,47126,711],{"class":335},[68,47128,35141],{"class":82},[68,47130,42448],{"class":335},[68,47132,940],{"class":82},[68,47134,711],{"class":335},[68,47136,32271],{"class":82},[68,47138,42457],{"class":335},[68,47140,32271],{"class":82},[68,47142,38248],{"class":335},[68,47144,47145,47147,47149,47151,47153],{"class":70,"line":10117},[68,47146,42814],{"class":335},[68,47148,551],{"class":82},[68,47150,711],{"class":335},[68,47152,551],{"class":82},[68,47154,42823],{"class":335},[68,47156,47157],{"class":70,"line":10125},[68,47158,38991],{"class":335},[68,47160,47161,47163,47165,47167,47169],{"class":70,"line":10130},[68,47162,38996],{"class":335},[68,47164,42834],{"class":82},[68,47166,711],{"class":335},[68,47168,412],{"class":82},[68,47170,342],{"class":335},[68,47172,47173],{"class":70,"line":16809},[68,47174,38327],{"class":335},[68,47176,47177],{"class":70,"line":16815},[68,47178,42849],{"class":393},[68,47180,47181,47183,47185,47187,47189],{"class":70,"line":16838},[68,47182,3609],{"class":331},[68,47184,39069],{"class":335},[68,47186,26247],{"class":331},[68,47188,39074],{"class":82},[68,47190,39077],{"class":335},[68,47192,47193,47195,47197],{"class":70,"line":16844},[68,47194,4848],{"class":331},[68,47196,39089],{"class":82},[68,47198,39092],{"class":335},[68,47200,47201,47203,47205,47207,47209,47211,47213,47215,47217],{"class":70,"line":16867},[68,47202,39102],{"class":335},[68,47204,42876],{"class":5421},[68,47206,381],{"class":331},[68,47208,42881],{"class":78},[68,47210,711],{"class":335},[68,47212,39105],{"class":5421},[68,47214,381],{"class":331},[68,47216,39110],{"class":78},[68,47218,342],{"class":335},[68,47220,47221],{"class":70,"line":16881},[68,47222,42896],{"class":393},[68,47224,47225],{"class":70,"line":16901},[68,47226,42901],{"class":393},[68,47228,47229],{"class":70,"line":16907},[68,47230,42906],{"class":393},[68,47232,47233],{"class":70,"line":16918},[68,47234,42911],{"class":393},[68,47236,47237],{"class":70,"line":16941},[68,47238,42916],{"class":393},[68,47240,47241],{"class":70,"line":16963},[68,47242,42921],{"class":393},[68,47244,47245,47247,47249,47251,47253,47255],{"class":70,"line":16968},[68,47246,39122],{"class":331},[68,47248,39125],{"class":335},[68,47250,39128],{"class":331},[68,47252,39131],{"class":331},[68,47254,39134],{"class":82},[68,47256,3945],{"class":335},[68,47258,47259,47261,47263],{"class":70,"line":16974},[68,47260,39146],{"class":335},[68,47262,525],{"class":82},[68,47264,342],{"class":335},[68,47266,47267,47269,47271],{"class":70,"line":16988},[68,47268,42948],{"class":331},[68,47270,39089],{"class":82},[68,47272,39165],{"class":335},[68,47274,47275,47277,47279,47281,47283],{"class":70,"line":17001},[68,47276,42957],{"class":335},[68,47278,525],{"class":82},[68,47280,711],{"class":335},[68,47282,39187],{"class":82},[68,47284,342],{"class":335},[68,47286,47287,47289,47291,47293,47295,47297],{"class":70,"line":17006},[68,47288,42970],{"class":331},[68,47290,39125],{"class":335},[68,47292,39128],{"class":331},[68,47294,39131],{"class":331},[68,47296,39134],{"class":82},[68,47298,3945],{"class":335},[68,47300,47301,47303,47305],{"class":70,"line":17020},[68,47302,42985],{"class":335},[68,47304,525],{"class":82},[68,47306,342],{"class":335},[68,47308,47309],{"class":70,"line":17025},[68,47310,35366],{"class":393},[68,47312,47313,47315,47317],{"class":70,"line":17031},[68,47314,31002],{"class":331},[68,47316,31294],{"class":74},[68,47318,31297],{"class":335},[68,47320,47321,47323,47325,47327],{"class":70,"line":17036},[68,47322,31302],{"class":335},[68,47324,381],{"class":331},[68,47326,31024],{"class":82},[68,47328,43012],{"class":335},[68,47330,47331,47333,47335,47337],{"class":70,"line":17050},[68,47332,31302],{"class":335},[68,47334,381],{"class":331},[68,47336,31024],{"class":82},[68,47338,43023],{"class":335},[68,47340,47341,47343,47345,47347],{"class":70,"line":17055},[68,47342,31302],{"class":335},[68,47344,381],{"class":331},[68,47346,31024],{"class":82},[68,47348,43034],{"class":335},[68,47350,47351,47353,47355,47357],{"class":70,"line":17060},[68,47352,31302],{"class":335},[68,47354,381],{"class":331},[68,47356,31024],{"class":82},[68,47358,43045],{"class":335},[68,47360,47361,47363,47365,47367],{"class":70,"line":17074},[68,47362,31302],{"class":335},[68,47364,381],{"class":331},[68,47366,31024],{"class":82},[68,47368,43056],{"class":335},[68,47370,47371,47373],{"class":70,"line":17086},[68,47372,14957],{"class":331},[68,47374,31410],{"class":335},[68,47376,47377],{"class":70,"line":17091},[68,47378,2606],{"emptyLinePlaceholder":260},[68,47380,47381],{"class":70,"line":17104},[68,47382,43071],{"class":393},[68,47384,47385,47387,47389,47391,47393],{"class":70,"line":17109},[68,47386,1738],{"class":331},[68,47388,31421],{"class":82},[68,47390,3155],{"class":331},[68,47392,31426],{"class":78},[68,47394,3945],{"class":335},[68,47396,47397,47399,47401,47403,47405,47407,47409,47411,47413],{"class":70,"line":17114},[68,47398,31438],{"class":335},[68,47400,381],{"class":331},[68,47402,30652],{"class":335},[68,47404,31445],{"class":78},[68,47406,1911],{"class":331},[68,47408,31450],{"class":335},[68,47410,1908],{"class":331},[68,47412,30677],{"class":78},[68,47414,342],{"class":335},[68,47416,47417,47419,47421],{"class":70,"line":17119},[68,47418,31490],{"class":335},[68,47420,381],{"class":331},[68,47422,43112],{"class":335},[68,47424,47425,47427,47429,47431,47433,47435,47437,47439],{"class":70,"line":17132},[68,47426,31500],{"class":82},[68,47428,31503],{"class":335},[68,47430,551],{"class":82},[68,47432,711],{"class":335},[68,47434,31702],{"class":82},[68,47436,711],{"class":335},[68,47438,31702],{"class":82},[68,47440,31516],{"class":335},[22203,47442,47444],{"id":47443},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47446,47447],{},"计算图片的均值与方差，用于训练中归一化处理操作",[58,47449,47451],{"className":30579,"code":47450,"language":30581,"meta":63,"style":63},"# 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",[65,47452,47453,47458,47471,47476,47482,47487,47497,47501,47506,47516,47520,47525,47535,47552,47556,47561,47573,47585,47616,47625,47635,47645,47649,47654,47669,47673,47678,47683,47688,47698,47703,47728,47732,47737,47752,47756,47769,47773,47778,47783,47788,47793,47798,47808,47818,47841,47849,47857,47865,47869,47881,47885,47890,47894,47898,47905,47925,47949,47956,47970,47975,47980,47984,47998,48002,48014],{"__ignoreMap":63},[68,47454,47455],{"class":70,"line":71},[68,47456,47457],{"class":393},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[68,47459,47460,47462,47465,47468],{"class":70,"line":92},[68,47461,30938],{"class":331},[68,47463,47464],{"class":82}," PIL",[68,47466,47467],{"class":331}," import",[68,47469,47470],{"class":335}," Image\n",[68,47472,47473],{"class":70,"line":1387},[68,47474,47475],{"class":393},"# os 用来处理文件夹和文件路径\n",[68,47477,47478,47480],{"class":70,"line":1402},[68,47479,30593],{"class":331},[68,47481,45506],{"class":335},[68,47483,47484],{"class":70,"line":1408},[68,47485,47486],{"class":393},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[68,47488,47489,47491,47493,47495],{"class":70,"line":1422},[68,47490,30593],{"class":331},[68,47492,31581],{"class":335},[68,47494,31584],{"class":331},[68,47496,31587],{"class":335},[68,47498,47499],{"class":70,"line":1428},[68,47500,2606],{"emptyLinePlaceholder":260},[68,47502,47503],{"class":70,"line":1519},[68,47504,47505],{"class":393},"# 文件夹路径，包含所有图片文件\n",[68,47507,47508,47511,47513],{"class":70,"line":1525},[68,47509,47510],{"class":335},"folder_path ",[68,47512,381],{"class":331},[68,47514,47515],{"class":78}," 'data_cat_dog'\n",[68,47517,47518],{"class":70,"line":1537},[68,47519,2606],{"emptyLinePlaceholder":260},[68,47521,47522],{"class":70,"line":1819},[68,47523,47524],{"class":393},"# 初始化累积变量\n",[68,47526,47527,47530,47532],{"class":70,"line":1824},[68,47528,47529],{"class":335},"total_pixels ",[68,47531,381],{"class":331},[68,47533,47534],{"class":82}," 0\n",[68,47536,47537,47540,47542,47545,47547,47549],{"class":70,"line":1830},[68,47538,47539],{"class":335},"sum_normalized_pixel_values ",[68,47541,381],{"class":331},[68,47543,47544],{"class":335}," np.zeros(",[68,47546,406],{"class":82},[68,47548,46009],{"class":335},[68,47550,47551],{"class":393},"# 如果是RGB图像，需要三个通道的均值和方差\n",[68,47553,47554],{"class":70,"line":1835},[68,47555,2606],{"emptyLinePlaceholder":260},[68,47557,47558],{"class":70,"line":1849},[68,47559,47560],{"class":393},"# 遍历文件夹中的图片文件\n",[68,47562,47563,47565,47568,47570],{"class":70,"line":1854},[68,47564,3231],{"class":331},[68,47566,47567],{"class":335}," root, dirs, files ",[68,47569,26247],{"class":331},[68,47571,47572],{"class":335}," os.walk(folder_path):\n",[68,47574,47575,47577,47580,47582],{"class":70,"line":1860},[68,47576,3407],{"class":331},[68,47578,47579],{"class":335}," filename ",[68,47581,26247],{"class":331},[68,47583,47584],{"class":335}," files:\n",[68,47586,47587,47589,47592,47595,47597,47600,47602,47605,47607,47610,47613],{"class":70,"line":1881},[68,47588,2703],{"class":331},[68,47590,47591],{"class":335}," filename.endswith((",[68,47593,47594],{"class":78},"'.jpg'",[68,47596,12640],{"class":335},[68,47598,47599],{"class":78},"'.jpeg'",[68,47601,12640],{"class":335},[68,47603,47604],{"class":78},"'.png'",[68,47606,12640],{"class":335},[68,47608,47609],{"class":78},"'.bmp'",[68,47611,47612],{"class":335},")):  ",[68,47614,47615],{"class":393},"# 可根据实际情况添加其他格式\n",[68,47617,47618,47620,47622],{"class":70,"line":1886},[68,47619,45874],{"class":335},[68,47621,381],{"class":331},[68,47623,47624],{"class":335}," os.path.join(root, filename)\n",[68,47626,47627,47630,47632],{"class":70,"line":1900},[68,47628,47629],{"class":335},"            image ",[68,47631,381],{"class":331},[68,47633,47634],{"class":335}," Image.open(image_path)\n",[68,47636,47637,47640,47642],{"class":70,"line":1905},[68,47638,47639],{"class":335},"            image_array ",[68,47641,381],{"class":331},[68,47643,47644],{"class":335}," np.array(image)\n",[68,47646,47647],{"class":70,"line":1934},[68,47648,2606],{"emptyLinePlaceholder":260},[68,47650,47651],{"class":70,"line":1939},[68,47652,47653],{"class":393},"            # 归一化像素值到0-1之间\n",[68,47655,47656,47659,47661,47664,47666],{"class":70,"line":1956},[68,47657,47658],{"class":335},"            normalized_image_array ",[68,47660,381],{"class":331},[68,47662,47663],{"class":335}," image_array ",[68,47665,917],{"class":331},[68,47667,47668],{"class":82}," 255.0\n",[68,47670,47671],{"class":70,"line":1961},[68,47672,2606],{"emptyLinePlaceholder":260},[68,47674,47675],{"class":70,"line":1966},[68,47676,47677],{"class":393},"            # print(image_path)\n",[68,47679,47680],{"class":70,"line":1971},[68,47681,47682],{"class":393},"            # print(normalized_image_array.shape)\n",[68,47684,47685],{"class":70,"line":1985},[68,47686,47687],{"class":393},"            # 累积归一化后的像素值和像素数量\n",[68,47689,47690,47693,47695],{"class":70,"line":1990},[68,47691,47692],{"class":335},"            total_pixels ",[68,47694,9682],{"class":331},[68,47696,47697],{"class":335}," normalized_image_array.size\n",[68,47699,47700],{"class":70,"line":2783},[68,47701,47702],{"class":393},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[68,47704,47705,47708,47710,47713,47716,47718,47720,47722,47724,47726],{"class":70,"line":2797},[68,47706,47707],{"class":335},"            sum_normalized_pixel_values ",[68,47709,9682],{"class":331},[68,47711,47712],{"class":335}," np.sum(normalized_image_array, ",[68,47714,47715],{"class":5421},"axis",[68,47717,381],{"class":331},[68,47719,336],{"class":335},[68,47721,525],{"class":82},[68,47723,12640],{"class":335},[68,47725,551],{"class":82},[68,47727,30698],{"class":335},[68,47729,47730],{"class":70,"line":2805},[68,47731,2606],{"emptyLinePlaceholder":260},[68,47733,47734],{"class":70,"line":2810},[68,47735,47736],{"class":393},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[68,47738,47739,47742,47744,47747,47749],{"class":70,"line":2816},[68,47740,47741],{"class":335},"mean ",[68,47743,381],{"class":331},[68,47745,47746],{"class":335}," sum_normalized_pixel_values ",[68,47748,917],{"class":331},[68,47750,47751],{"class":335}," total_pixels\n",[68,47753,47754],{"class":70,"line":2822},[68,47755,2606],{"emptyLinePlaceholder":260},[68,47757,47758,47761,47763,47765,47767],{"class":70,"line":2827},[68,47759,47760],{"class":335},"sum_squared_diff ",[68,47762,381],{"class":331},[68,47764,47544],{"class":335},[68,47766,406],{"class":82},[68,47768,342],{"class":335},[68,47770,47771],{"class":70,"line":8153},[68,47772,2606],{"emptyLinePlaceholder":260},[68,47774,47775],{"class":70,"line":8177},[68,47776,47777],{"class":393},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[68,47779,47780],{"class":70,"line":8182},[68,47781,47782],{"class":393},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[68,47784,47785],{"class":70,"line":8188},[68,47786,47787],{"class":393},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[68,47789,47790],{"class":70,"line":8215},[68,47791,47792],{"class":393},"# Image.open(image_path)：打开图片\n",[68,47794,47795],{"class":70,"line":8220},[68,47796,47797],{"class":393},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[68,47799,47800,47802,47804,47806],{"class":70,"line":8226},[68,47801,3231],{"class":331},[68,47803,47567],{"class":335},[68,47805,26247],{"class":331},[68,47807,47572],{"class":335},[68,47809,47810,47812,47814,47816],{"class":70,"line":8238},[68,47811,3407],{"class":331},[68,47813,47579],{"class":335},[68,47815,26247],{"class":331},[68,47817,47584],{"class":335},[68,47819,47820,47822,47824,47826,47828,47830,47832,47834,47836,47838],{"class":70,"line":8250},[68,47821,2703],{"class":331},[68,47823,47591],{"class":335},[68,47825,47594],{"class":78},[68,47827,12640],{"class":335},[68,47829,47599],{"class":78},[68,47831,12640],{"class":335},[68,47833,47604],{"class":78},[68,47835,12640],{"class":335},[68,47837,47609],{"class":78},[68,47839,47840],{"class":335},")):\n",[68,47842,47843,47845,47847],{"class":70,"line":8262},[68,47844,45874],{"class":335},[68,47846,381],{"class":331},[68,47848,47624],{"class":335},[68,47850,47851,47853,47855],{"class":70,"line":9921},[68,47852,47629],{"class":335},[68,47854,381],{"class":331},[68,47856,47634],{"class":335},[68,47858,47859,47861,47863],{"class":70,"line":9946},[68,47860,47639],{"class":335},[68,47862,381],{"class":331},[68,47864,47644],{"class":335},[68,47866,47867],{"class":70,"line":9969},[68,47868,47653],{"class":393},[68,47870,47871,47873,47875,47877,47879],{"class":70,"line":9993},[68,47872,47658],{"class":335},[68,47874,381],{"class":331},[68,47876,47663],{"class":335},[68,47878,917],{"class":331},[68,47880,47668],{"class":82},[68,47882,47883],{"class":70,"line":9998},[68,47884,47682],{"class":393},[68,47886,47887],{"class":70,"line":10003},[68,47888,47889],{"class":393},"            # print(mean.shape)\n",[68,47891,47892],{"class":70,"line":10008},[68,47893,47677],{"class":393},[68,47895,47896],{"class":70,"line":10017},[68,47897,2606],{"emptyLinePlaceholder":260},[68,47899,47900,47903],{"class":70,"line":10022},[68,47901,47902],{"class":331},"            try",[68,47904,3945],{"class":335},[68,47906,47907,47910,47912,47915,47917,47920,47922],{"class":70,"line":10028},[68,47908,47909],{"class":335},"                diff ",[68,47911,381],{"class":331},[68,47913,47914],{"class":335}," (normalized_image_array ",[68,47916,865],{"class":331},[68,47918,47919],{"class":335}," mean) ",[68,47921,10866],{"class":331},[68,47923,47924],{"class":82}," 2\n",[68,47926,47927,47930,47932,47935,47937,47939,47941,47943,47945,47947],{"class":70,"line":10049},[68,47928,47929],{"class":335},"                sum_squared_diff ",[68,47931,9682],{"class":331},[68,47933,47934],{"class":335}," np.sum(diff, ",[68,47936,47715],{"class":5421},[68,47938,381],{"class":331},[68,47940,336],{"class":335},[68,47942,525],{"class":82},[68,47944,12640],{"class":335},[68,47946,551],{"class":82},[68,47948,30698],{"class":335},[68,47950,47951,47954],{"class":70,"line":10055},[68,47952,47953],{"class":331},"            except",[68,47955,3945],{"class":335},[68,47957,47958,47961,47963,47965,47968],{"class":70,"line":10069},[68,47959,47960],{"class":82},"                print",[68,47962,336],{"class":335},[68,47964,387],{"class":331},[68,47966,47967],{"class":78},"\"捕获到自定义异常\"",[68,47969,342],{"class":335},[68,47971,47972],{"class":70,"line":10075},[68,47973,47974],{"class":393},"            # diff = (normalized_image_array - mean) ** 2\n",[68,47976,47977],{"class":70,"line":10102},[68,47978,47979],{"class":393},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[68,47981,47982],{"class":70,"line":10111},[68,47983,2606],{"emptyLinePlaceholder":260},[68,47985,47986,47989,47991,47994,47996],{"class":70,"line":10117},[68,47987,47988],{"class":335},"variance ",[68,47990,381],{"class":331},[68,47992,47993],{"class":335}," sum_squared_diff ",[68,47995,917],{"class":331},[68,47997,47751],{"class":335},[68,47999,48000],{"class":70,"line":10125},[68,48001,2606],{"emptyLinePlaceholder":260},[68,48003,48004,48006,48008,48011],{"class":70,"line":10130},[68,48005,30616],{"class":82},[68,48007,336],{"class":335},[68,48009,48010],{"class":78},"\"Mean:\"",[68,48012,48013],{"class":335},", mean)\n",[68,48015,48016,48018,48020,48023],{"class":70,"line":16809},[68,48017,30616],{"class":82},[68,48019,336],{"class":335},[68,48021,48022],{"class":78},"\"Variance:\"",[68,48024,48025],{"class":335},", variance)\n",[58,48027,48029],{"className":30579,"code":48028,"language":30581,"meta":63,"style":63},"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",[65,48030,48031,48037,48043,48053,48059,48069,48083,48093,48103,48113,48117,48127,48137,48141,48145,48153,48158,48163,48182,48186,48191,48196,48201,48206,48247,48252,48262,48267,48280,48285,48290,48295,48300,48305,48309,48314,48319,48341,48345,48377,48391,48401,48411,48415,48425,48439,48449,48459,48469,48475,48479,48483,48487,48491,48495,48503,48523,48527,48531,48535,48539,48555,48559,48563,48571,48575,48579,48587,48591,48595,48599,48607,48611,48615,48619,48627,48631,48639,48643,48651,48655,48663,48667,48675,48679,48683,48691,48695,48699,48711,48735,48749,48753,48757,48761,48769,48773,48781,48785,48793,48797,48805,48809,48817,48821,48829,48833,48845,48849,48857,48861,48869,48873,48877,48881,48885,48893,48897,48913,48917,48925,48929,48933,48937,48941,48945,48949,48953,48969,48973,48985,48989,49001,49005,49017,49021,49029,49033,49041,49045,49049,49053,49059,49063,49071,49075,49091,49095,49103,49107,49123,49135,49139,49151,49155,49159,49167,49171,49175,49183,49187,49195,49199,49207,49211,49215,49257,49299,49303,49307,49323,49327,49343,49347,49351,49359,49363,49367,49379,49417,49421,49425,49433,49437,49451,49461,49467,49473,49479,49485,49489,49493,49499,49503,49507,49515,49519,49537,49541,49545,49549,49565,49569,49573,49577,49581,49585,49605,49625,49629,49633,49637,49645,49653,49657,49673,49693,49713,49717,49722,49731,49740,49745,49750,49755,49768,49773,49782,49791,49808],{"__ignoreMap":63},[68,48032,48033,48035],{"class":70,"line":71},[68,48034,30593],{"class":331},[68,48036,32023],{"class":335},[68,48038,48039,48041],{"class":70,"line":92},[68,48040,30593],{"class":331},[68,48042,32030],{"class":335},[68,48044,48045,48047,48049,48051],{"class":70,"line":1387},[68,48046,30593],{"class":331},[68,48048,32041],{"class":335},[68,48050,31584],{"class":331},[68,48052,32046],{"class":335},[68,48054,48055,48057],{"class":70,"line":1402},[68,48056,30593],{"class":331},[68,48058,30596],{"class":335},[68,48060,48061,48063,48065,48067],{"class":70,"line":1408},[68,48062,30938],{"class":331},[68,48064,31616],{"class":335},[68,48066,30593],{"class":331},[68,48068,32063],{"class":335},[68,48070,48071,48073,48075,48077,48080],{"class":70,"line":1422},[68,48072,30938],{"class":331},[68,48074,31569],{"class":335},[68,48076,30593],{"class":331},[68,48078,48079],{"class":335}," ImageFolder ",[68,48081,48082],{"class":393},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[68,48084,48085,48087,48089,48091],{"class":70,"line":1428},[68,48086,30938],{"class":331},[68,48088,31599],{"class":335},[68,48090,30593],{"class":331},[68,48092,31604],{"class":335},[68,48094,48095,48097,48099,48101],{"class":70,"line":1519},[68,48096,30593],{"class":331},[68,48098,31616],{"class":335},[68,48100,31584],{"class":331},[68,48102,31621],{"class":335},[68,48104,48105,48107,48109,48111],{"class":70,"line":1525},[68,48106,30593],{"class":331},[68,48108,31633],{"class":335},[68,48110,31584],{"class":331},[68,48112,31638],{"class":335},[68,48114,48115],{"class":70,"line":1537},[68,48116,32108],{"class":393},[68,48118,48119,48121,48123,48125],{"class":70,"line":1819},[68,48120,30938],{"class":331},[68,48122,32115],{"class":335},[68,48124,30593],{"class":331},[68,48126,43232],{"class":335},[68,48128,48129,48131,48133,48135],{"class":70,"line":1824},[68,48130,30938],{"class":331},[68,48132,30941],{"class":335},[68,48134,30593],{"class":331},[68,48136,30946],{"class":335},[68,48138,48139],{"class":70,"line":1830},[68,48140,2606],{"emptyLinePlaceholder":260},[68,48142,48143],{"class":70,"line":1835},[68,48144,32143],{"class":393},[68,48146,48147,48149,48151],{"class":70,"line":1849},[68,48148,32148],{"class":331},[68,48150,32151],{"class":74},[68,48152,32154],{"class":335},[68,48154,48155],{"class":70,"line":1854},[68,48156,48157],{"class":393},"    # 导入自己的数据集，并进行数据处理\n",[68,48159,48160],{"class":70,"line":1860},[68,48161,48162],{"class":393},"    # 定义数据集的路径\n",[68,48164,48165,48168,48170,48172,48174,48176,48180],{"class":70,"line":1881},[68,48166,48167],{"class":82},"    ROOT_PATH",[68,48169,381],{"class":331},[68,48171,1003],{"class":331},[68,48173,584],{"class":78},[68,48175,891],{"class":82},[68,48177,48179],{"class":48178},"sA_wV","\u002Fdata\u002Ftrain",[68,48181,25337],{"class":78},[68,48183,48184],{"class":70,"line":1886},[68,48185,2606],{"emptyLinePlaceholder":260},[68,48187,48188],{"class":70,"line":1900},[68,48189,48190],{"class":393},"    # 定义归一化方法\n",[68,48192,48193],{"class":70,"line":1905},[68,48194,48195],{"class":393},"    # 这里需要先计算一下数据集的均值和方差\n",[68,48197,48198],{"class":70,"line":1934},[68,48199,48200],{"class":393},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[68,48202,48203],{"class":70,"line":1939},[68,48204,48205],{"class":393},"    # 第一个参数是均值，第二个参数是方差\n",[68,48207,48208,48211,48213,48216,48219,48221,48224,48226,48229,48232,48235,48237,48240,48242,48245],{"class":70,"line":1956},[68,48209,48210],{"class":335},"    normalize",[68,48212,381],{"class":331},[68,48214,48215],{"class":335},"transforms.Normalize([",[68,48217,48218],{"class":82},"0.162",[68,48220,711],{"class":335},[68,48222,48223],{"class":82},"0.151",[68,48225,711],{"class":335},[68,48227,48228],{"class":82},"0.138",[68,48230,48231],{"class":335},"],[",[68,48233,48234],{"class":82},"0.058",[68,48236,711],{"class":335},[68,48238,48239],{"class":82},"0.052",[68,48241,711],{"class":335},[68,48243,48244],{"class":82},"0.048",[68,48246,4863],{"class":335},[68,48248,48249],{"class":70,"line":1961},[68,48250,48251],{"class":393},"    # 定义数据集处理方法变量\n",[68,48253,48254,48257,48259],{"class":70,"line":1966},[68,48255,48256],{"class":335},"    train_transform",[68,48258,381],{"class":331},[68,48260,48261],{"class":335},"transforms.Compose([\n",[68,48263,48264],{"class":70,"line":1971},[68,48265,48266],{"class":393},"        # 调整图像大小为224*224\n",[68,48268,48269,48272,48274,48276,48278],{"class":70,"line":1985},[68,48270,48271],{"class":335},"        transforms.Resize((",[68,48273,31702],{"class":82},[68,48275,711],{"class":335},[68,48277,31702],{"class":82},[68,48279,42823],{"class":335},[68,48281,48282],{"class":70,"line":1990},[68,48283,48284],{"class":393},"        # 将图像转换为张量\n",[68,48286,48287],{"class":70,"line":2783},[68,48288,48289],{"class":335},"        transforms.ToTensor(),\n",[68,48291,48292],{"class":70,"line":2797},[68,48293,48294],{"class":335},"        normalize])\n",[68,48296,48297],{"class":70,"line":2805},[68,48298,48299],{"class":393},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[68,48301,48302],{"class":70,"line":2810},[68,48303,48304],{"class":393},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[68,48306,48307],{"class":70,"line":2816},[68,48308,2606],{"emptyLinePlaceholder":260},[68,48310,48311],{"class":70,"line":2822},[68,48312,48313],{"class":393},"    # 加载数据集\n",[68,48315,48316],{"class":70,"line":2827},[68,48317,48318],{"class":393},"    # 传入数据集路径与处理方法\n",[68,48320,48321,48323,48325,48328,48331,48333,48336,48338],{"class":70,"line":8153},[68,48322,32159],{"class":335},[68,48324,381],{"class":331},[68,48326,48327],{"class":335},"ImageFolder(",[68,48329,48330],{"class":82},"ROOT_PATH",[68,48332,711],{"class":335},[68,48334,48335],{"class":5421},"transform",[68,48337,381],{"class":331},[68,48339,48340],{"class":335},"train_transform)\n",[68,48342,48343],{"class":70,"line":8177},[68,48344,2606],{"emptyLinePlaceholder":260},[68,48346,48347,48349,48351,48353,48355,48357,48359,48361,48363,48365,48367,48369,48371,48373,48375],{"class":70,"line":8182},[68,48348,32211],{"class":335},[68,48350,381],{"class":331},[68,48352,32216],{"class":335},[68,48354,32219],{"class":82},[68,48356,336],{"class":335},[68,48358,32224],{"class":82},[68,48360,788],{"class":331},[68,48362,7563],{"class":82},[68,48364,32231],{"class":335},[68,48366,32219],{"class":82},[68,48368,336],{"class":335},[68,48370,32238],{"class":82},[68,48372,788],{"class":331},[68,48374,7563],{"class":82},[68,48376,32245],{"class":335},[68,48378,48379,48381,48383,48385,48387,48389],{"class":70,"line":8188},[68,48380,32250],{"class":335},[68,48382,381],{"class":331},[68,48384,32255],{"class":335},[68,48386,31738],{"class":5421},[68,48388,381],{"class":331},[68,48390,31743],{"class":335},[68,48392,48393,48395,48397,48399],{"class":70,"line":8215},[68,48394,32266],{"class":5421},[68,48396,381],{"class":331},[68,48398,531],{"class":82},[68,48400,31667],{"class":335},[68,48402,48403,48405,48407,48409],{"class":70,"line":8220},[68,48404,32278],{"class":5421},[68,48406,381],{"class":331},[68,48408,31677],{"class":82},[68,48410,31667],{"class":335},[68,48412,48413],{"class":70,"line":8226},[68,48414,32289],{"class":393},[68,48416,48417,48419,48421,48423],{"class":70,"line":8238},[68,48418,32294],{"class":5421},[68,48420,381],{"class":331},[68,48422,728],{"class":82},[68,48424,342],{"class":335},[68,48426,48427,48429,48431,48433,48435,48437],{"class":70,"line":8250},[68,48428,32305],{"class":335},[68,48430,381],{"class":331},[68,48432,31735],{"class":335},[68,48434,31738],{"class":5421},[68,48436,381],{"class":331},[68,48438,32316],{"class":335},[68,48440,48441,48443,48445,48447],{"class":70,"line":8262},[68,48442,32321],{"class":5421},[68,48444,381],{"class":331},[68,48446,531],{"class":82},[68,48448,31667],{"class":335},[68,48450,48451,48453,48455,48457],{"class":70,"line":9921},[68,48452,32332],{"class":5421},[68,48454,381],{"class":331},[68,48456,31677],{"class":82},[68,48458,31667],{"class":335},[68,48460,48461,48463,48465,48467],{"class":70,"line":9946},[68,48462,32343],{"class":5421},[68,48464,381],{"class":331},[68,48466,728],{"class":82},[68,48468,342],{"class":335},[68,48470,48471,48473],{"class":70,"line":9969},[68,48472,4296],{"class":331},[68,48474,32356],{"class":335},[68,48476,48477],{"class":70,"line":9993},[68,48478,2606],{"emptyLinePlaceholder":260},[68,48480,48481],{"class":70,"line":9998},[68,48482,32365],{"class":393},[68,48484,48485],{"class":70,"line":10003},[68,48486,32370],{"class":393},[68,48488,48489],{"class":70,"line":10008},[68,48490,2606],{"emptyLinePlaceholder":260},[68,48492,48493],{"class":70,"line":10017},[68,48494,32379],{"class":393},[68,48496,48497,48499,48501],{"class":70,"line":10022},[68,48498,32148],{"class":331},[68,48500,32386],{"class":74},[68,48502,32389],{"class":335},[68,48504,48505,48507,48509,48511,48513,48515,48517,48519,48521],{"class":70,"line":10028},[68,48506,31438],{"class":335},[68,48508,381],{"class":331},[68,48510,30652],{"class":335},[68,48512,31445],{"class":78},[68,48514,1911],{"class":331},[68,48516,31450],{"class":335},[68,48518,1908],{"class":331},[68,48520,32408],{"class":78},[68,48522,342],{"class":335},[68,48524,48525],{"class":70,"line":10049},[68,48526,2606],{"emptyLinePlaceholder":260},[68,48528,48529],{"class":70,"line":10055},[68,48530,32423],{"class":393},[68,48532,48533],{"class":70,"line":10069},[68,48534,32428],{"class":393},[68,48536,48537],{"class":70,"line":10075},[68,48538,32433],{"class":393},[68,48540,48541,48543,48545,48547,48549,48551,48553],{"class":70,"line":10102},[68,48542,32438],{"class":335},[68,48544,381],{"class":331},[68,48546,32443],{"class":335},[68,48548,32446],{"class":5421},[68,48550,381],{"class":331},[68,48552,32451],{"class":82},[68,48554,342],{"class":335},[68,48556,48557],{"class":70,"line":10111},[68,48558,2606],{"emptyLinePlaceholder":260},[68,48560,48561],{"class":70,"line":10117},[68,48562,32462],{"class":393},[68,48564,48565,48567,48569],{"class":70,"line":10125},[68,48566,32467],{"class":335},[68,48568,381],{"class":331},[68,48570,32472],{"class":335},[68,48572,48573],{"class":70,"line":10130},[68,48574,2606],{"emptyLinePlaceholder":260},[68,48576,48577],{"class":70,"line":16809},[68,48578,32481],{"class":393},[68,48580,48581,48583,48585],{"class":70,"line":16815},[68,48582,31490],{"class":335},[68,48584,381],{"class":331},[68,48586,32490],{"class":335},[68,48588,48589],{"class":70,"line":16838},[68,48590,32495],{"class":393},[68,48592,48593],{"class":70,"line":16844},[68,48594,32500],{"class":393},[68,48596,48597],{"class":70,"line":16867},[68,48598,32505],{"class":393},[68,48600,48601,48603,48605],{"class":70,"line":16881},[68,48602,32510],{"class":335},[68,48604,381],{"class":331},[68,48606,32515],{"class":335},[68,48608,48609],{"class":70,"line":16901},[68,48610,2606],{"emptyLinePlaceholder":260},[68,48612,48613],{"class":70,"line":16907},[68,48614,32528],{"class":393},[68,48616,48617],{"class":70,"line":16918},[68,48618,32533],{"class":393},[68,48620,48621,48623,48625],{"class":70,"line":16941},[68,48622,32538],{"class":335},[68,48624,381],{"class":331},[68,48626,32543],{"class":82},[68,48628,48629],{"class":70,"line":16963},[68,48630,32548],{"class":393},[68,48632,48633,48635,48637],{"class":70,"line":16968},[68,48634,32553],{"class":335},[68,48636,381],{"class":331},[68,48638,32558],{"class":335},[68,48640,48641],{"class":70,"line":16974},[68,48642,32563],{"class":393},[68,48644,48645,48647,48649],{"class":70,"line":16988},[68,48646,32568],{"class":335},[68,48648,381],{"class":331},[68,48650,32558],{"class":335},[68,48652,48653],{"class":70,"line":17001},[68,48654,32577],{"class":393},[68,48656,48657,48659,48661],{"class":70,"line":17006},[68,48658,32582],{"class":335},[68,48660,381],{"class":331},[68,48662,32558],{"class":335},[68,48664,48665],{"class":70,"line":17020},[68,48666,32591],{"class":393},[68,48668,48669,48671,48673],{"class":70,"line":17025},[68,48670,32596],{"class":335},[68,48672,381],{"class":331},[68,48674,32558],{"class":335},[68,48676,48677],{"class":70,"line":17031},[68,48678,2606],{"emptyLinePlaceholder":260},[68,48680,48681],{"class":70,"line":17036},[68,48682,32609],{"class":393},[68,48684,48685,48687,48689],{"class":70,"line":17050},[68,48686,32614],{"class":335},[68,48688,381],{"class":331},[68,48690,32619],{"class":335},[68,48692,48693],{"class":70,"line":17055},[68,48694,2606],{"emptyLinePlaceholder":260},[68,48696,48697],{"class":70,"line":17060},[68,48698,32632],{"class":393},[68,48700,48701,48703,48705,48707,48709],{"class":70,"line":17074},[68,48702,3407],{"class":331},[68,48704,32639],{"class":335},[68,48706,26247],{"class":331},[68,48708,32644],{"class":82},[68,48710,32647],{"class":335},[68,48712,48713,48715,48717,48719,48721,48723,48725,48727,48729,48731,48733],{"class":70,"line":17086},[68,48714,32652],{"class":82},[68,48716,336],{"class":335},[68,48718,32657],{"class":78},[68,48720,32660],{"class":82},[68,48722,917],{"class":78},[68,48724,32660],{"class":82},[68,48726,584],{"class":78},[68,48728,32669],{"class":335},[68,48730,865],{"class":331},[68,48732,551],{"class":82},[68,48734,30698],{"class":335},[68,48736,48737,48739,48741,48743,48745,48747],{"class":70,"line":17091},[68,48738,32652],{"class":82},[68,48740,336],{"class":335},[68,48742,32684],{"class":78},[68,48744,788],{"class":331},[68,48746,779],{"class":82},[68,48748,342],{"class":335},[68,48750,48751],{"class":70,"line":17104},[68,48752,2606],{"emptyLinePlaceholder":260},[68,48754,48755],{"class":70,"line":17109},[68,48756,32699],{"class":393},[68,48758,48759],{"class":70,"line":17114},[68,48760,32704],{"class":393},[68,48762,48763,48765,48767],{"class":70,"line":17119},[68,48764,32709],{"class":335},[68,48766,381],{"class":331},[68,48768,32543],{"class":82},[68,48770,48771],{"class":70,"line":17132},[68,48772,32718],{"class":393},[68,48774,48775,48777,48779],{"class":70,"line":17137},[68,48776,32723],{"class":335},[68,48778,381],{"class":331},[68,48780,3291],{"class":82},[68,48782,48783],{"class":70,"line":32834},[68,48784,32732],{"class":393},[68,48786,48787,48789,48791],{"class":70,"line":32840},[68,48788,32737],{"class":335},[68,48790,381],{"class":331},[68,48792,32543],{"class":82},[68,48794,48795],{"class":70,"line":32846},[68,48796,32746],{"class":393},[68,48798,48799,48801,48803],{"class":70,"line":32852},[68,48800,32751],{"class":335},[68,48802,381],{"class":331},[68,48804,3291],{"class":82},[68,48806,48807],{"class":70,"line":32858},[68,48808,32760],{"class":393},[68,48810,48811,48813,48815],{"class":70,"line":32869},[68,48812,32765],{"class":335},[68,48814,381],{"class":331},[68,48816,3291],{"class":82},[68,48818,48819],{"class":70,"line":32875},[68,48820,32774],{"class":393},[68,48822,48823,48825,48827],{"class":70,"line":32895},[68,48824,32779],{"class":335},[68,48826,381],{"class":331},[68,48828,3291],{"class":82},[68,48830,48831],{"class":70,"line":32901},[68,48832,32788],{"class":393},[68,48834,48835,48837,48839,48841,48843],{"class":70,"line":32912},[68,48836,3609],{"class":331},[68,48838,31802],{"class":335},[68,48840,26247],{"class":331},[68,48842,31807],{"class":82},[68,48844,32801],{"class":335},[68,48846,48847],{"class":70,"line":32918},[68,48848,32806],{"class":393},[68,48850,48851,48853,48855],{"class":70,"line":32924},[68,48852,32811],{"class":335},[68,48854,381],{"class":331},[68,48856,32816],{"class":335},[68,48858,48859],{"class":70,"line":32930},[68,48860,32821],{"class":393},[68,48862,48863,48865,48867],{"class":70,"line":32936},[68,48864,32826],{"class":335},[68,48866,381],{"class":331},[68,48868,32831],{"class":335},[68,48870,48871],{"class":70,"line":32942},[68,48872,32837],{"class":393},[68,48874,48875],{"class":70,"line":32948},[68,48876,32843],{"class":335},[68,48878,48879],{"class":70,"line":32954},[68,48880,32849],{"class":393},[68,48882,48883],{"class":70,"line":32974},[68,48884,32855],{"class":393},[68,48886,48887,48889,48891],{"class":70,"line":32980},[68,48888,32861],{"class":335},[68,48890,381],{"class":331},[68,48892,32866],{"class":335},[68,48894,48895],{"class":70,"line":32996},[68,48896,32872],{"class":393},[68,48898,48899,48901,48903,48905,48907,48909,48911],{"class":70,"line":33002},[68,48900,32878],{"class":335},[68,48902,381],{"class":331},[68,48904,32883],{"class":335},[68,48906,32886],{"class":5421},[68,48908,381],{"class":331},[68,48910,551],{"class":82},[68,48912,342],{"class":335},[68,48914,48915],{"class":70,"line":33016},[68,48916,32898],{"class":393},[68,48918,48919,48921,48923],{"class":70,"line":33022},[68,48920,32904],{"class":335},[68,48922,381],{"class":331},[68,48924,32909],{"class":335},[68,48926,48927],{"class":70,"line":33037},[68,48928,32915],{"class":393},[68,48930,48931],{"class":70,"line":33043},[68,48932,32921],{"class":335},[68,48934,48935],{"class":70,"line":33052},[68,48936,32927],{"class":393},[68,48938,48939],{"class":70,"line":33058},[68,48940,32933],{"class":335},[68,48942,48943],{"class":70,"line":33067},[68,48944,32939],{"class":393},[68,48946,48947],{"class":70,"line":33073},[68,48948,32945],{"class":335},[68,48950,48951],{"class":70,"line":33079},[68,48952,32951],{"class":393},[68,48954,48955,48957,48959,48961,48963,48965,48967],{"class":70,"line":33088},[68,48956,32957],{"class":335},[68,48958,9682],{"class":331},[68,48960,32962],{"class":335},[68,48962,788],{"class":331},[68,48964,32967],{"class":335},[68,48966,525],{"class":82},[68,48968,342],{"class":335},[68,48970,48971],{"class":70,"line":33094},[68,48972,32977],{"class":393},[68,48974,48975,48977,48979,48981,48983],{"class":70,"line":33105},[68,48976,32983],{"class":335},[68,48978,9682],{"class":331},[68,48980,32988],{"class":335},[68,48982,3155],{"class":331},[68,48984,32993],{"class":335},[68,48986,48987],{"class":70,"line":33111},[68,48988,32999],{"class":393},[68,48990,48991,48993,48995,48997,48999],{"class":70,"line":33130},[68,48992,33005],{"class":335},[68,48994,9682],{"class":331},[68,48996,32967],{"class":335},[68,48998,525],{"class":82},[68,49000,342],{"class":335},[68,49002,49003],{"class":70,"line":33136},[68,49004,33019],{"class":393},[68,49006,49007,49009,49011,49013,49015],{"class":70,"line":33147},[68,49008,3609],{"class":331},[68,49010,33027],{"class":335},[68,49012,26247],{"class":331},[68,49014,31807],{"class":82},[68,49016,33034],{"class":335},[68,49018,49019],{"class":70,"line":33153},[68,49020,33040],{"class":393},[68,49022,49023,49025,49027],{"class":70,"line":33173},[68,49024,32811],{"class":335},[68,49026,381],{"class":331},[68,49028,32816],{"class":335},[68,49030,49031],{"class":70,"line":33189},[68,49032,33055],{"class":393},[68,49034,49035,49037,49039],{"class":70,"line":33195},[68,49036,32826],{"class":335},[68,49038,381],{"class":331},[68,49040,32831],{"class":335},[68,49042,49043],{"class":70,"line":33209},[68,49044,33070],{"class":393},[68,49046,49047],{"class":70,"line":33215},[68,49048,33076],{"class":335},[68,49050,49051],{"class":70,"line":33221},[68,49052,36557],{"class":393},[68,49054,49055,49057],{"class":70,"line":33232},[68,49056,33082],{"class":331},[68,49058,33085],{"class":335},[68,49060,49061],{"class":70,"line":33238},[68,49062,33091],{"class":393},[68,49064,49065,49067,49069],{"class":70,"line":33244},[68,49066,36572],{"class":335},[68,49068,381],{"class":331},[68,49070,32866],{"class":335},[68,49072,49073],{"class":70,"line":33254},[68,49074,33108],{"class":393},[68,49076,49077,49079,49081,49083,49085,49087,49089],{"class":70,"line":33260},[68,49078,36585],{"class":335},[68,49080,381],{"class":331},[68,49082,32883],{"class":335},[68,49084,32886],{"class":5421},[68,49086,381],{"class":331},[68,49088,551],{"class":82},[68,49090,342],{"class":335},[68,49092,49093],{"class":70,"line":33271},[68,49094,33133],{"class":393},[68,49096,49097,49099,49101],{"class":70,"line":33277},[68,49098,36606],{"class":335},[68,49100,381],{"class":331},[68,49102,32909],{"class":335},[68,49104,49105],{"class":70,"line":33287},[68,49106,33150],{"class":393},[68,49108,49109,49111,49113,49115,49117,49119,49121],{"class":70,"line":33292},[68,49110,36619],{"class":335},[68,49112,9682],{"class":331},[68,49114,36624],{"class":335},[68,49116,788],{"class":331},[68,49118,32967],{"class":335},[68,49120,525],{"class":82},[68,49122,342],{"class":335},[68,49124,49125,49127,49129,49131,49133],{"class":70,"line":33298},[68,49126,36637],{"class":335},[68,49128,9682],{"class":331},[68,49130,32988],{"class":335},[68,49132,3155],{"class":331},[68,49134,32993],{"class":335},[68,49136,49137],{"class":70,"line":33347},[68,49138,36650],{"class":393},[68,49140,49141,49143,49145,49147,49149],{"class":70,"line":33394},[68,49142,36655],{"class":335},[68,49144,9682],{"class":331},[68,49146,32967],{"class":335},[68,49148,525],{"class":82},[68,49150,342],{"class":335},[68,49152,49153],{"class":70,"line":33399},[68,49154,33212],{"class":393},[68,49156,49157],{"class":70,"line":33405},[68,49158,33218],{"class":393},[68,49160,49161,49163,49165],{"class":70,"line":33424},[68,49162,33224],{"class":335},[68,49164,917],{"class":331},[68,49166,33229],{"class":335},[68,49168,49169],{"class":70,"line":33430},[68,49170,33235],{"class":393},[68,49172,49173],{"class":70,"line":33450},[68,49174,33241],{"class":393},[68,49176,49177,49179,49181],{"class":70,"line":33456},[68,49178,33247],{"class":335},[68,49180,917],{"class":331},[68,49182,33229],{"class":335},[68,49184,49185],{"class":70,"line":33462},[68,49186,33257],{"class":393},[68,49188,49189,49191,49193],{"class":70,"line":33472},[68,49190,33263],{"class":335},[68,49192,917],{"class":331},[68,49194,33268],{"class":335},[68,49196,49197],{"class":70,"line":33477},[68,49198,33274],{"class":393},[68,49200,49201,49203,49205],{"class":70,"line":33483},[68,49202,33280],{"class":335},[68,49204,917],{"class":331},[68,49206,33268],{"class":335},[68,49208,49209],{"class":70,"line":33499},[68,49210,2606],{"emptyLinePlaceholder":260},[68,49212,49213],{"class":70,"line":33544},[68,49214,33295],{"class":393},[68,49216,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237,49239,49241,49243,49245,49247,49249,49251,49253,49255],{"class":70,"line":33550},[68,49218,32652],{"class":82},[68,49220,336],{"class":335},[68,49222,3798],{"class":78},[68,49224,32660],{"class":82},[68,49226,33309],{"class":78},[68,49228,1229],{"class":82},[68,49230,33314],{"class":331},[68,49232,1279],{"class":82},[68,49234,33319],{"class":78},[68,49236,1229],{"class":82},[68,49238,33314],{"class":331},[68,49240,1279],{"class":82},[68,49242,3798],{"class":78},[68,49244,33330],{"class":335},[68,49246,865],{"class":331},[68,49248,551],{"class":82},[68,49250,33337],{"class":335},[68,49252,865],{"class":331},[68,49254,551],{"class":82},[68,49256,33344],{"class":335},[68,49258,49259,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289,49291,49293,49295,49297],{"class":70,"line":33556},[68,49260,32652],{"class":82},[68,49262,336],{"class":335},[68,49264,3798],{"class":78},[68,49266,32660],{"class":82},[68,49268,33358],{"class":78},[68,49270,1229],{"class":82},[68,49272,33314],{"class":331},[68,49274,1279],{"class":82},[68,49276,33367],{"class":78},[68,49278,1229],{"class":82},[68,49280,33314],{"class":331},[68,49282,1279],{"class":82},[68,49284,3798],{"class":78},[68,49286,33378],{"class":335},[68,49288,865],{"class":331},[68,49290,551],{"class":82},[68,49292,33385],{"class":335},[68,49294,865],{"class":331},[68,49296,551],{"class":82},[68,49298,33344],{"class":335},[68,49300,49301],{"class":70,"line":33562},[68,49302,2606],{"emptyLinePlaceholder":260},[68,49304,49305],{"class":70,"line":33573},[68,49306,33402],{"class":393},[68,49308,49309,49311,49313,49315,49317,49319,49321],{"class":70,"line":33579},[68,49310,2703],{"class":331},[68,49312,33410],{"class":335},[68,49314,865],{"class":331},[68,49316,551],{"class":82},[68,49318,1273],{"class":335},[68,49320,1293],{"class":331},[68,49322,33421],{"class":335},[68,49324,49325],{"class":70,"line":33585},[68,49326,33427],{"class":393},[68,49328,49329,49331,49333,49335,49337,49339,49341],{"class":70,"line":33591},[68,49330,33433],{"class":335},[68,49332,375],{"class":82},[68,49334,381],{"class":331},[68,49336,33440],{"class":335},[68,49338,865],{"class":331},[68,49340,551],{"class":82},[68,49342,33447],{"class":335},[68,49344,49345],{"class":70,"line":33609},[68,49346,33453],{"class":393},[68,49348,49349],{"class":70,"line":33623},[68,49350,33459],{"class":393},[68,49352,49353,49355,49357],{"class":70,"line":33632},[68,49354,33465],{"class":335},[68,49356,381],{"class":331},[68,49358,32515],{"class":335},[68,49360,49361],{"class":70,"line":33641},[68,49362,2606],{"emptyLinePlaceholder":260},[68,49364,49365],{"class":70,"line":33650},[68,49366,33480],{"class":393},[68,49368,49369,49371,49373,49375,49377],{"class":70,"line":33659},[68,49370,33486],{"class":335},[68,49372,381],{"class":331},[68,49374,33491],{"class":335},[68,49376,865],{"class":331},[68,49378,33496],{"class":335},[68,49380,49381,49383,49385,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405,49407,49409,49411,49413,49415],{"class":70,"line":33665},[68,49382,32652],{"class":82},[68,49384,336],{"class":335},[68,49386,33506],{"class":78},[68,49388,1229],{"class":82},[68,49390,33511],{"class":331},[68,49392,1279],{"class":82},[68,49394,877],{"class":78},[68,49396,1229],{"class":82},[68,49398,33511],{"class":331},[68,49400,1279],{"class":82},[68,49402,33524],{"class":78},[68,49404,33527],{"class":335},[68,49406,33530],{"class":331},[68,49408,1240],{"class":82},[68,49410,33535],{"class":335},[68,49412,661],{"class":331},[68,49414,1240],{"class":82},[68,49416,30698],{"class":335},[68,49418,49419],{"class":70,"line":33671},[68,49420,36934],{"class":393},[68,49422,49423],{"class":70,"line":33679},[68,49424,36939],{"class":393},[68,49426,49427,49429,49431],{"class":70,"line":33684},[68,49428,36944],{"class":335},[68,49430,33568],{"class":78},[68,49432,342],{"class":335},[68,49434,49435],{"class":70,"line":33690},[68,49436,33588],{"class":393},[68,49438,49439,49441,49443,49445,49447,49449],{"class":70,"line":33701},[68,49440,33594],{"class":335},[68,49442,381],{"class":331},[68,49444,33599],{"class":335},[68,49446,33602],{"class":5421},[68,49448,381],{"class":331},[68,49450,1753],{"class":335},[68,49452,49453,49455,49457,49459],{"class":70,"line":33707},[68,49454,33612],{"class":78},[68,49456,1192],{"class":335},[68,49458,33617],{"class":82},[68,49460,33620],{"class":335},[68,49462,49463,49465],{"class":70,"line":33727},[68,49464,33626],{"class":78},[68,49466,33629],{"class":335},[68,49468,49469,49471],{"class":70,"line":33733},[68,49470,33635],{"class":78},[68,49472,33638],{"class":335},[68,49474,49475,49477],{"class":70,"line":33739},[68,49476,33644],{"class":78},[68,49478,33647],{"class":335},[68,49480,49481,49483],{"class":70,"line":33745},[68,49482,33653],{"class":78},[68,49484,33656],{"class":335},[68,49486,49487],{"class":70,"line":33762},[68,49488,33662],{"class":335},[68,49490,49491],{"class":70,"line":33768},[68,49492,33668],{"class":393},[68,49494,49495,49497],{"class":70,"line":33774},[68,49496,4296],{"class":331},[68,49498,33676],{"class":335},[68,49500,49501],{"class":70,"line":33780},[68,49502,2606],{"emptyLinePlaceholder":260},[68,49504,49505],{"class":70,"line":33786},[68,49506,33687],{"class":393},[68,49508,49509,49511,49513],{"class":70,"line":33792},[68,49510,32148],{"class":331},[68,49512,33695],{"class":74},[68,49514,33698],{"class":335},[68,49516,49517],{"class":70,"line":33819},[68,49518,33704],{"class":393},[68,49520,49521,49523,49525,49527,49529,49531,49533,49535],{"class":70,"line":33843},[68,49522,33710],{"class":335},[68,49524,31894],{"class":5421},[68,49526,381],{"class":331},[68,49528,336],{"class":335},[68,49530,831],{"class":82},[68,49532,711],{"class":335},[68,49534,626],{"class":82},[68,49536,30698],{"class":335},[68,49538,49539],{"class":70,"line":33849},[68,49540,33730],{"class":393},[68,49542,49543],{"class":70,"line":33855},[68,49544,33736],{"class":393},[68,49546,49547],{"class":70,"line":33861},[68,49548,33742],{"class":393},[68,49550,49551,49553,49555,49557,49559,49561,49563],{"class":70,"line":33872},[68,49552,31928],{"class":335},[68,49554,551],{"class":82},[68,49556,711],{"class":335},[68,49558,412],{"class":82},[68,49560,711],{"class":335},[68,49562,551],{"class":82},[68,49564,342],{"class":335},[68,49566,49567],{"class":70,"line":33883},[68,49568,33765],{"class":393},[68,49570,49571],{"class":70,"line":33889},[68,49572,33771],{"class":393},[68,49574,49575],{"class":70,"line":33906},[68,49576,33777],{"class":393},[68,49578,49579],{"class":70,"line":33929},[68,49580,33783],{"class":393},[68,49582,49583],{"class":70,"line":33952},[68,49584,33789],{"class":393},[68,49586,49587,49589,49591,49593,49595,49597,49599,49601,49603],{"class":70,"line":33958},[68,49588,33795],{"class":335},[68,49590,33798],{"class":78},[68,49592,33801],{"class":335},[68,49594,33804],{"class":78},[68,49596,711],{"class":335},[68,49598,33809],{"class":5421},[68,49600,381],{"class":331},[68,49602,33814],{"class":78},[68,49604,342],{"class":335},[68,49606,49607,49609,49611,49613,49615,49617,49619,49621,49623],{"class":70,"line":33963},[68,49608,33795],{"class":335},[68,49610,33798],{"class":78},[68,49612,33826],{"class":335},[68,49614,33829],{"class":78},[68,49616,711],{"class":335},[68,49618,33809],{"class":5421},[68,49620,381],{"class":331},[68,49622,33838],{"class":78},[68,49624,342],{"class":335},[68,49626,49627],{"class":70,"line":33972},[68,49628,33846],{"class":393},[68,49630,49631],{"class":70,"line":33982},[68,49632,33852],{"class":335},[68,49634,49635],{"class":70,"line":33988},[68,49636,33858],{"class":393},[68,49638,49639,49641,49643],{"class":70,"line":33993},[68,49640,33864],{"class":335},[68,49642,33867],{"class":78},[68,49644,342],{"class":335},[68,49646,49647,49649,49651],{"class":70,"line":33999},[68,49648,33875],{"class":335},[68,49650,33878],{"class":78},[68,49652,342],{"class":335},[68,49654,49655],{"class":70,"line":34012},[68,49656,33886],{"class":393},[68,49658,49659,49661,49663,49665,49667,49669,49671],{"class":70,"line":34018},[68,49660,31928],{"class":335},[68,49662,551],{"class":82},[68,49664,711],{"class":335},[68,49666,412],{"class":82},[68,49668,711],{"class":335},[68,49670,412],{"class":82},[68,49672,342],{"class":335},[68,49674,49675,49677,49679,49681,49683,49685,49687,49689,49691],{"class":70,"line":34029},[68,49676,33795],{"class":335},[68,49678,33798],{"class":78},[68,49680,33913],{"class":335},[68,49682,33804],{"class":78},[68,49684,711],{"class":335},[68,49686,33809],{"class":5421},[68,49688,381],{"class":331},[68,49690,33924],{"class":78},[68,49692,342],{"class":335},[68,49694,49695,49697,49699,49701,49703,49705,49707,49709,49711],{"class":70,"line":34040},[68,49696,33795],{"class":335},[68,49698,33798],{"class":78},[68,49700,33936],{"class":335},[68,49702,33829],{"class":78},[68,49704,711],{"class":335},[68,49706,33809],{"class":5421},[68,49708,381],{"class":331},[68,49710,33947],{"class":78},[68,49712,342],{"class":335},[68,49714,49715],{"class":70,"line":34059},[68,49716,33955],{"class":393},[68,49718,49720],{"class":70,"line":49719},219,[68,49721,33852],{"class":335},[68,49723,49725,49727,49729],{"class":70,"line":49724},220,[68,49726,33864],{"class":335},[68,49728,33798],{"class":78},[68,49730,342],{"class":335},[68,49732,49734,49736,49738],{"class":70,"line":49733},221,[68,49735,33875],{"class":335},[68,49737,33977],{"class":78},[68,49739,342],{"class":335},[68,49741,49743],{"class":70,"line":49742},222,[68,49744,33985],{"class":335},[68,49746,49748],{"class":70,"line":49747},223,[68,49749,2606],{"emptyLinePlaceholder":260},[68,49751,49753],{"class":70,"line":49752},224,[68,49754,33996],{"class":393},[68,49756,49758,49760,49762,49764,49766],{"class":70,"line":49757},225,[68,49759,1738],{"class":331},[68,49761,31421],{"class":82},[68,49763,3155],{"class":331},[68,49765,31426],{"class":78},[68,49767,3945],{"class":335},[68,49769,49771],{"class":70,"line":49770},226,[68,49772,34015],{"class":393},[68,49774,49776,49778,49780],{"class":70,"line":49775},227,[68,49777,44747],{"class":335},[68,49779,381],{"class":331},[68,49781,44752],{"class":335},[68,49783,49785,49787,49789],{"class":70,"line":49784},228,[68,49786,34032],{"class":335},[68,49788,381],{"class":331},[68,49790,34037],{"class":335},[68,49792,49794,49796,49798,49800,49802,49804,49806],{"class":70,"line":49793},229,[68,49795,33594],{"class":335},[68,49797,381],{"class":331},[68,49799,44769],{"class":335},[68,49801,34050],{"class":5421},[68,49803,381],{"class":331},[68,49805,1240],{"class":82},[68,49807,342],{"class":335},[68,49809,49811],{"class":70,"line":49810},230,[68,49812,34062],{"class":335},[22203,49814,49816],{"id":49815},"_242测试代码","2.4.2.测试代码",[19,49818,49819],{},"使用测试集进行测试与推理",[58,49821,49823],{"className":30579,"code":49822,"language":30581,"meta":63,"style":63},"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",[65,49824,49825,49831,49841,49851,49862,49872,49876,49880,49888,49893,49897,49914,49918,49922,49926,49930,49934,49966,49970,49978,49982,49994,49998,50002,50006,50010,50014,50018,50022,50026,50044,50058,50062,50072,50082,50092,50098,50102,50106,50114,50118,50134,50142,50146,50150,50158,50166,50170,50174,50178,50182,50188,50192,50202,50210,50218,50222,50226,50230,50238,50242,50258,50262,50266,50270,50282,50286,50298,50302,50306,50318,50322,50332,50336,50340,50352,50356,50364,50368,50372,50380,50384,50392,50396,50400,50404,50408,50412,50428,50436,50440,50444,50462,50468,50472,50482,50490,50498,50502,50506,50510,50514,50522,50526,50542,50546,50554,50562],{"__ignoreMap":63},[68,49826,49827,49829],{"class":70,"line":71},[68,49828,30593],{"class":331},[68,49830,30596],{"class":335},[68,49832,49833,49835,49837,49839],{"class":70,"line":92},[68,49834,30593],{"class":331},[68,49836,31616],{"class":335},[68,49838,31584],{"class":331},[68,49840,31621],{"class":335},[68,49842,49843,49845,49847,49849],{"class":70,"line":1387},[68,49844,30938],{"class":331},[68,49846,31599],{"class":335},[68,49848,30593],{"class":331},[68,49850,31604],{"class":335},[68,49852,49853,49855,49857,49859],{"class":70,"line":1402},[68,49854,30938],{"class":331},[68,49856,31569],{"class":335},[68,49858,30593],{"class":331},[68,49860,49861],{"class":335}," ImageFolder\n",[68,49863,49864,49866,49868,49870],{"class":70,"line":1408},[68,49865,30938],{"class":331},[68,49867,32115],{"class":335},[68,49869,30593],{"class":331},[68,49871,44841],{"class":335},[68,49873,49874],{"class":70,"line":1422},[68,49875,2606],{"emptyLinePlaceholder":260},[68,49877,49878],{"class":70,"line":1428},[68,49879,34152],{"class":393},[68,49881,49882,49884,49886],{"class":70,"line":1519},[68,49883,32148],{"class":331},[68,49885,34159],{"class":74},[68,49887,32154],{"class":335},[68,49889,49890],{"class":70,"line":1525},[68,49891,49892],{"class":393},"   # 导入自己的数据集，并进行数据处理\n",[68,49894,49895],{"class":70,"line":1537},[68,49896,48162],{"class":393},[68,49898,49899,49901,49903,49905,49907,49909,49912],{"class":70,"line":1819},[68,49900,48167],{"class":82},[68,49902,381],{"class":331},[68,49904,1003],{"class":331},[68,49906,584],{"class":78},[68,49908,891],{"class":82},[68,49910,49911],{"class":48178},"\u002Fdata\u002Ftest",[68,49913,25337],{"class":78},[68,49915,49916],{"class":70,"line":1824},[68,49917,2606],{"emptyLinePlaceholder":260},[68,49919,49920],{"class":70,"line":1830},[68,49921,48190],{"class":393},[68,49923,49924],{"class":70,"line":1835},[68,49925,48195],{"class":393},[68,49927,49928],{"class":70,"line":1849},[68,49929,48200],{"class":393},[68,49931,49932],{"class":70,"line":1854},[68,49933,48205],{"class":393},[68,49935,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956,49958,49960,49962,49964],{"class":70,"line":1860},[68,49937,48210],{"class":335},[68,49939,381],{"class":331},[68,49941,48215],{"class":335},[68,49943,48218],{"class":82},[68,49945,711],{"class":335},[68,49947,48223],{"class":82},[68,49949,711],{"class":335},[68,49951,48228],{"class":82},[68,49953,48231],{"class":335},[68,49955,48234],{"class":82},[68,49957,711],{"class":335},[68,49959,48239],{"class":82},[68,49961,711],{"class":335},[68,49963,48244],{"class":82},[68,49965,4863],{"class":335},[68,49967,49968],{"class":70,"line":1881},[68,49969,48251],{"class":393},[68,49971,49972,49974,49976],{"class":70,"line":1886},[68,49973,48256],{"class":335},[68,49975,381],{"class":331},[68,49977,48261],{"class":335},[68,49979,49980],{"class":70,"line":1900},[68,49981,48266],{"class":393},[68,49983,49984,49986,49988,49990,49992],{"class":70,"line":1905},[68,49985,48271],{"class":335},[68,49987,31702],{"class":82},[68,49989,711],{"class":335},[68,49991,31702],{"class":82},[68,49993,42823],{"class":335},[68,49995,49996],{"class":70,"line":1934},[68,49997,48284],{"class":393},[68,49999,50000],{"class":70,"line":1939},[68,50001,48289],{"class":335},[68,50003,50004],{"class":70,"line":1956},[68,50005,48294],{"class":335},[68,50007,50008],{"class":70,"line":1961},[68,50009,48299],{"class":393},[68,50011,50012],{"class":70,"line":1966},[68,50013,48304],{"class":393},[68,50015,50016],{"class":70,"line":1971},[68,50017,2606],{"emptyLinePlaceholder":260},[68,50019,50020],{"class":70,"line":1985},[68,50021,48313],{"class":393},[68,50023,50024],{"class":70,"line":1990},[68,50025,48318],{"class":393},[68,50027,50028,50030,50032,50034,50036,50038,50040,50042],{"class":70,"line":2783},[68,50029,34166],{"class":335},[68,50031,381],{"class":331},[68,50033,48327],{"class":335},[68,50035,48330],{"class":82},[68,50037,711],{"class":335},[68,50039,48335],{"class":5421},[68,50041,381],{"class":331},[68,50043,48340],{"class":335},[68,50045,50046,50048,50050,50052,50054,50056],{"class":70,"line":2797},[68,50047,34223],{"class":335},[68,50049,381],{"class":331},[68,50051,31735],{"class":335},[68,50053,31738],{"class":5421},[68,50055,381],{"class":331},[68,50057,34234],{"class":335},[68,50059,50060],{"class":70,"line":2805},[68,50061,34239],{"class":393},[68,50063,50064,50066,50068,50070],{"class":70,"line":2810},[68,50065,34244],{"class":5421},[68,50067,381],{"class":331},[68,50069,551],{"class":82},[68,50071,31667],{"class":335},[68,50073,50074,50076,50078,50080],{"class":70,"line":2816},[68,50075,34255],{"class":5421},[68,50077,381],{"class":331},[68,50079,31677],{"class":82},[68,50081,31667],{"class":335},[68,50083,50084,50086,50088,50090],{"class":70,"line":2822},[68,50085,34266],{"class":5421},[68,50087,381],{"class":331},[68,50089,525],{"class":82},[68,50091,342],{"class":335},[68,50093,50094,50096],{"class":70,"line":2827},[68,50095,4296],{"class":331},[68,50097,34279],{"class":335},[68,50099,50100],{"class":70,"line":8153},[68,50101,2606],{"emptyLinePlaceholder":260},[68,50103,50104],{"class":70,"line":8177},[68,50105,34288],{"class":393},[68,50107,50108,50110,50112],{"class":70,"line":8182},[68,50109,32148],{"class":331},[68,50111,34295],{"class":74},[68,50113,34298],{"class":335},[68,50115,50116],{"class":70,"line":8188},[68,50117,34303],{"class":393},[68,50119,50120,50122,50124,50126,50128,50130,50132],{"class":70,"line":8215},[68,50121,31438],{"class":335},[68,50123,381],{"class":331},[68,50125,31445],{"class":78},[68,50127,1911],{"class":331},[68,50129,31450],{"class":335},[68,50131,1908],{"class":331},[68,50133,34320],{"class":78},[68,50135,50136,50138,50140],{"class":70,"line":8220},[68,50137,31490],{"class":335},[68,50139,381],{"class":331},[68,50141,32490],{"class":335},[68,50143,50144],{"class":70,"line":8226},[68,50145,2606],{"emptyLinePlaceholder":260},[68,50147,50148],{"class":70,"line":8238},[68,50149,34337],{"class":393},[68,50151,50152,50154,50156],{"class":70,"line":8250},[68,50153,34342],{"class":335},[68,50155,381],{"class":331},[68,50157,32543],{"class":82},[68,50159,50160,50162,50164],{"class":70,"line":8262},[68,50161,34351],{"class":335},[68,50163,381],{"class":331},[68,50165,3291],{"class":82},[68,50167,50168],{"class":70,"line":9921},[68,50169,2606],{"emptyLinePlaceholder":260},[68,50171,50172],{"class":70,"line":9946},[68,50173,34364],{"class":393},[68,50175,50176],{"class":70,"line":9969},[68,50177,34369],{"class":393},[68,50179,50180],{"class":70,"line":9993},[68,50181,34374],{"class":393},[68,50183,50184,50186],{"class":70,"line":9998},[68,50185,34379],{"class":331},[68,50187,33085],{"class":335},[68,50189,50190],{"class":70,"line":10003},[68,50191,34386],{"class":393},[68,50193,50194,50196,50198,50200],{"class":70,"line":10008},[68,50195,3609],{"class":331},[68,50197,34393],{"class":335},[68,50199,26247],{"class":331},[68,50201,34398],{"class":335},[68,50203,50204,50206,50208],{"class":70,"line":10017},[68,50205,34403],{"class":335},[68,50207,381],{"class":331},[68,50209,34408],{"class":335},[68,50211,50212,50214,50216],{"class":70,"line":10022},[68,50213,34413],{"class":335},[68,50215,381],{"class":331},[68,50217,34418],{"class":335},[68,50219,50220],{"class":70,"line":10028},[68,50221,34423],{"class":393},[68,50223,50224],{"class":70,"line":10049},[68,50225,33076],{"class":335},[68,50227,50228],{"class":70,"line":10055},[68,50229,34432],{"class":393},[68,50231,50232,50234,50236],{"class":70,"line":10069},[68,50233,32861],{"class":335},[68,50235,381],{"class":331},[68,50237,34441],{"class":335},[68,50239,50240],{"class":70,"line":10075},[68,50241,34446],{"class":393},[68,50243,50244,50246,50248,50250,50252,50254,50256],{"class":70,"line":10102},[68,50245,32878],{"class":335},[68,50247,381],{"class":331},[68,50249,32883],{"class":335},[68,50251,32886],{"class":5421},[68,50253,381],{"class":331},[68,50255,551],{"class":82},[68,50257,342],{"class":335},[68,50259,50260],{"class":70,"line":10111},[68,50261,34467],{"class":393},[68,50263,50264],{"class":70,"line":10117},[68,50265,34472],{"class":393},[68,50267,50268],{"class":70,"line":10125},[68,50269,34477],{"class":393},[68,50271,50272,50274,50276,50278,50280],{"class":70,"line":10130},[68,50273,34482],{"class":335},[68,50275,9682],{"class":331},[68,50277,32988],{"class":335},[68,50279,3155],{"class":331},[68,50281,34491],{"class":335},[68,50283,50284],{"class":70,"line":16809},[68,50285,34496],{"class":393},[68,50287,50288,50290,50292,50294,50296],{"class":70,"line":16815},[68,50289,34501],{"class":335},[68,50291,9682],{"class":331},[68,50293,34506],{"class":335},[68,50295,525],{"class":82},[68,50297,342],{"class":335},[68,50299,50300],{"class":70,"line":16838},[68,50301,2606],{"emptyLinePlaceholder":260},[68,50303,50304],{"class":70,"line":16844},[68,50305,34519],{"class":393},[68,50307,50308,50310,50312,50314,50316],{"class":70,"line":16867},[68,50309,34524],{"class":335},[68,50311,381],{"class":331},[68,50313,34529],{"class":335},[68,50315,917],{"class":331},[68,50317,34534],{"class":335},[68,50319,50320],{"class":70,"line":16881},[68,50321,34539],{"class":393},[68,50323,50324,50326,50328,50330],{"class":70,"line":16901},[68,50325,32652],{"class":82},[68,50327,336],{"class":335},[68,50329,34548],{"class":78},[68,50331,34551],{"class":335},[68,50333,50334],{"class":70,"line":16907},[68,50335,2606],{"emptyLinePlaceholder":260},[68,50337,50338],{"class":70,"line":16918},[68,50339,34560],{"class":393},[68,50341,50342,50344,50346,50348,50350],{"class":70,"line":16941},[68,50343,1738],{"class":331},[68,50345,31421],{"class":82},[68,50347,3155],{"class":331},[68,50349,31426],{"class":78},[68,50351,3945],{"class":335},[68,50353,50354],{"class":70,"line":16963},[68,50355,34577],{"class":393},[68,50357,50358,50360,50362],{"class":70,"line":16968},[68,50359,31490],{"class":335},[68,50361,381],{"class":331},[68,50363,44752],{"class":335},[68,50365,50366],{"class":70,"line":16974},[68,50367,34590],{"class":393},[68,50369,50370],{"class":70,"line":16988},[68,50371,34595],{"class":393},[68,50373,50374,50376,50378],{"class":70,"line":17001},[68,50375,34600],{"class":335},[68,50377,34603],{"class":78},[68,50379,30698],{"class":335},[68,50381,50382],{"class":70,"line":17006},[68,50383,34610],{"class":393},[68,50385,50386,50388,50390],{"class":70,"line":17020},[68,50387,34223],{"class":335},[68,50389,381],{"class":331},[68,50391,34619],{"class":335},[68,50393,50394],{"class":70,"line":17025},[68,50395,34624],{"class":393},[68,50397,50398],{"class":70,"line":17031},[68,50399,34629],{"class":335},[68,50401,50402],{"class":70,"line":17036},[68,50403,2606],{"emptyLinePlaceholder":260},[68,50405,50406],{"class":70,"line":17050},[68,50407,34638],{"class":393},[68,50409,50410],{"class":70,"line":17055},[68,50411,34643],{"class":393},[68,50413,50414,50416,50418,50420,50422,50424,50426],{"class":70,"line":17060},[68,50415,31438],{"class":335},[68,50417,381],{"class":331},[68,50419,31445],{"class":78},[68,50421,1911],{"class":331},[68,50423,31450],{"class":335},[68,50425,1908],{"class":331},[68,50427,34320],{"class":78},[68,50429,50430,50432,50434],{"class":70,"line":17074},[68,50431,31490],{"class":335},[68,50433,381],{"class":331},[68,50435,32490],{"class":335},[68,50437,50438],{"class":70,"line":17086},[68,50439,34672],{"class":393},[68,50441,50442],{"class":70,"line":17091},[68,50443,34677],{"class":393},[68,50445,50446,50448,50450,50452,50455,50457,50460],{"class":70,"line":17104},[68,50447,34682],{"class":335},[68,50449,381],{"class":331},[68,50451,1223],{"class":335},[68,50453,50454],{"class":78},"'猫'",[68,50456,711],{"class":335},[68,50458,50459],{"class":78},"'狗'",[68,50461,33447],{"class":335},[68,50463,50464,50466],{"class":70,"line":17109},[68,50465,34379],{"class":331},[68,50467,33085],{"class":335},[68,50469,50470],{"class":70,"line":17114},[68,50471,34747],{"class":393},[68,50473,50474,50476,50478,50480],{"class":70,"line":17119},[68,50475,3609],{"class":331},[68,50477,34754],{"class":335},[68,50479,26247],{"class":331},[68,50481,34398],{"class":335},[68,50483,50484,50486,50488],{"class":70,"line":17132},[68,50485,32811],{"class":335},[68,50487,381],{"class":331},[68,50489,32816],{"class":335},[68,50491,50492,50494,50496],{"class":70,"line":17137},[68,50493,32826],{"class":335},[68,50495,381],{"class":331},[68,50497,32831],{"class":335},[68,50499,50500],{"class":70,"line":32834},[68,50501,2606],{"emptyLinePlaceholder":260},[68,50503,50504],{"class":70,"line":32840},[68,50505,34783],{"class":393},[68,50507,50508],{"class":70,"line":32846},[68,50509,33076],{"class":335},[68,50511,50512],{"class":70,"line":32852},[68,50513,34792],{"class":393},[68,50515,50516,50518,50520],{"class":70,"line":32858},[68,50517,32861],{"class":335},[68,50519,381],{"class":331},[68,50521,32866],{"class":335},[68,50523,50524],{"class":70,"line":32869},[68,50525,34805],{"class":393},[68,50527,50528,50530,50532,50534,50536,50538,50540],{"class":70,"line":32875},[68,50529,32878],{"class":335},[68,50531,381],{"class":331},[68,50533,32883],{"class":335},[68,50535,32886],{"class":5421},[68,50537,381],{"class":331},[68,50539,551],{"class":82},[68,50541,342],{"class":335},[68,50543,50544],{"class":70,"line":32895},[68,50545,34826],{"class":393},[68,50547,50548,50550,50552],{"class":70,"line":32901},[68,50549,34831],{"class":335},[68,50551,381],{"class":331},[68,50553,34836],{"class":335},[68,50555,50556,50558,50560],{"class":70,"line":32912},[68,50557,34841],{"class":335},[68,50559,381],{"class":331},[68,50561,34846],{"class":335},[68,50563,50564,50566,50568,50570,50572,50574,50576,50578],{"class":70,"line":32918},[68,50565,34851],{"class":82},[68,50567,336],{"class":335},[68,50569,34856],{"class":78},[68,50571,34859],{"class":335},[68,50573,34862],{"class":78},[68,50575,711],{"class":335},[68,50577,34867],{"class":78},[68,50579,34870],{"class":335},[250,50581,50582],{},"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":63,"searchDepth":92,"depth":92,"links":50584},[50585,50586,50587,50588],{"id":30792,"depth":1387,"text":30793},{"id":38040,"depth":1387,"text":38041},{"id":41473,"depth":1387,"text":41474},{"id":45482,"depth":1387,"text":45483},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30784,"description":257},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50595,"title":50596,"body":50597,"description":257,"extension":258,"meta":50604,"navigation":260,"path":50605,"seo":50606,"stem":50607,"__hash__":50608},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50598,"toc":50602},[50599],[10,50600,50596],{"id":50601},"_3yolo模型学习",{"title":63,"searchDepth":92,"depth":92,"links":50603},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50596,"description":257},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50610,"title":50611,"body":50612,"description":50619,"extension":258,"meta":50620,"navigation":260,"path":50622,"seo":50623,"stem":50624,"__hash__":50625},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50613,"toc":50617},[50614],[19,50615,50616],{},"yolo模型还未补充",{"title":63,"searchDepth":92,"depth":92,"links":50618},[],"深度学习学习",{"category":50621},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50611,"description":50619},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50627,"title":50628,"body":50629,"description":257,"extension":258,"meta":50654,"navigation":260,"path":50655,"seo":50656,"stem":50657,"__hash__":50658},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50630,"toc":50652},[50631,50634,50637,50642,50649],[10,50632,50628],{"id":50633},"_1工具",[19,50635,50636],{},"提示错误插件：有问题会提前报错",[19,50638,50639],{},[48,50640],{"alt":63,"src":50641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50643,50644],{},[30,50645,50648],{"href":50646,"rel":50647},"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",[34],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50650,50651],{},"alt键加上下箭头可以实现语句的移动",{"title":63,"searchDepth":92,"depth":92,"links":50653},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50628,"description":257},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50660,"title":50661,"body":50662,"description":257,"extension":258,"meta":53526,"navigation":260,"path":53527,"seo":53528,"stem":53529,"__hash__":53530},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50663,"toc":53477},[50664,50667,50671,50675,50680,50683,50688,50692,50699,50704,50711,50716,50723,50728,50732,50737,50740,50744,50749,50753,50758,50761,50764,50767,50770,50773,50776,50779,50782,50787,50792,50797,50801,50804,50807,50811,50816,50819,50827,50832,50849,50857,50862,50867,50872,50877,50882,50885,50890,50895,50899,50908,50913,50918,50922,50927,50930,50934,50939,50947,50952,50957,50960,50965,50970,50975,50978,50981,50984,50989,50994,50997,51002,51005,51010,51013,51016,51019,51024,51027,51030,51045,51050,51055,51060,51063,51066,51069,51083,51086,51091,51096,51099,51102,51105,51108,51111,51114,51117,51121,51125,51130,51134,51137,51142,51147,51150,51155,51158,51162,51167,51170,51173,51176,51179,51182,51185,51188,51191,51194,51198,51203,51208,51213,51216,51219,51223,51228,51231,51235,51238,51241,51246,51249,51252,51256,51260,51263,51268,51273,51276,51305,51310,51315,51320,51325,51329,51334,51338,51343,51346,51350,51354,51359,51363,51368,51373,51377,51382,51385,51387,51390,51395,51399,51404,51408,51412,51417,51422,51427,51432,51436,51441,51446,51451,51454,51457,51462,51465,51470,51475,51480,51485,51489,52296,52300,52643,52648,52651,52654,52657,52660,52663,52666,52669,52672,52674,52677,52679,52682,52686,52691,52694,52697,52700,52704,52709,52714,52734,52737,52741,52746,52751,52768,52772,52801,52805,52827,52829,52868,52876,52882,52886,52889,52892,52897,52902,52905,52908,52911,52916,52921,52924,52927,52930,52933,52936,52939,52942,52945,52948,52951,52954,52956,52959,52962,52965,52968,52971,52974,52977,52980,52984,52989,52992,52997,53000,53003,53006,53009,53012,53015,53018,53020,53023,53026,53029,53032,53035,53038,53042,53045,53054,53057,53062,53065,53070,53073,53076,53079,53082,53085,53088,53091,53095,53099,53102,53105,53110,53115,53120,53124,53129,53134,53137,53140,53143,53146,53149,53154,53157,53162,53164,53169,53172,53176,53181,53184,53187,53192,53196,53199,53204,53207,53210,53239,53244,53247,53250,53253,53256,53259,53263,53266,53352,53356,53359,53364,53369,53376,53379,53382,53385,53388,53391,53396,53401,53404,53407,53410,53413,53416,53419,53422,53425,53428,53430,53433,53437,53442,53447,53452,53455,53460,53465,53468,53471,53474],[10,50665,50661],{"id":50666},"_2基础语法",[14,50668,50670],{"id":50669},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[301,50672,50674],{"id":50673},"_211-js组成","2.1.1 js组成",[23,50676,50677],{},[26,50678,50679],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50681,50682],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[23,50684,50685],{"start":92},[26,50686,50687],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[301,50689,50691],{"id":50690},"_212-js书写位置","2.1.2 js书写位置",[23,50693,50694],{},[26,50695,50696],{},[483,50697,50698],{},"内部 JavaScript",[19,50700,50701],{},[48,50702],{"alt":63,"src":50703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[23,50705,50706],{"start":92},[26,50707,50708],{},[483,50709,50710],{},"外部 JavaScript",[19,50712,50713],{},[48,50714],{"alt":63,"src":50715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[23,50717,50718],{"start":1387},[26,50719,50720],{},[483,50721,50722],{},"内联 JavaScript",[19,50724,50725],{},[48,50726],{"alt":63,"src":50727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[301,50729,50731],{"id":50730},"_213-javascript注释","2.1.3 JavaScript注释",[19,50733,50734],{},[48,50735],{"alt":63,"src":50736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50738,50739],{},"alt+shift+a一定要记住！",[301,50741,50743],{"id":50742},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50745,50746],{},[48,50747],{"alt":63,"src":50748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[301,50750,50752],{"id":50751},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[23,50754,50755],{},[26,50756,50757],{},"输出语法：",[19,50759,50760],{},"①document.write('要出的内容')",[19,50762,50763],{},"向body内输出内容；",[19,50765,50766],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50768,50769],{},"②alert('要出的内容')",[19,50771,50772],{},"页面弹出警告对话框",[19,50774,50775],{},"③console.log('控制台打印')",[19,50777,50778],{},"控制台输出语法，程序员调试使用",[19,50780,50781],{},"输入log就行，自动生成：",[19,50783,50784],{},[48,50785],{"alt":63,"src":50786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[23,50788,50789],{"start":92},[26,50790,50791],{},"输入语法：",[19,50793,50794],{},[48,50795],{"alt":63,"src":50796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[301,50798,50800],{"id":50799},"_2116-字面量","21.1.6 字面量",[19,50802,50803],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50805,50806],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50808,50810],{"id":50809},"_22-变量","2.2 变量",[23,50812,50813],{},[26,50814,50815],{},"变量声明",[19,50817,50818],{},"let 变量名",[42,50820,50821,50824],{},[26,50822,50823],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[26,50825,50826],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[23,50828,50829],{"start":92},[26,50830,50831],{},"变量赋值",[58,50833,50837],{"className":50834,"code":50835,"language":50836,"meta":63,"style":63},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[65,50838,50839,50844],{"__ignoreMap":63},[68,50840,50841],{"class":70,"line":71},[68,50842,50843],{"class":335},"let age\n",[68,50845,50846],{"class":70,"line":92},[68,50847,50848],{"class":335},"age=18\n",[23,50850,50851,50854],{"start":1387},[26,50852,50853],{},"连这些（变量的初始化）：let age=18",[26,50855,50856],{},"更新变量",[19,50858,50859],{},[48,50860],{"alt":63,"src":50861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[23,50863,50864],{"start":1408},[26,50865,50866],{},"声明多个变量",[19,50868,50869],{},[48,50870],{"alt":63,"src":50871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[23,50873,50874],{"start":1422},[26,50875,50876],{},"变量命名规则与规范",[19,50878,50879],{},[48,50880],{"alt":63,"src":50881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50883,50884],{},"遵守小驼峰！",[23,50886,50887],{"start":1428},[26,50888,50889],{},"变量拓展-let和var的区别",[19,50891,50892],{},[48,50893],{"alt":63,"src":50894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50896,50898],{"id":50897},"_23-数组","2.3 数组",[58,50900,50902],{"className":50834,"code":50901,"language":50836,"meta":63,"style":63},"let arr = []\n",[65,50903,50904],{"__ignoreMap":63},[68,50905,50906],{"class":70,"line":71},[68,50907,50901],{"class":335},[19,50909,50910],{},[48,50911],{"alt":63,"src":50912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50914,50915],{},[48,50916],{"alt":63,"src":50917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50919,50921],{"id":50920},"_24-常量","2.4 常量",[19,50923,50924],{},[48,50925],{"alt":63,"src":50926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50928,50929],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50931,50933],{"id":50932},"_25-数据类型","2.5 数据类型",[19,50935,50936],{},[48,50937],{"alt":63,"src":50938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[23,50940,50941,50944],{},[26,50942,50943],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[26,50945,50946],{},"算数运算符：",[19,50948,50949],{},[48,50950],{"alt":63,"src":50951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[23,50953,50954],{"start":1387},[26,50955,50956],{},"数字类型（Number）",[19,50958,50959],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50961,50962],{},[48,50963],{"alt":63,"src":50964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[23,50966,50967],{"start":1402},[26,50968,50969],{},"字符串类型（string）",[19,50971,50972],{},[48,50973],{"alt":63,"src":50974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50976,50977],{},"反引号也是可以使用的",[19,50979,50980],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50982,50983],{},"例如：document.write(\"我今年\"+age+\"岁\")",[23,50985,50986],{"start":1408},[26,50987,50988],{},"模板字符串",[19,50990,50991],{},[48,50992],{"alt":63,"src":50993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50995,50996],{},"类似于python的字符串格式化",[23,50998,50999],{"start":1422},[26,51000,51001],{},"布尔类型",[19,51003,51004],{},"true 和 false",[23,51006,51007],{"start":1428},[26,51008,51009],{},"未定义类型（underfined）",[19,51011,51012],{},"表示没有赋值",[19,51014,51015],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51017,51018],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[23,51020,51021],{"start":1519},[26,51022,51023],{},"null（空类型）",[19,51025,51026],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51028,51029],{},"赋值了，但是内容为空",[58,51031,51033],{"className":50834,"code":51032,"language":50836,"meta":63,"style":63},"typeof null\n输出的是'object'，是一个对象数据类型\n",[65,51034,51035,51040],{"__ignoreMap":63},[68,51036,51037],{"class":70,"line":71},[68,51038,51039],{"class":335},"typeof null\n",[68,51041,51042],{"class":70,"line":92},[68,51043,51044],{"class":335},"输出的是'object'，是一个对象数据类型\n",[23,51046,51047],{"start":1525},[26,51048,51049],{},"控制台检测数据类型",[19,51051,51052],{},[48,51053],{"alt":63,"src":51054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[23,51056,51057],{"start":1537},[26,51058,51059],{},"类型转换",[19,51061,51062],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51064,51065],{},"转换方式：隐式转换和显示转换",[19,51067,51068],{},"①隐式转换",[42,51070,51071,51074,51077,51080],{},[26,51072,51073],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[26,51075,51076],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[26,51078,51079],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[26,51081,51082],{},"任何数据和字符串相加结果都是字符串",[19,51084,51085],{},"②显示转换",[19,51087,51088],{},[48,51089],{"alt":63,"src":51090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51092,51093],{},[48,51094],{"alt":63,"src":51095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51097,51098],{},"在输入的时候要用好隐式转换，简单写起来",[19,51100,51101],{},"let num = +prompt(’请输入数字：‘)",[19,51103,51104],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51106,51107],{},"console.log(parseInt('12.333px'))",[19,51109,51110],{},"输出为：12",[19,51112,51113],{},"console.log(parseInt('a'a'a12.333px'))",[19,51115,51116],{},"输出：NaN",[14,51118,51120],{"id":51119},"_26-运算符","2.6 运算符",[301,51122,51124],{"id":51123},"_261-赋值运算符","2.6.1 赋值运算符",[19,51126,51127],{},[48,51128],{"alt":63,"src":51129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[301,51131,51133],{"id":51132},"_262-一元运算符","2.6.2 一元运算符",[19,51135,51136],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51138,51139],{},[48,51140],{"alt":63,"src":51141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51143,51144],{},[48,51145],{"alt":63,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51148,51149],{},"两者的区别：",[19,51151,51152],{},[48,51153],{"alt":63,"src":51154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51156,51157],{},"前置先自加；后置后加，代码执行完之后再加",[301,51159,51161],{"id":51160},"_263-比较运算符","2.6.3 比较运算符",[19,51163,51164],{},[48,51165],{"alt":63,"src":51166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51168,51169],{},"比较运算符也有隐式转换",[19,51171,51172],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51174,51175],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51177,51178],{},"要使用三等，开发的时候",[19,51180,51181],{},"NaN不等于任何人，包括它自己",[19,51183,51184],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51186,51187],{},"7\u002F10=0.7",[19,51189,51190],{},"最后：0.5+0.2=0.7",[19,51192,51193],{},"字符串比较，比较的是字符对应的ASCII码",[301,51195,51197],{"id":51196},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51199,51200],{},[48,51201],{"alt":63,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51204,51205],{},[48,51206],{"alt":63,"src":51207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51209,51210],{},[48,51211],{"alt":63,"src":51212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51214,51215],{},"上述题目选D",[19,51217,51218],{},"与真2假1；或真1假2",[301,51220,51222],{"id":51221},"_265-运算符优先级","2.6.5 运算符优先级",[19,51224,51225],{},[48,51226],{"alt":63,"src":51227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51229,51230],{},"先算逻辑与，后算逻辑或",[14,51232,51234],{"id":51233},"_27-语句","2.7 语句",[19,51236,51237],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51239,51240],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51242,51243],{},[48,51244],{"alt":63,"src":51245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51247,51248],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51250,51251],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[301,51253,51255],{"id":51254},"_271-分支语句","2.7.1 分支语句",[22203,51257,51259],{"id":51258},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51261,51262],{},"if语句单行简单的话，可以不写{}，写在一行就行",[23,51264,51265],{},[26,51266,51267],{},"单分支语句",[19,51269,51270],{},[48,51271],{"alt":63,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51274,51275],{},"除了0，所有数字都为真",[58,51277,51279],{"className":50834,"code":51278,"language":50836,"meta":63,"style":63},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[65,51280,51281,51286,51291,51296,51300],{"__ignoreMap":63},[68,51282,51283],{"class":70,"line":71},[68,51284,51285],{"class":335},"if（0) {\n",[68,51287,51288],{"class":70,"line":92},[68,51289,51290],{"class":335},"    let a=1\n",[68,51292,51293],{"class":70,"line":1387},[68,51294,51295],{"class":335},"    alert(typeof a)\n",[68,51297,51298],{"class":70,"line":1402},[68,51299,1772],{"class":335},[68,51301,51302],{"class":70,"line":1408},[68,51303,51304],{"class":335},"不输出，括号为假\n",[23,51306,51307],{"start":92},[26,51308,51309],{},"双分支语句",[19,51311,51312],{},[48,51313],{"alt":63,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[23,51316,51317],{"start":1387},[26,51318,51319],{},"多分支语句",[19,51321,51322],{},[48,51323],{"alt":63,"src":51324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22203,51326,51328],{"id":51327},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51330,51331],{},[48,51332],{"alt":63,"src":51333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22203,51335,51337],{"id":51336},"_2713-switch语句","2.7.1.3 switch语句",[19,51339,51340],{},[48,51341],{"alt":63,"src":51342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51344,51345],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[301,51347,51349],{"id":51348},"_272-循环语句","2.7.2 循环语句",[22203,51351,51353],{"id":51352},"_2721-断点演示","2.7.2.1 断点演示",[19,51355,51356],{},[48,51357],{"alt":63,"src":51358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22203,51360,51362],{"id":51361},"_2722-while循环","2.7.2.2 while循环",[19,51364,51365],{},[48,51366],{"alt":63,"src":51367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51369,51370],{},[48,51371],{"alt":63,"src":51372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22203,51374,51376],{"id":51375},"_2723-for循环","2.7.2.3 for循环",[19,51378,51379],{},[48,51380],{"alt":63,"src":51381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51383,51384],{},"for(;;) {",[19,51386,1279],{},[19,51388,51389],{},"表示无限循环",[19,51391,51392],{},[48,51393],{"alt":63,"src":51394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22203,51396,51398],{"id":51397},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51400,51401],{},[48,51402],{"alt":63,"src":51403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51405,51407],{"id":51406},"_28-数组","2.8 数组",[301,51409,51411],{"id":51410},"_281-基础认识","2.8.1 基础认识",[19,51413,51414],{},[48,51415],{"alt":63,"src":51416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51418,51419],{},[48,51420],{"alt":63,"src":51421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51423,51424],{},[48,51425],{"alt":63,"src":51426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51428,51429],{},[48,51430],{"alt":63,"src":51431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[301,51433,51435],{"id":51434},"_282-操作数组","2.8.2 操作数组",[19,51437,51438],{},[48,51439],{"alt":63,"src":51440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[23,51442,51443],{},[26,51444,51445],{},"添加元素",[19,51447,51448],{},[48,51449],{"alt":63,"src":51450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51452,51453],{},"console.log(arr.push('green'))",[19,51455,51456],{},"输出结果：为新数组的长度",[19,51458,51459],{},[48,51460],{"alt":63,"src":51461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51463,51464],{},"push用的非常多，一定要记住",[23,51466,51467],{},[26,51468,51469],{},"删除元素",[19,51471,51472],{},[48,51473],{"alt":63,"src":51474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51476,51477],{},[48,51478],{"alt":63,"src":51479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51481,51482],{},[48,51483],{"alt":63,"src":51484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[301,51486,51488],{"id":51487},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[58,51490,51492],{"className":50834,"code":51491,"language":50836,"meta":63,"style":63},"\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",[65,51493,51494,51509,51525,51529,51538,51556,51580,51602,51616,51624,51631,51643,51654,51658,51662,51669,51681,51696,51709,51728,51745,51760,51772,51784,51796,51800,51804,51815,51825,51837,51849,51861,51872,51876,51880,51892,51896,51910,51914,51918,51929,51943,51955,51969,51973,51982,51991,51995,52004,52008,52017,52022,52027,52040,52068,52073,52078,52103,52108,52112,52117,52122,52137,52141,52146,52176,52188,52204,52220,52234,52239,52246,52250,52255,52268,52276,52284,52288],{"__ignoreMap":63},[68,51495,51496,51499,51503,51506],{"class":70,"line":71},[68,51497,51498],{"class":335},"\u003C!",[68,51500,51502],{"class":51501},"s9eBZ","DOCTYPE",[68,51504,51505],{"class":74}," html",[68,51507,51508],{"class":335},">\n",[68,51510,51511,51513,51515,51518,51520,51523],{"class":70,"line":92},[68,51512,1243],{"class":335},[68,51514,50836],{"class":51501},[68,51516,51517],{"class":74}," lang",[68,51519,381],{"class":335},[68,51521,51522],{"class":78},"\"en\"",[68,51524,51508],{"class":335},[68,51526,51527],{"class":70,"line":1387},[68,51528,2606],{"emptyLinePlaceholder":260},[68,51530,51531,51533,51536],{"class":70,"line":1402},[68,51532,1243],{"class":335},[68,51534,51535],{"class":51501},"head",[68,51537,51508],{"class":335},[68,51539,51540,51543,51546,51549,51551,51554],{"class":70,"line":1408},[68,51541,51542],{"class":335},"    \u003C",[68,51544,51545],{"class":51501},"meta",[68,51547,51548],{"class":74}," charset",[68,51550,381],{"class":335},[68,51552,51553],{"class":78},"\"UTF-8\"",[68,51555,51508],{"class":335},[68,51557,51558,51560,51562,51565,51567,51570,51573,51575,51578],{"class":70,"line":1422},[68,51559,51542],{"class":335},[68,51561,51545],{"class":51501},[68,51563,51564],{"class":74}," http-equiv",[68,51566,381],{"class":335},[68,51568,51569],{"class":78},"\"X-UA-Compatible\"",[68,51571,51572],{"class":74}," content",[68,51574,381],{"class":335},[68,51576,51577],{"class":78},"\"IE=edge\"",[68,51579,51508],{"class":335},[68,51581,51582,51584,51586,51588,51590,51593,51595,51597,51600],{"class":70,"line":1428},[68,51583,51542],{"class":335},[68,51585,51545],{"class":51501},[68,51587,15125],{"class":74},[68,51589,381],{"class":335},[68,51591,51592],{"class":78},"\"viewport\"",[68,51594,51572],{"class":74},[68,51596,381],{"class":335},[68,51598,51599],{"class":78},"\"width=device-width, initial-scale=1.0\"",[68,51601,51508],{"class":335},[68,51603,51604,51606,51609,51612,51614],{"class":70,"line":1519},[68,51605,51542],{"class":335},[68,51607,51608],{"class":51501},"title",[68,51610,51611],{"class":335},">Document\u003C\u002F",[68,51613,51608],{"class":51501},[68,51615,51508],{"class":335},[68,51617,51618,51620,51622],{"class":70,"line":1525},[68,51619,51542],{"class":335},[68,51621,250],{"class":51501},[68,51623,51508],{"class":335},[68,51625,51626,51629],{"class":70,"line":1537},[68,51627,51628],{"class":51501},"        *",[68,51630,15777],{"class":335},[68,51632,51633,51636,51639,51641],{"class":70,"line":1819},[68,51634,51635],{"class":82},"            margin",[68,51637,51638],{"class":335},": ",[68,51640,525],{"class":82},[68,51642,1498],{"class":335},[68,51644,51645,51648,51650,51652],{"class":70,"line":1824},[68,51646,51647],{"class":82},"            padding",[68,51649,51638],{"class":335},[68,51651,525],{"class":82},[68,51653,1498],{"class":335},[68,51655,51656],{"class":70,"line":1830},[68,51657,2735],{"class":335},[68,51659,51660],{"class":70,"line":1835},[68,51661,2606],{"emptyLinePlaceholder":260},[68,51663,51664,51667],{"class":70,"line":1849},[68,51665,51666],{"class":74},"        .box",[68,51668,15777],{"class":335},[68,51670,51671,51674,51676,51679],{"class":70,"line":1854},[68,51672,51673],{"class":82},"            display",[68,51675,51638],{"class":335},[68,51677,51678],{"class":82},"flex",[68,51680,1498],{"class":335},[68,51682,51683,51686,51688,51691,51694],{"class":70,"line":1860},[68,51684,51685],{"class":82},"            width",[68,51687,51638],{"class":335},[68,51689,51690],{"class":82},"700",[68,51692,51693],{"class":331},"px",[68,51695,1498],{"class":335},[68,51697,51698,51701,51703,51705,51707],{"class":70,"line":1881},[68,51699,51700],{"class":82},"            height",[68,51702,51638],{"class":335},[68,51704,4179],{"class":82},[68,51706,51693],{"class":331},[68,51708,1498],{"class":335},[68,51710,51711,51714,51716,51718,51720,51723,51726],{"class":70,"line":1886},[68,51712,51713],{"class":82},"            border-left",[68,51715,51638],{"class":335},[68,51717,551],{"class":82},[68,51719,51693],{"class":331},[68,51721,51722],{"class":82}," solid",[68,51724,51725],{"class":82}," pink",[68,51727,1498],{"class":335},[68,51729,51730,51733,51735,51737,51739,51741,51743],{"class":70,"line":1900},[68,51731,51732],{"class":82},"            border-bottom",[68,51734,51638],{"class":335},[68,51736,551],{"class":82},[68,51738,51693],{"class":331},[68,51740,51722],{"class":82},[68,51742,51725],{"class":82},[68,51744,1498],{"class":335},[68,51746,51747,51749,51751,51753,51755,51758],{"class":70,"line":1905},[68,51748,51635],{"class":82},[68,51750,51638],{"class":335},[68,51752,989],{"class":82},[68,51754,51693],{"class":331},[68,51756,51757],{"class":82}," auto",[68,51759,1498],{"class":335},[68,51761,51762,51765,51767,51770],{"class":70,"line":1934},[68,51763,51764],{"class":82},"            justify-content",[68,51766,51638],{"class":335},[68,51768,51769],{"class":82},"space-around",[68,51771,1498],{"class":335},[68,51773,51774,51777,51779,51782],{"class":70,"line":1939},[68,51775,51776],{"class":82},"            align-items",[68,51778,51638],{"class":335},[68,51780,51781],{"class":82},"flex-end",[68,51783,1498],{"class":335},[68,51785,51786,51789,51791,51794],{"class":70,"line":1956},[68,51787,51788],{"class":82},"            text-align",[68,51790,51638],{"class":335},[68,51792,51793],{"class":82},"center",[68,51795,1498],{"class":335},[68,51797,51798],{"class":70,"line":1961},[68,51799,2735],{"class":335},[68,51801,51802],{"class":70,"line":1966},[68,51803,2606],{"emptyLinePlaceholder":260},[68,51805,51806,51808,51810,51813],{"class":70,"line":1971},[68,51807,51666],{"class":74},[68,51809,1293],{"class":331},[68,51811,51812],{"class":51501},"div",[68,51814,15777],{"class":335},[68,51816,51817,51819,51821,51823],{"class":70,"line":1985},[68,51818,51673],{"class":82},[68,51820,51638],{"class":335},[68,51822,51678],{"class":82},[68,51824,1498],{"class":335},[68,51826,51827,51829,51831,51833,51835],{"class":70,"line":1990},[68,51828,51685],{"class":82},[68,51830,51638],{"class":335},[68,51832,989],{"class":82},[68,51834,51693],{"class":331},[68,51836,1498],{"class":335},[68,51838,51839,51842,51844,51847],{"class":70,"line":2783},[68,51840,51841],{"class":82},"            background-color",[68,51843,51638],{"class":335},[68,51845,51846],{"class":82},"pink",[68,51848,1498],{"class":335},[68,51850,51851,51854,51856,51859],{"class":70,"line":2797},[68,51852,51853],{"class":82},"            flex-direction",[68,51855,51638],{"class":335},[68,51857,51858],{"class":82},"column",[68,51860,1498],{"class":335},[68,51862,51863,51865,51867,51870],{"class":70,"line":2805},[68,51864,51764],{"class":82},[68,51866,51638],{"class":335},[68,51868,51869],{"class":82},"space-between",[68,51871,1498],{"class":335},[68,51873,51874],{"class":70,"line":2810},[68,51875,2735],{"class":335},[68,51877,51878],{"class":70,"line":2816},[68,51879,2606],{"emptyLinePlaceholder":260},[68,51881,51882,51884,51887,51890],{"class":70,"line":2822},[68,51883,51666],{"class":74},[68,51885,51886],{"class":51501}," div",[68,51888,51889],{"class":51501}," span",[68,51891,15777],{"class":335},[68,51893,51894],{"class":70,"line":2827},[68,51895,2606],{"emptyLinePlaceholder":260},[68,51897,51898,51901,51903,51906,51908],{"class":70,"line":8153},[68,51899,51900],{"class":82},"            margin-top",[68,51902,51638],{"class":335},[68,51904,51905],{"class":82},"-20",[68,51907,51693],{"class":331},[68,51909,1498],{"class":335},[68,51911,51912],{"class":70,"line":8177},[68,51913,2735],{"class":335},[68,51915,51916],{"class":70,"line":8182},[68,51917,2606],{"emptyLinePlaceholder":260},[68,51919,51920,51922,51924,51927],{"class":70,"line":8188},[68,51921,51666],{"class":74},[68,51923,51886],{"class":51501},[68,51925,51926],{"class":51501}," h4",[68,51928,15777],{"class":335},[68,51930,51931,51934,51936,51939,51941],{"class":70,"line":8215},[68,51932,51933],{"class":82},"            margin-bottom",[68,51935,51638],{"class":335},[68,51937,51938],{"class":82},"-35",[68,51940,51693],{"class":331},[68,51942,1498],{"class":335},[68,51944,51945,51947,51949,51951,51953],{"class":70,"line":8220},[68,51946,51685],{"class":82},[68,51948,51638],{"class":335},[68,51950,689],{"class":82},[68,51952,51693],{"class":331},[68,51954,1498],{"class":335},[68,51956,51957,51960,51962,51965,51967],{"class":70,"line":8226},[68,51958,51959],{"class":82},"            margin-left",[68,51961,51638],{"class":335},[68,51963,51964],{"class":82},"-10",[68,51966,51693],{"class":331},[68,51968,1498],{"class":335},[68,51970,51971],{"class":70,"line":8238},[68,51972,2735],{"class":335},[68,51974,51975,51978,51980],{"class":70,"line":8250},[68,51976,51977],{"class":335},"    \u003C\u002F",[68,51979,250],{"class":51501},[68,51981,51508],{"class":335},[68,51983,51984,51987,51989],{"class":70,"line":8262},[68,51985,51986],{"class":335},"\u003C\u002F",[68,51988,51535],{"class":51501},[68,51990,51508],{"class":335},[68,51992,51993],{"class":70,"line":9921},[68,51994,2606],{"emptyLinePlaceholder":260},[68,51996,51997,51999,52002],{"class":70,"line":9946},[68,51998,1243],{"class":335},[68,52000,52001],{"class":51501},"body",[68,52003,51508],{"class":335},[68,52005,52006],{"class":70,"line":9969},[68,52007,2606],{"emptyLinePlaceholder":260},[68,52009,52010,52012,52015],{"class":70,"line":9993},[68,52011,51542],{"class":335},[68,52013,52014],{"class":51501},"script",[68,52016,51508],{"class":335},[68,52018,52019],{"class":70,"line":9998},[68,52020,52021],{"class":393},"        \u002F\u002F 1. 四次弹框效果\n",[68,52023,52024],{"class":70,"line":10003},[68,52025,52026],{"class":393},"        \u002F\u002F 声明一个新的数组\n",[68,52028,52029,52032,52035,52037],{"class":70,"line":10008},[68,52030,52031],{"class":331},"        let",[68,52033,52034],{"class":335}," arr ",[68,52036,381],{"class":331},[68,52038,52039],{"class":335}," []\n",[68,52041,52042,52044,52046,52049,52051,52053,52055,52057,52059,52062,52064,52066],{"class":70,"line":10017},[68,52043,3609],{"class":331},[68,52045,1865],{"class":335},[68,52047,52048],{"class":331},"let",[68,52050,9643],{"class":335},[68,52052,381],{"class":331},[68,52054,25322],{"class":82},[68,52056,9650],{"class":335},[68,52058,1795],{"class":331},[68,52060,52061],{"class":82}," 4",[68,52063,3420],{"class":335},[68,52065,2498],{"class":331},[68,52067,12647],{"class":335},[68,52069,52070],{"class":70,"line":10022},[68,52071,52072],{"class":393},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[68,52074,52075],{"class":70,"line":10028},[68,52076,52077],{"class":393},"            \u002F\u002F arr.push(num)\n",[68,52079,52080,52083,52086,52088,52091,52093,52096,52098,52101],{"class":70,"line":10049},[68,52081,52082],{"class":335},"            arr.",[68,52084,52085],{"class":74},"push",[68,52087,336],{"class":335},[68,52089,52090],{"class":74},"prompt",[68,52092,336],{"class":335},[68,52094,52095],{"class":78},"`请输入第${",[68,52097,774],{"class":335},[68,52099,52100],{"class":78},"}季度的数据:`",[68,52102,30698],{"class":335},[68,52104,52105],{"class":70,"line":10055},[68,52106,52107],{"class":393},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[68,52109,52110],{"class":70,"line":10069},[68,52111,2735],{"class":335},[68,52113,52114],{"class":70,"line":10075},[68,52115,52116],{"class":393},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[68,52118,52119],{"class":70,"line":10102},[68,52120,52121],{"class":393},"        \u002F\u002F 盒子开头\n",[68,52123,52124,52127,52130,52132,52135],{"class":70,"line":10111},[68,52125,52126],{"class":335},"        document.",[68,52128,52129],{"class":74},"write",[68,52131,336],{"class":335},[68,52133,52134],{"class":78},"` \u003Cdiv class=\"box\">`",[68,52136,342],{"class":335},[68,52138,52139],{"class":70,"line":10117},[68,52140,2606],{"emptyLinePlaceholder":260},[68,52142,52143],{"class":70,"line":10125},[68,52144,52145],{"class":393},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[68,52147,52148,52150,52152,52154,52156,52158,52160,52162,52164,52167,52170,52172,52174],{"class":70,"line":10130},[68,52149,3609],{"class":331},[68,52151,1865],{"class":335},[68,52153,52048],{"class":331},[68,52155,9643],{"class":335},[68,52157,381],{"class":331},[68,52159,4299],{"class":82},[68,52161,9650],{"class":335},[68,52163,1243],{"class":331},[68,52165,52166],{"class":335}," arr.",[68,52168,52169],{"class":82},"length",[68,52171,3420],{"class":335},[68,52173,2498],{"class":331},[68,52175,12647],{"class":335},[68,52177,52178,52181,52183,52185],{"class":70,"line":16809},[68,52179,52180],{"class":335},"            document.",[68,52182,52129],{"class":74},[68,52184,336],{"class":335},[68,52186,52187],{"class":78},"`\n",[68,52189,52190,52193,52195,52197,52199,52201],{"class":70,"line":16815},[68,52191,52192],{"class":78},"              \u003Cdiv style=\"height: ${",[68,52194,4086],{"class":335},[68,52196,1223],{"class":78},[68,52198,774],{"class":335},[68,52200,1273],{"class":78},[68,52202,52203],{"class":78},"}px;\">\n",[68,52205,52206,52209,52211,52213,52215,52217],{"class":70,"line":16838},[68,52207,52208],{"class":78},"                \u003Cspan>${",[68,52210,4086],{"class":335},[68,52212,1223],{"class":78},[68,52214,774],{"class":335},[68,52216,1273],{"class":78},[68,52218,52219],{"class":78},"}\u003C\u002Fspan>\n",[68,52221,52222,52225,52227,52229,52231],{"class":70,"line":16844},[68,52223,52224],{"class":78},"                \u003Ch4>第${",[68,52226,774],{"class":335},[68,52228,45767],{"class":331},[68,52230,25322],{"class":82},[68,52232,52233],{"class":78},"}季度\u003C\u002Fh4>\n",[68,52235,52236],{"class":70,"line":16867},[68,52237,52238],{"class":78},"              \u003C\u002Fdiv>          \n",[68,52240,52241,52244],{"class":70,"line":16881},[68,52242,52243],{"class":78},"            `",[68,52245,342],{"class":335},[68,52247,52248],{"class":70,"line":16901},[68,52249,2735],{"class":335},[68,52251,52252],{"class":70,"line":16907},[68,52253,52254],{"class":393},"        \u002F\u002F 盒子结尾\n",[68,52256,52257,52259,52261,52263,52266],{"class":70,"line":16918},[68,52258,52126],{"class":335},[68,52260,52129],{"class":74},[68,52262,336],{"class":335},[68,52264,52265],{"class":78},"` \u003C\u002Fdiv>`",[68,52267,342],{"class":335},[68,52269,52270,52272,52274],{"class":70,"line":16941},[68,52271,51977],{"class":335},[68,52273,52014],{"class":51501},[68,52275,51508],{"class":335},[68,52277,52278,52280,52282],{"class":70,"line":16963},[68,52279,51986],{"class":335},[68,52281,52001],{"class":51501},[68,52283,51508],{"class":335},[68,52285,52286],{"class":70,"line":16968},[68,52287,2606],{"emptyLinePlaceholder":260},[68,52289,52290,52292,52294],{"class":70,"line":16974},[68,52291,51986],{"class":335},[68,52293,50836],{"class":51501},[68,52295,51508],{"class":335},[301,52297,52299],{"id":52298},"_284-冒泡排序","2.8.4 冒泡排序",[58,52301,52303],{"className":50834,"code":52302,"language":50836,"meta":63,"style":63},"\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",[65,52304,52305,52315,52329,52333,52341,52356,52376,52388,52396,52400,52408,52416,52448,52481,52518,52523,52542,52547,52560,52575,52591,52595,52600,52604,52614,52623,52631,52635],{"__ignoreMap":63},[68,52306,52307,52309,52311,52313],{"class":70,"line":71},[68,52308,51498],{"class":335},[68,52310,51502],{"class":51501},[68,52312,51505],{"class":74},[68,52314,51508],{"class":335},[68,52316,52317,52319,52321,52323,52325,52327],{"class":70,"line":92},[68,52318,1243],{"class":335},[68,52320,50836],{"class":51501},[68,52322,51517],{"class":74},[68,52324,381],{"class":335},[68,52326,51522],{"class":78},[68,52328,51508],{"class":335},[68,52330,52331],{"class":70,"line":1387},[68,52332,2606],{"emptyLinePlaceholder":260},[68,52334,52335,52337,52339],{"class":70,"line":1402},[68,52336,1243],{"class":335},[68,52338,51535],{"class":51501},[68,52340,51508],{"class":335},[68,52342,52343,52346,52348,52350,52352,52354],{"class":70,"line":1408},[68,52344,52345],{"class":335},"  \u003C",[68,52347,51545],{"class":51501},[68,52349,51548],{"class":74},[68,52351,381],{"class":335},[68,52353,51553],{"class":78},[68,52355,51508],{"class":335},[68,52357,52358,52360,52362,52364,52366,52368,52370,52372,52374],{"class":70,"line":1422},[68,52359,52345],{"class":335},[68,52361,51545],{"class":51501},[68,52363,15125],{"class":74},[68,52365,381],{"class":335},[68,52367,51592],{"class":78},[68,52369,51572],{"class":74},[68,52371,381],{"class":335},[68,52373,51599],{"class":78},[68,52375,51508],{"class":335},[68,52377,52378,52380,52382,52384,52386],{"class":70,"line":1428},[68,52379,52345],{"class":335},[68,52381,51608],{"class":51501},[68,52383,51611],{"class":335},[68,52385,51608],{"class":51501},[68,52387,51508],{"class":335},[68,52389,52390,52392,52394],{"class":70,"line":1519},[68,52391,51986],{"class":335},[68,52393,51535],{"class":51501},[68,52395,51508],{"class":335},[68,52397,52398],{"class":70,"line":1525},[68,52399,2606],{"emptyLinePlaceholder":260},[68,52401,52402,52404,52406],{"class":70,"line":1537},[68,52403,1243],{"class":335},[68,52405,52001],{"class":51501},[68,52407,51508],{"class":335},[68,52409,52410,52412,52414],{"class":70,"line":1819},[68,52411,52345],{"class":335},[68,52413,52014],{"class":51501},[68,52415,51508],{"class":335},[68,52417,52418,52421,52423,52425,52428,52430,52432,52434,52436,52438,52440,52442,52444,52446],{"class":70,"line":1824},[68,52419,52420],{"class":331},"    let",[68,52422,52034],{"class":335},[68,52424,381],{"class":331},[68,52426,52427],{"class":335}," [",[68,52429,652],{"class":82},[68,52431,12640],{"class":335},[68,52433,626],{"class":82},[68,52435,12640],{"class":335},[68,52437,406],{"class":82},[68,52439,12640],{"class":335},[68,52441,412],{"class":82},[68,52443,12640],{"class":335},[68,52445,551],{"class":82},[68,52447,33447],{"class":335},[68,52449,52450,52452,52454,52456,52458,52460,52462,52464,52466,52468,52470,52473,52475,52477,52479],{"class":70,"line":1830},[68,52451,3407],{"class":331},[68,52453,1865],{"class":335},[68,52455,52048],{"class":331},[68,52457,9643],{"class":335},[68,52459,381],{"class":331},[68,52461,4299],{"class":82},[68,52463,9650],{"class":335},[68,52465,1243],{"class":331},[68,52467,52166],{"class":335},[68,52469,52169],{"class":82},[68,52471,52472],{"class":331}," -",[68,52474,25322],{"class":82},[68,52476,3420],{"class":335},[68,52478,2498],{"class":331},[68,52480,12647],{"class":335},[68,52482,52483,52486,52488,52490,52492,52494,52496,52498,52500,52502,52504,52506,52508,52510,52512,52514,52516],{"class":70,"line":1835},[68,52484,52485],{"class":331},"      for",[68,52487,1865],{"class":335},[68,52489,52048],{"class":331},[68,52491,9705],{"class":335},[68,52493,381],{"class":331},[68,52495,4299],{"class":82},[68,52497,9712],{"class":335},[68,52499,1243],{"class":331},[68,52501,52166],{"class":335},[68,52503,52169],{"class":82},[68,52505,52472],{"class":331},[68,52507,9643],{"class":335},[68,52509,865],{"class":331},[68,52511,25322],{"class":82},[68,52513,9719],{"class":335},[68,52515,2498],{"class":331},[68,52517,12647],{"class":335},[68,52519,52520],{"class":70,"line":1849},[68,52521,52522],{"class":393},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[68,52524,52525,52527,52530,52532,52535,52537,52539],{"class":70,"line":1854},[68,52526,2703],{"class":331},[68,52528,52529],{"class":335}," (arr[j] ",[68,52531,1293],{"class":331},[68,52533,52534],{"class":335}," arr[j ",[68,52536,814],{"class":331},[68,52538,25322],{"class":82},[68,52540,52541],{"class":335},"]) {\n",[68,52543,52544],{"class":70,"line":1860},[68,52545,52546],{"class":393},"          \u002F\u002F 交换两个变量\n",[68,52548,52549,52552,52555,52557],{"class":70,"line":1881},[68,52550,52551],{"class":331},"          let",[68,52553,52554],{"class":335}," tmp ",[68,52556,381],{"class":331},[68,52558,52559],{"class":335}," arr[j]\n",[68,52561,52562,52565,52567,52569,52571,52573],{"class":70,"line":1886},[68,52563,52564],{"class":335},"          arr[j] ",[68,52566,381],{"class":331},[68,52568,52534],{"class":335},[68,52570,814],{"class":331},[68,52572,25322],{"class":82},[68,52574,33447],{"class":335},[68,52576,52577,52580,52582,52584,52586,52588],{"class":70,"line":1900},[68,52578,52579],{"class":335},"          arr[j ",[68,52581,814],{"class":331},[68,52583,25322],{"class":82},[68,52585,4649],{"class":335},[68,52587,381],{"class":331},[68,52589,52590],{"class":335}," tmp\n",[68,52592,52593],{"class":70,"line":1905},[68,52594,2735],{"class":335},[68,52596,52597],{"class":70,"line":1934},[68,52598,52599],{"class":335},"      }\n",[68,52601,52602],{"class":70,"line":1939},[68,52603,2393],{"class":335},[68,52605,52606,52609,52611],{"class":70,"line":1956},[68,52607,52608],{"class":335},"    document.",[68,52610,52129],{"class":74},[68,52612,52613],{"class":335},"(arr)\n",[68,52615,52616,52619,52621],{"class":70,"line":1961},[68,52617,52618],{"class":335},"  \u003C\u002F",[68,52620,52014],{"class":51501},[68,52622,51508],{"class":335},[68,52624,52625,52627,52629],{"class":70,"line":1966},[68,52626,51986],{"class":335},[68,52628,52001],{"class":51501},[68,52630,51508],{"class":335},[68,52632,52633],{"class":70,"line":1971},[68,52634,2606],{"emptyLinePlaceholder":260},[68,52636,52637,52639,52641],{"class":70,"line":1985},[68,52638,51986],{"class":335},[68,52640,50836],{"class":51501},[68,52642,51508],{"class":335},[19,52644,52645],{},[48,52646],{"alt":63,"src":52647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52649,52650],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52652,52653],{},"let arr = [4, 2, 5, 1, 3]",[19,52655,52656],{},"\u002F\u002F 1.升序排列写法",[19,52658,52659],{},"arr.sort(function (a, b) {",[19,52661,52662],{},"return a - b",[19,52664,52665],{},"})",[19,52667,52668],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52670,52671],{},"\u002F\u002F 降序排列写法",[19,52673,52659],{},[19,52675,52676],{},"return b - a",[19,52678,52665],{},[19,52680,52681],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52683,52685],{"id":52684},"_29-函数","2.9 函数",[19,52687,52688],{},[48,52689],{"alt":63,"src":52690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52692,52693],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52695,52696],{},"函数的声明用function",[19,52698,52699],{},"函数里边可以嵌套函数",[301,52701,52703],{"id":52702},"_291-函数传参","2.9.1 函数传参",[19,52705,52706],{},[48,52707],{"alt":63,"src":52708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52710,52711],{},[48,52712],{"alt":63,"src":52713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[42,52715,52716,52719,52722,52725,52728,52731],{},[26,52717,52718],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[26,52720,52721],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[26,52723,52724],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[26,52726,52727],{},"开发中尽量保持形参和实参个数一致",[26,52729,52730],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[26,52732,52733],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52735,52736],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[301,52738,52740],{"id":52739},"_292-函数的返回值","2.9.2 函数的返回值",[19,52742,52743],{},[48,52744],{"alt":63,"src":52745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52747,52748],{},[48,52749],{"alt":63,"src":52750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[42,52752,52753,52756,52759,52762,52765],{},[26,52754,52755],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[26,52757,52758],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[26,52760,52761],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[26,52763,52764],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[26,52766,52767],{},"断点调试:进入函数内部看执行过程F11",[301,52769,52771],{"id":52770},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[58,52773,52775],{"className":50834,"code":52774,"language":50836,"meta":63,"style":63},"    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",[65,52776,52777,52782,52787,52791,52796],{"__ignoreMap":63},[68,52778,52779],{"class":70,"line":71},[68,52780,52781],{"class":335},"    function fn(a, b) {\n",[68,52783,52784],{"class":70,"line":92},[68,52785,52786],{"class":335},"      console.log(a + b);\n",[68,52788,52789],{"class":70,"line":1387},[68,52790,2393],{"class":335},[68,52792,52793],{"class":70,"line":1402},[68,52794,52795],{"class":335},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[68,52797,52798],{"class":70,"line":1408},[68,52799,52800],{"class":335},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[301,52802,52804],{"id":52803},"_294-作用域","2.9.4 作用域",[42,52806,52807,52813,52818,52821,52824],{},[26,52808,52809,52810],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[483,52811,52812],{},"作用域",[26,52814,52815],{},[483,52816,52817],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[26,52819,52820],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[26,52822,52823],{},"函数内部可以直接所使用全局变量",[26,52825,52826],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52828,14838],{},[58,52830,52832],{"className":50834,"code":52831,"language":50836,"meta":63,"style":63},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[65,52833,52834,52839,52844,52848,52853,52858,52863],{"__ignoreMap":63},[68,52835,52836],{"class":70,"line":71},[68,52837,52838],{"class":335},"    function fun() {\n",[68,52840,52841],{"class":70,"line":92},[68,52842,52843],{"class":335},"      num = 10\n",[68,52845,52846],{"class":70,"line":1387},[68,52847,2393],{"class":335},[68,52849,52850],{"class":70,"line":1402},[68,52851,52852],{"class":335},"    fun()\n",[68,52854,52855],{"class":70,"line":1408},[68,52856,52857],{"class":335},"    console.log(num)\n",[68,52859,52860],{"class":70,"line":1422},[68,52861,52862],{"class":335},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[68,52864,52865],{"class":70,"line":1428},[68,52866,52867],{"class":335},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[42,52869,52870,52873],{},[26,52871,52872],{},"函数内部的形参可以看做是局部变量",[26,52874,52875],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52877,52878,52879],{},"变量访问原则： ",[483,52880,52881],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[301,52883,52885],{"id":52884},"_295-匿名函数","2.9.5 匿名函数",[19,52887,52888],{},"函数可以分为具名函数和匿名函数",[19,52890,52891],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[23,52893,52894],{},[26,52895,52896],{},"函数表达式",[19,52898,52899],{},[48,52900],{"alt":63,"src":52901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52903,52904],{},"里边也可以写参数",[19,52906,52907],{},"具名函数调用位置可以随意调整；",[19,52909,52910],{},"匿名函数函数表达式形式只能在声明后才可以使用",[23,52912,52913],{"start":92},[26,52914,52915],{},"立即执行函数",[19,52917,52918],{},[48,52919],{"alt":63,"src":52920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52922,52923],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52925,52926],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52928,52929],{},"(function () {})();",[19,52931,52932],{},"不要落下最后的;",[19,52934,52935],{},"立即执行函数必须要加;",[19,52937,52938],{},"分号写前写后都没问题",[19,52940,52941],{},"写前：",[19,52943,52944],{},"(function() {})()",[19,52946,52947],{},";(function () {})();",[19,52949,52950],{},"写后:",[19,52952,52953],{},"(function() {})();",[19,52955,52929],{},[19,52957,52958],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52960,52961],{},"还有一种写法：",[19,52963,52964],{},"(function(){}());",[19,52966,52967],{},"或者:",[19,52969,52970],{},"!function(){}();",[19,52972,52973],{},"立即执行函数有时候也是可以加名字的：",[19,52975,52976],{},"(function flexible(window,document) {}(window,document));",[19,52978,52979],{},"省一些调用方法",[301,52981,52983],{"id":52982},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52985,52986],{},[48,52987],{"alt":63,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52990,52991],{},"这样就不用非得给x,y初始化了",[19,52993,52994],{},[48,52995],{"alt":63,"src":52996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52998,52999],{},"代码执行时先看左边",[19,53001,53002],{},"例如：console.log(false && 3+5)",[19,53004,53005],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53007,53008],{},"&&都是真时，就返回最后一个真值",[19,53010,53011],{},"console.log(11 && 22)",[19,53013,53014],{},"输出22",[19,53016,53017],{},"逻辑与：遇真则真",[19,53019,14838],{},[19,53021,53022],{},"let age=1",[19,53024,53025],{},"console.log(11 || age++)",[19,53027,53028],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53030,53031],{},"console.log(11 || 22)",[19,53033,53034],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53036,53037],{},"||如果都是假的话，就取最后一个假的值了",[301,53039,53041],{"id":53040},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53043,53044],{},"显示转换：",[19,53046,53047,53050,53051],{},[483,53048,53049],{},"记忆","： ",[483,53052,53053],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53055,53056],{},"空字符串为假，其他字符串全为真",[19,53058,53059],{},[48,53060],{"alt":63,"src":53061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53063,53064],{},"隐式转换：",[19,53066,53067],{},[48,53068],{"alt":63,"src":53069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53071,53072],{},"隐式转换:",[19,53074,53075],{},"null+3=3",[19,53077,53078],{},"undefined+3=NaN",[19,53080,53081],{},"null==undefined 输出true,他两个都当0看",[19,53083,53084],{},"null===undefined 输出false",[19,53086,53087],{},"undefined做任何操作都是NaN",[19,53089,53090],{},"NaN不等于NaN，NaN表示计算错误",[14,53092,53094],{"id":53093},"_210-对象","2.10 对象",[301,53096,53098],{"id":53097},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53100,53101],{},"对象也是一种数据类型，里边的数据是无序的",[19,53103,53104],{},"对象由属性和方法组成",[19,53106,53107],{},[48,53108],{"alt":63,"src":53109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53111,53112],{},[48,53113],{"alt":63,"src":53114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53116,53117],{},[48,53118],{"alt":63,"src":53119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[301,53121,53123],{"id":53122},"_2102-对象属性","2.10.2 对象属性",[19,53125,53126],{},[48,53127],{"alt":63,"src":53128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[23,53130,53131],{},[26,53132,53133],{},"查询对象",[19,53135,53136],{},"对象名.属性 goods.uname",[19,53138,53139],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53141,53142],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53144,53145],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53147,53148],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[23,53150,53151],{"start":92},[26,53152,53153],{},"重新赋值",[19,53155,53156],{},"对象名.属性=新值",[23,53158,53159],{"start":1387},[26,53160,53161],{},"增加新数据",[19,53163,53156],{},[23,53165,53166],{"start":1402},[26,53167,53168],{},"删除对象中的属性",[19,53170,53171],{},"delete 对象名.属性",[301,53173,53175],{"id":53174},"_2103-对象方法","2.10.3 对象方法",[19,53177,53178],{},[48,53179],{"alt":63,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53182,53183],{},"后边跟的是匿名函数",[19,53185,53186],{},"对象外面的叫函数；对象内部的叫方法",[19,53188,53189],{},[48,53190],{"alt":63,"src":53191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[301,53193,53195],{"id":53194},"_2104-遍历对象","2.10.4 遍历对象",[19,53197,53198],{},"理解为加括号的python字典遍历",[19,53200,53201],{},[48,53202],{"alt":63,"src":53203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53205,53206],{},"k是字符串类型",[19,53208,53209],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[58,53211,53213],{"className":50834,"code":53212,"language":50836,"meta":63,"style":63},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[65,53214,53215,53220,53225,53230,53235],{"__ignoreMap":63},[68,53216,53217],{"class":70,"line":71},[68,53218,53219],{"class":335},"   let arr = [1, 2, 3]\n",[68,53221,53222],{"class":70,"line":92},[68,53223,53224],{"class":335},"    for (let k in arr) {\n",[68,53226,53227],{"class":70,"line":1387},[68,53228,53229],{"class":335},"      console.log(k)\n",[68,53231,53232],{"class":70,"line":1402},[68,53233,53234],{"class":335},"      console.log(arr[k])\n",[68,53236,53237],{"class":70,"line":1408},[68,53238,2393],{"class":335},[19,53240,53241],{},[48,53242],{"alt":63,"src":53243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53245,53246],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53248,53249],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53251,53252],{},"for in 得到的k是属性名",[52014,53254,53255],{},"\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",[19,53257,53258],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[301,53260,53262],{"id":53261},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53264,53265],{},"数组中放对象信息",[58,53267,53271],{"className":53268,"code":53269,"language":53270,"meta":63,"style":63},"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",[65,53272,53273,53281,53286,53291,53296,53301,53306,53311,53316,53321,53326,53331,53336,53340,53344],{"__ignoreMap":63},[68,53274,53275,53277,53279],{"class":70,"line":71},[68,53276,1243],{"class":335},[68,53278,52014],{"class":51501},[68,53280,51508],{"class":335},[68,53282,53283],{"class":70,"line":92},[68,53284,53285],{"class":335},"    let students = [\n",[68,53287,53288],{"class":70,"line":1387},[68,53289,53290],{"class":335},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[68,53292,53293],{"class":70,"line":1402},[68,53294,53295],{"class":335},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[68,53297,53298],{"class":70,"line":1408},[68,53299,53300],{"class":335},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[68,53302,53303],{"class":70,"line":1422},[68,53304,53305],{"class":335},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[68,53307,53308],{"class":70,"line":1428},[68,53309,53310],{"class":335},"    ]\n",[68,53312,53313],{"class":70,"line":1519},[68,53314,53315],{"class":335},"    for (let i = 0; i \u003C students.length; i++) {\n",[68,53317,53318],{"class":70,"line":1525},[68,53319,53320],{"class":335},"      for (let k in students[i]) {\n",[68,53322,53323],{"class":70,"line":1537},[68,53324,53325],{"class":335},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[68,53327,53328],{"class":70,"line":1819},[68,53329,53330],{"class":335},"        \u002F\u002F输出每个人的名字：\n",[68,53332,53333],{"class":70,"line":1824},[68,53334,53335],{"class":335},"        \u002F\u002Fconsole.log(students[i].name)\n",[68,53337,53338],{"class":70,"line":1830},[68,53339,52599],{"class":335},[68,53341,53342],{"class":70,"line":1835},[68,53343,2393],{"class":335},[68,53345,53346,53348,53350],{"class":70,"line":1849},[68,53347,52618],{"class":335},[68,53349,52014],{"class":51501},[68,53351,51508],{"class":335},[301,53353,53355],{"id":53354},"_2106-内置对象","2.10.6 内置对象",[19,53357,53358],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[23,53360,53361],{},[26,53362,53363],{},"数学对象Math",[19,53365,53366],{},[48,53367],{"alt":63,"src":53368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53370,53371],{},[30,53372,53375],{"href":53373,"rel":53374},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[34],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53377,53378],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53380,53381],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53383,53384],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53386,53387],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53389,53390],{},"null属于对象数据类型",[23,53392,53393],{"start":92},[26,53394,53395],{},"生成任意范围随机数",[19,53397,53398],{},[48,53399],{"alt":63,"src":53400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53402,53403],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53405,53406],{},"乘以几就取不到几",[19,53408,53409],{},"取数组中的随机元素：",[19,53411,53412],{},"let arr = ['red', 'green', 'blue']",[19,53414,53415],{},"let random = Math.floor(Math.random() * arr.length)",[19,53417,53418],{},"console.log(arr[random])",[19,53420,53421],{},"这个函数得到的是全闭区间",[19,53423,53424],{},"function getRandom(N, M) {",[19,53426,53427],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53429,1279],{},[19,53431,53432],{},"console.log(getRandom(4, 8))",[301,53434,53436],{"id":53435},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53438,53439],{},[48,53440],{"alt":63,"src":53441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53443,53444],{},[48,53445],{"alt":63,"src":53446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53448,53449],{},[48,53450],{"alt":63,"src":53451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53453,53454],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53456,53457],{},[48,53458],{"alt":63,"src":53459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53461,53462],{},[48,53463],{"alt":63,"src":53464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53466,53467],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53469,53470],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53472,53473],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[250,53475,53476],{},"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":63,"searchDepth":92,"depth":92,"links":53478},[53479,53487,53488,53489,53490,53491,53498,53502,53508,53517],{"id":50669,"depth":92,"text":50670,"children":53480},[53481,53482,53483,53484,53485,53486],{"id":50673,"depth":1387,"text":50674},{"id":50690,"depth":1387,"text":50691},{"id":50730,"depth":1387,"text":50731},{"id":50742,"depth":1387,"text":50743},{"id":50751,"depth":1387,"text":50752},{"id":50799,"depth":1387,"text":50800},{"id":50809,"depth":92,"text":50810},{"id":50897,"depth":92,"text":50898},{"id":50920,"depth":92,"text":50921},{"id":50932,"depth":92,"text":50933},{"id":51119,"depth":92,"text":51120,"children":53492},[53493,53494,53495,53496,53497],{"id":51123,"depth":1387,"text":51124},{"id":51132,"depth":1387,"text":51133},{"id":51160,"depth":1387,"text":51161},{"id":51196,"depth":1387,"text":51197},{"id":51221,"depth":1387,"text":51222},{"id":51233,"depth":92,"text":51234,"children":53499},[53500,53501],{"id":51254,"depth":1387,"text":51255},{"id":51348,"depth":1387,"text":51349},{"id":51406,"depth":92,"text":51407,"children":53503},[53504,53505,53506,53507],{"id":51410,"depth":1387,"text":51411},{"id":51434,"depth":1387,"text":51435},{"id":51487,"depth":1387,"text":51488},{"id":52298,"depth":1387,"text":52299},{"id":52684,"depth":92,"text":52685,"children":53509},[53510,53511,53512,53513,53514,53515,53516],{"id":52702,"depth":1387,"text":52703},{"id":52739,"depth":1387,"text":52740},{"id":52770,"depth":1387,"text":52771},{"id":52803,"depth":1387,"text":52804},{"id":52884,"depth":1387,"text":52885},{"id":52982,"depth":1387,"text":52983},{"id":53040,"depth":1387,"text":53041},{"id":53093,"depth":92,"text":53094,"children":53518},[53519,53520,53521,53522,53523,53524,53525],{"id":53097,"depth":1387,"text":53098},{"id":53122,"depth":1387,"text":53123},{"id":53174,"depth":1387,"text":53175},{"id":53194,"depth":1387,"text":53195},{"id":53261,"depth":1387,"text":53262},{"id":53354,"depth":1387,"text":53355},{"id":53435,"depth":1387,"text":53436},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50661,"description":257},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53532,"title":53533,"body":53534,"description":257,"extension":258,"meta":76874,"navigation":260,"path":76875,"seo":76876,"stem":76877,"__hash__":76878},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53535,"toc":76814},[53536,53539,53542,53545,53550,53553,53556,53559,53563,53567,53573,53578,53586,53593,53596,53600,53605,53610,53615,53618,53621,53632,53635,53639,53642,53645,53650,53655,53660,53663,53666,53758,53761,53766,53769,53774,53777,53780,53785,53788,53793,53797,53800,53814,53818,53823,53826,53829,53833,53838,53841,53845,53849,53854,53858,53863,53866,53869,53872,53875,53878,53881,53886,53891,53919,53922,53925,53928,53933,53936,53939,53942,53945,53949,53978,53982,53987,53992,53995,53998,54001,54006,54121,54126,54131,54292,54297,54300,54304,54309,54314,54317,54320,54323,54326,54329,54332,54335,54338,54341,54344,54347,54350,54353,54356,54358,54361,54364,54367,54372,54376,54773,54776,54782,54786,54791,56073,56078,56081,56084,56087,56092,57288,57292,57298,57303,57306,57311,57316,57320,57324,57329,57332,57337,57340,57343,57347,58255,58258,58262,58483,58486,58489,58492,58718,58721,58945,58948,58952,58957,58960,58963,59191,59194,59227,59230,59234,59239,59243,59246,59249,59252,59255,59258,59261,59264,59269,60549,60553,60556,61649,61653,61656,61659,61662,61665,61669,61672,61675,61677,61685,63166,63170,63173,63176,63179,63388,63391,63395,63399,63404,63409,63412,63415,63420,63424,63429,63432,63541,63545,63550,63555,63558,63561,63565,63570,63575,63580,63583,63586,63597,63600,63605,63610,63613,63616,63689,63693,63698,63701,63703,63714,63718,63723,65049,65052,65055,65058,65060,65063,65066,65069,65072,65075,65078,65081,65084,65087,65090,65093,65096,65098,65100,65103,65107,66201,66204,66207,66223,66237,66240,66245,66251,66256,66260,66264,66269,66273,66278,66720,66725,66728,66732,66737,66740,66743,66747,66752,66756,66761,66766,66770,66775,66780,66783,66788,66793,66797,66802,66807,66911,66914,66918,66923,67289,67292,67295,67298,67301,67304,67307,67310,67313,68609,68613,68618,68623,68626,68629,68632,68635,68637,68642,68647,68650,68654,68659,68664,68669,68672,68675,68678,68681,68684,68689,68692,68696,68701,68706,68710,68715,68718,68723,68726,68729,68732,68735,68738,68743,68746,68749,68752,68755,68759,68764,68767,68771,68776,68779,68782,68786,68815,68818,68822,68826,68831,68835,68840,68843,68846,68849,68852,68855,68858,68861,68864,68867,68870,68873,68876,68879,68882,68886,68891,68896,68899,68903,68907,68912,68915,68919,68922,68925,68930,68935,68940,68945,68950,68953,68956,68961,68966,68970,68975,68978,68983,68986,68989,68992,68995,69000,69003,69012,69016,69021,69024,69027,69031,69034,69039,69043,69046,69052,69058,69062,69088,69091,70652,70655,71151,71154,71159,71164,71169,71173,71178,71183,71188,71192,71197,71200,71203,71206,71209,71213,71216,71221,71224,71229,71233,71238,71241,71246,71251,71256,71259,71262,71267,71272,71275,71278,71282,71285,71290,71293,71298,71301,71306,71311,71316,71319,71324,71389,71392,71403,71407,71412,71584,71588,71593,71596,71599,71602,71606,71617,71621,71624,71629,71634,71637,71640,71643,71646,71649,71651,71654,71657,71660,71665,71668,71673,71676,71680,71683,71686,71700,71704,71707,71762,71767,71770,71773,71778,71781,71785,71790,71920,71924,71929,71934,72015,72020,72024,72027,72032,72037,72043,72046,72049,72052,72056,72061,72064,72075,72079,72096,75143,75147,75150,75153,75156,75177,75181,75184,75192,75195,75200,75203,75206,75211,75216,75220,75241,75245,75250,75253,75256,75259,75262,75266,75271,75274,75278,75283,75286,75291,75294,75299,75302,75307,76510,76514,76519,76522,76527,76811],[10,53537,53533],{"id":53538},"_3web-apis",[19,53540,53541],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53543,53544],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53546,53547],{},[48,53548],{"alt":63,"src":53549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53551,53552],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53554,53555],{},"建议数组和对象使用 const 来声明",[19,53557,53558],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53560,53562],{"id":53561},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[301,53564,53566],{"id":53565},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53568,53569,53572],{},[65,53570,53571],{},"document"," = HTML 文件解析后的对象化表示；",[19,53574,53575,53577],{},[65,53576,53571],{}," ≠ HTML 文件本身",[19,53579,53580,53585],{},[483,53581,53582],{},[65,53583,53584],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53587,53588,53592],{},[483,53589,53590],{},[65,53591,53571],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53594,53595],{},"document实际上为window.document的简写",[301,53597,53599],{"id":53598},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53601,53602],{},[48,53603],{"alt":63,"src":53604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53606,53607],{},[48,53608],{"alt":63,"src":53609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53611,53612],{},[48,53613],{"alt":63,"src":53614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53616,53617],{},"console.dir()",[19,53619,53620],{},"dir用来打印对象",[42,53622,53623,53626,53629],{},[26,53624,53625],{},"任何一个标签，都是一个对象",[26,53627,53628],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[26,53630,53631],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53633,53634],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[301,53636,53638],{"id":53637},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53640,53641],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53643,53644],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53646,53647],{},[483,53648,53649],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[23,53651,53652],{},[26,53653,53654],{},"利用CSS选择器来获取标签元素",[19,53656,53657],{},[48,53658],{"alt":63,"src":53659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53661,53662],{},"里边的选择器必须必须加引号！！！",[19,53664,53665],{},"只选择第一个元素",[58,53667,53669],{"className":53268,"code":53668,"language":53270,"meta":63,"style":63},"\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",[65,53670,53671,53679,53700,53719,53727,53732,53737,53742,53750],{"__ignoreMap":63},[68,53672,53673,53675,53677],{"class":70,"line":71},[68,53674,1243],{"class":335},[68,53676,52001],{"class":51501},[68,53678,51508],{"class":335},[68,53680,53681,53683,53685,53688,53690,53693,53696,53698],{"class":70,"line":92},[68,53682,52345],{"class":335},[68,53684,51812],{"class":51501},[68,53686,53687],{"class":74}," class",[68,53689,381],{"class":335},[68,53691,53692],{"class":78},"\"box\"",[68,53694,53695],{"class":335},">123\u003C\u002F",[68,53697,51812],{"class":51501},[68,53699,51508],{"class":335},[68,53701,53702,53704,53706,53708,53710,53712,53715,53717],{"class":70,"line":1387},[68,53703,52345],{"class":335},[68,53705,51812],{"class":51501},[68,53707,53687],{"class":74},[68,53709,381],{"class":335},[68,53711,53692],{"class":78},[68,53713,53714],{"class":335},">456\u003C\u002F",[68,53716,51812],{"class":51501},[68,53718,51508],{"class":335},[68,53720,53721,53723,53725],{"class":70,"line":1402},[68,53722,52345],{"class":335},[68,53724,52014],{"class":51501},[68,53726,51508],{"class":335},[68,53728,53729],{"class":70,"line":1408},[68,53730,53731],{"class":335},"    \u002F\u002F 1.获取匹配的第一个元素\n",[68,53733,53734],{"class":70,"line":1422},[68,53735,53736],{"class":335},"    const box = document.querySelector('div')\n",[68,53738,53739],{"class":70,"line":1428},[68,53740,53741],{"class":335},"    console.dir(box)\n",[68,53743,53744,53746,53748],{"class":70,"line":1519},[68,53745,52618],{"class":335},[68,53747,52014],{"class":51501},[68,53749,51508],{"class":335},[68,53751,53752,53754,53756],{"class":70,"line":1525},[68,53753,51986],{"class":335},[68,53755,52001],{"class":51501},[68,53757,51508],{"class":335},[19,53759,53760],{},"只选123，不选456",[19,53762,53763],{},[48,53764],{"alt":63,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53767,53768],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53770,53771],{},[48,53772],{"alt":63,"src":53773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53775,53776],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53778,53779],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[23,53781,53782],{"start":92},[26,53783,53784],{},"其他方法来获取标签元素",[19,53786,53787],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53789,53790],{},[48,53791],{"alt":63,"src":53792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[301,53794,53796],{"id":53795},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53798,53799],{},"设置修改DOM元素内容有两种方式：",[42,53801,53802,53805,53808,53811],{},[26,53803,53804],{},"元素.innerText=''",[26,53806,53807],{},"元素.innerHTML=''",[26,53809,53810],{},"不写字符串输出数字也是可以的",[26,53812,53813],{},"元素.innerHtml=1",[22203,53815,53817],{"id":53816},"_3131-innertext","3.1.3.1 innerText",[19,53819,53820],{},[48,53821],{"alt":63,"src":53822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53824,53825],{},"思路：实现了修改盒子中的内容！",[19,53827,53828],{},"它只显示纯文本，不解析标签",[22203,53830,53832],{"id":53831},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53834,53835],{},[48,53836],{"alt":63,"src":53837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53839,53840],{},"相比于innerText，他的强大之处在于可以解析标签",[301,53842,53844],{"id":53843},"_314-操作元素属性","3.1.4 操作元素属性",[22203,53846,53848],{"id":53847},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53850,53851],{},[48,53852],{"alt":63,"src":53853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22203,53855,53857],{"id":53856},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53859,53860],{},[48,53861],{"alt":63,"src":53862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53864,53865],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53867,53868],{},"div.style.backgroundColor = 'hotpink'",[19,53870,53871],{},"如果按照css的写法，-表示减，就会出错",[19,53873,53874],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53876,53877],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53879,53880],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53882,53883],{},[48,53884],{"alt":63,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53887,53888],{},[48,53889],{"alt":63,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[23,53892,53893,53896,53899,53902,53905,53908],{},[26,53894,53895],{},"className这个方式就是修改很多样式的时候来使用的！",[26,53897,53898],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[26,53900,53901],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[26,53903,53904],{},"className为属性名，如果还用class的话就导致与关键字冲突",[26,53906,53907],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[26,53909,53910,53911,53916],{},"解析标签的时候就变为了",[51812,53912],{"className":53913},[53914,53915],"nav","box",[53917,53918],"br",{},[19,53920,53921],{},"例子：",[51812,53923],{"className":53924},[53914],[52014,53926,53927],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53929,53930],{},[48,53931],{"alt":63,"src":53932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53934,53935],{},"追加和删除类名用classList",[19,53937,53938],{},"常用于类似于开关的操作",[19,53940,53941],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53943,53944],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22203,53946,53948],{"id":53947},"_3143-牢记点","3.1.4.3 牢记点",[23,53950,53951,53954,53957,53960,53963,53966,53969,53972,53975],{},[26,53952,53953],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[26,53955,53956],{},"使用style属性操作css时不要忘记引号",[26,53958,53959],{},"使用className或者classList时也不要忘记引号",[26,53961,53962],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[26,53964,53965],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[26,53967,53968],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[26,53970,53971],{},"若： let arr=['1','2',3] arr[0]=1",[26,53973,53974],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[26,53976,53977],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[301,53979,53981],{"id":53980},"_315-操作表单元素","3.1.5 操作表单元素",[23,53983,53984],{},[26,53985,53986],{},"天生的属性",[19,53988,53989],{},[48,53990],{"alt":63,"src":53991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53993,53994],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53996,53997],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53999,54000],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54002,54003],{},[48,54004],{"alt":63,"src":54005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[58,54007,54009],{"className":50834,"code":54008,"language":50836,"meta":63,"style":63},"在复选框中如果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",[65,54010,54011,54016,54048,54053,54058,54063,54068,54072,54077,54082,54099,54111,54116],{"__ignoreMap":63},[68,54012,54013],{"class":70,"line":71},[68,54014,54015],{"class":335},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[68,54017,54018,54020,54023,54026,54028,54031,54033,54035,54037,54039,54041,54043,54046],{"class":70,"line":92},[68,54019,1243],{"class":335},[68,54021,54022],{"class":51501},"input",[68,54024,54025],{"class":74}," type",[68,54027,381],{"class":335},[68,54029,54030],{"class":78},"\"checkbox\"",[68,54032,15125],{"class":74},[68,54034,381],{"class":335},[68,54036,7857],{"class":78},[68,54038,15164],{"class":74},[68,54040,381],{"class":335},[68,54042,7857],{"class":78},[68,54044,54045],{"class":74}," checked",[68,54047,51508],{"class":335},[68,54049,54050],{"class":70,"line":1387},[68,54051,54052],{"class":335},"不选的话：\n",[68,54054,54055],{"class":70,"line":1402},[68,54056,54057],{"class":335},"const input = document.querySelector('input')\n",[68,54059,54060],{"class":70,"line":1408},[68,54061,54062],{"class":335},"input.checked=false\n",[68,54064,54065],{"class":70,"line":1422},[68,54066,54067],{"class":335},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[68,54069,54070],{"class":70,"line":1428},[68,54071,2606],{"emptyLinePlaceholder":260},[68,54073,54074],{"class":70,"line":1519},[68,54075,54076],{"class":335},"禁用按钮：\n",[68,54078,54079],{"class":70,"line":1525},[68,54080,54081],{"class":335},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[68,54083,54084,54086,54089,54092,54095,54097],{"class":70,"line":1537},[68,54085,1243],{"class":335},[68,54087,54088],{"class":51501},"button",[68,54090,54091],{"class":74}," disabled",[68,54093,54094],{"class":335},">点击\u003C\u002F",[68,54096,54088],{"class":51501},[68,54098,51508],{"class":335},[68,54100,54101,54103,54105,54107,54109],{"class":70,"line":1819},[68,54102,1243],{"class":335},[68,54104,54088],{"class":51501},[68,54106,54094],{"class":335},[68,54108,54088],{"class":51501},[68,54110,51508],{"class":335},[68,54112,54113],{"class":70,"line":1824},[68,54114,54115],{"class":335},"const bt = document.querySelector('button')\n",[68,54117,54118],{"class":70,"line":1830},[68,54119,54120],{"class":335},"bt.disabled = false\n",[23,54122,54123],{"start":92},[26,54124,54125],{},"自定义属性",[19,54127,54128],{},[48,54129],{"alt":63,"src":54130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[58,54132,54134],{"className":53268,"code":54133,"language":53270,"meta":63,"style":63},"\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",[65,54135,54136,54144,54172,54191,54210,54229,54248,54256,54261,54266,54271,54276,54284],{"__ignoreMap":63},[68,54137,54138,54140,54142],{"class":70,"line":71},[68,54139,1243],{"class":335},[68,54141,52001],{"class":51501},[68,54143,51508],{"class":335},[68,54145,54146,54148,54150,54153,54155,54157,54160,54162,54165,54168,54170],{"class":70,"line":92},[68,54147,52345],{"class":335},[68,54149,51812],{"class":51501},[68,54151,54152],{"class":74}," data-id",[68,54154,381],{"class":335},[68,54156,3884],{"class":78},[68,54158,54159],{"class":74}," data-spm",[68,54161,381],{"class":335},[68,54163,54164],{"class":78},"\"我不知道\"",[68,54166,54167],{"class":335},">1\u003C\u002F",[68,54169,51812],{"class":51501},[68,54171,51508],{"class":335},[68,54173,54174,54176,54178,54180,54182,54184,54187,54189],{"class":70,"line":1387},[68,54175,52345],{"class":335},[68,54177,51812],{"class":51501},[68,54179,54152],{"class":74},[68,54181,381],{"class":335},[68,54183,3907],{"class":78},[68,54185,54186],{"class":335},">2\u003C\u002F",[68,54188,51812],{"class":51501},[68,54190,51508],{"class":335},[68,54192,54193,54195,54197,54199,54201,54203,54206,54208],{"class":70,"line":1402},[68,54194,52345],{"class":335},[68,54196,51812],{"class":51501},[68,54198,54152],{"class":74},[68,54200,381],{"class":335},[68,54202,3920],{"class":78},[68,54204,54205],{"class":335},">3\u003C\u002F",[68,54207,51812],{"class":51501},[68,54209,51508],{"class":335},[68,54211,54212,54214,54216,54218,54220,54222,54225,54227],{"class":70,"line":1408},[68,54213,52345],{"class":335},[68,54215,51812],{"class":51501},[68,54217,54152],{"class":74},[68,54219,381],{"class":335},[68,54221,3933],{"class":78},[68,54223,54224],{"class":335},">4\u003C\u002F",[68,54226,51812],{"class":51501},[68,54228,51508],{"class":335},[68,54230,54231,54233,54235,54237,54239,54241,54244,54246],{"class":70,"line":1422},[68,54232,52345],{"class":335},[68,54234,51812],{"class":51501},[68,54236,54152],{"class":74},[68,54238,381],{"class":335},[68,54240,3954],{"class":78},[68,54242,54243],{"class":335},">5\u003C\u002F",[68,54245,51812],{"class":51501},[68,54247,51508],{"class":335},[68,54249,54250,54252,54254],{"class":70,"line":1428},[68,54251,52345],{"class":335},[68,54253,52014],{"class":51501},[68,54255,51508],{"class":335},[68,54257,54258],{"class":70,"line":1519},[68,54259,54260],{"class":335},"    const one = document.querySelector('div')\n",[68,54262,54263],{"class":70,"line":1525},[68,54264,54265],{"class":335},"    console.log(one.dataset)\n",[68,54267,54268],{"class":70,"line":1537},[68,54269,54270],{"class":335},"    console.log(one.dataset.id)\n",[68,54272,54273],{"class":70,"line":1819},[68,54274,54275],{"class":335},"    console.log(one.dataset.spm)\n",[68,54277,54278,54280,54282],{"class":70,"line":1824},[68,54279,52618],{"class":335},[68,54281,52014],{"class":51501},[68,54283,51508],{"class":335},[68,54285,54286,54288,54290],{"class":70,"line":1830},[68,54287,51986],{"class":335},[68,54289,52001],{"class":51501},[68,54291,51508],{"class":335},[19,54293,54294],{},[48,54295],{"alt":63,"src":54296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54298,54299],{},"document.querySelector选择的是第一个对象（元素）",[301,54301,54303],{"id":54302},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54305,54306],{},[48,54307],{"alt":63,"src":54308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54310,54311],{},[48,54312],{"alt":63,"src":54313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54315,54316],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52014,54318,54319],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54321,54322],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52014,54324,54325],{},"\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",[19,54327,54328],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54330,54331],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54333,54334],{},"单位为毫秒！！！",[19,54336,54337],{},"可以搭配匿名函数来用！！！",[19,54339,54340],{},"setInterval(function () {",[19,54342,54343],{},"alert('两秒执行一次')",[19,54345,54346],{},"}, 2000)",[19,54348,54349],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54351,54352],{},"function fn() {",[19,54354,54355],{},"document.write(1)",[19,54357,1279],{},[19,54359,54360],{},"setInterval(fn, 1000)",[19,54362,54363],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54365,54366],{},"setInterval('fn()', 1000)",[19,54368,54369],{},[48,54370],{"alt":63,"src":54371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22203,54373,54375],{"id":54374},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[58,54377,54379],{"className":50834,"code":54378,"language":50836,"meta":63,"style":63},"\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",[65,54380,54381,54391,54405,54409,54417,54431,54451,54463,54471,54475,54483,54520,54525,54530,54535,54543,54551,54573,54581,54586,54608,54613,54618,54629,54634,54654,54662,54677,54692,54703,54708,54718,54728,54732,54741,54745,54753,54761,54765],{"__ignoreMap":63},[68,54382,54383,54385,54387,54389],{"class":70,"line":71},[68,54384,51498],{"class":335},[68,54386,51502],{"class":51501},[68,54388,51505],{"class":74},[68,54390,51508],{"class":335},[68,54392,54393,54395,54397,54399,54401,54403],{"class":70,"line":92},[68,54394,1243],{"class":335},[68,54396,50836],{"class":51501},[68,54398,51517],{"class":74},[68,54400,381],{"class":335},[68,54402,51522],{"class":78},[68,54404,51508],{"class":335},[68,54406,54407],{"class":70,"line":1387},[68,54408,2606],{"emptyLinePlaceholder":260},[68,54410,54411,54413,54415],{"class":70,"line":1402},[68,54412,1243],{"class":335},[68,54414,51535],{"class":51501},[68,54416,51508],{"class":335},[68,54418,54419,54421,54423,54425,54427,54429],{"class":70,"line":1408},[68,54420,52345],{"class":335},[68,54422,51545],{"class":51501},[68,54424,51548],{"class":74},[68,54426,381],{"class":335},[68,54428,51553],{"class":78},[68,54430,51508],{"class":335},[68,54432,54433,54435,54437,54439,54441,54443,54445,54447,54449],{"class":70,"line":1422},[68,54434,52345],{"class":335},[68,54436,51545],{"class":51501},[68,54438,15125],{"class":74},[68,54440,381],{"class":335},[68,54442,51592],{"class":78},[68,54444,51572],{"class":74},[68,54446,381],{"class":335},[68,54448,51599],{"class":78},[68,54450,51508],{"class":335},[68,54452,54453,54455,54457,54459,54461],{"class":70,"line":1428},[68,54454,52345],{"class":335},[68,54456,51608],{"class":51501},[68,54458,51611],{"class":335},[68,54460,51608],{"class":51501},[68,54462,51508],{"class":335},[68,54464,54465,54467,54469],{"class":70,"line":1519},[68,54466,51986],{"class":335},[68,54468,51535],{"class":51501},[68,54470,51508],{"class":335},[68,54472,54473],{"class":70,"line":1525},[68,54474,2606],{"emptyLinePlaceholder":260},[68,54476,54477,54479,54481],{"class":70,"line":1537},[68,54478,1243],{"class":335},[68,54480,52001],{"class":51501},[68,54482,51508],{"class":335},[68,54484,54485,54487,54490,54492,54494,54496,54498,54500,54502,54505,54507,54510,54513,54515,54518],{"class":70,"line":1819},[68,54486,52345],{"class":335},[68,54488,54489],{"class":51501},"textarea",[68,54491,15125],{"class":74},[68,54493,381],{"class":335},[68,54495,7857],{"class":78},[68,54497,15164],{"class":74},[68,54499,381],{"class":335},[68,54501,7857],{"class":78},[68,54503,54504],{"class":74}," cols",[68,54506,381],{"class":335},[68,54508,54509],{"class":78},"\"30\"",[68,54511,54512],{"class":74}," rows",[68,54514,381],{"class":335},[68,54516,54517],{"class":78},"\"10\"",[68,54519,51508],{"class":335},[68,54521,54522],{"class":70,"line":1824},[68,54523,54524],{"class":335},"        用户注册协议\n",[68,54526,54527],{"class":70,"line":1830},[68,54528,54529],{"class":335},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[68,54531,54532],{"class":70,"line":1835},[68,54533,54534],{"class":335},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[68,54536,54537,54539,54541],{"class":70,"line":1849},[68,54538,51977],{"class":335},[68,54540,54489],{"class":51501},[68,54542,51508],{"class":335},[68,54544,54545,54547,54549],{"class":70,"line":1854},[68,54546,52345],{"class":335},[68,54548,53917],{"class":51501},[68,54550,51508],{"class":335},[68,54552,54553,54555,54557,54559,54561,54564,54566,54569,54571],{"class":70,"line":1860},[68,54554,52345],{"class":335},[68,54556,54088],{"class":51501},[68,54558,53687],{"class":74},[68,54560,381],{"class":335},[68,54562,54563],{"class":78},"\"btn\"",[68,54565,54091],{"class":74},[68,54567,54568],{"class":335},">我已经阅读用户协议(5)\u003C\u002F",[68,54570,54088],{"class":51501},[68,54572,51508],{"class":335},[68,54574,54575,54577,54579],{"class":70,"line":1881},[68,54576,52345],{"class":335},[68,54578,52014],{"class":51501},[68,54580,51508],{"class":335},[68,54582,54583],{"class":70,"line":1886},[68,54584,54585],{"class":393},"    \u002F\u002F 1. 获取元素\n",[68,54587,54588,54590,54593,54595,54598,54601,54603,54606],{"class":70,"line":1900},[68,54589,11426],{"class":331},[68,54591,54592],{"class":82}," btn",[68,54594,13769],{"class":331},[68,54596,54597],{"class":335}," document.",[68,54599,54600],{"class":74},"querySelector",[68,54602,336],{"class":335},[68,54604,54605],{"class":78},"'.btn'",[68,54607,342],{"class":335},[68,54609,54610],{"class":70,"line":1905},[68,54611,54612],{"class":393},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[68,54614,54615],{"class":70,"line":1934},[68,54616,54617],{"class":393},"    \u002F\u002F 2. 倒计时\n",[68,54619,54620,54622,54624,54626],{"class":70,"line":1939},[68,54621,52420],{"class":331},[68,54623,9643],{"class":335},[68,54625,381],{"class":331},[68,54627,54628],{"class":82}," 5\n",[68,54630,54631],{"class":70,"line":1956},[68,54632,54633],{"class":393},"    \u002F\u002F 2.1 开启定时器\n",[68,54635,54636,54638,54641,54643,54646,54648,54651],{"class":70,"line":1961},[68,54637,52420],{"class":331},[68,54639,54640],{"class":335}," n ",[68,54642,381],{"class":331},[68,54644,54645],{"class":74}," setInterval",[68,54647,336],{"class":335},[68,54649,54650],{"class":331},"function",[68,54652,54653],{"class":335}," () {\n",[68,54655,54656,54659],{"class":70,"line":1966},[68,54657,54658],{"class":335},"      i",[68,54660,54661],{"class":331},"--\n",[68,54663,54664,54667,54669,54672,54674],{"class":70,"line":1971},[68,54665,54666],{"class":335},"      btn.innerHTML ",[68,54668,381],{"class":331},[68,54670,54671],{"class":78}," `我已经阅读用户协议(${",[68,54673,774],{"class":335},[68,54675,54676],{"class":78},"})`\n",[68,54678,54679,54682,54685,54688,54690],{"class":70,"line":1985},[68,54680,54681],{"class":331},"      if",[68,54683,54684],{"class":335}," (i ",[68,54686,54687],{"class":331},"===",[68,54689,4299],{"class":82},[68,54691,12647],{"class":335},[68,54693,54694,54697,54700],{"class":70,"line":1990},[68,54695,54696],{"class":74},"        clearInterval",[68,54698,54699],{"class":335},"(n)  ",[68,54701,54702],{"class":393},"\u002F\u002F 关闭定时器\n",[68,54704,54705],{"class":70,"line":2783},[68,54706,54707],{"class":393},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[68,54709,54710,54713,54715],{"class":70,"line":2797},[68,54711,54712],{"class":335},"        btn.disabled ",[68,54714,381],{"class":331},[68,54716,54717],{"class":82}," false\n",[68,54719,54720,54723,54725],{"class":70,"line":2805},[68,54721,54722],{"class":335},"        btn.innerHTML ",[68,54724,381],{"class":331},[68,54726,54727],{"class":78}," '同意'\n",[68,54729,54730],{"class":70,"line":2810},[68,54731,52599],{"class":335},[68,54733,54734,54737,54739],{"class":70,"line":2816},[68,54735,54736],{"class":335},"    }, ",[68,54738,6615],{"class":82},[68,54740,342],{"class":335},[68,54742,54743],{"class":70,"line":2822},[68,54744,2606],{"emptyLinePlaceholder":260},[68,54746,54747,54749,54751],{"class":70,"line":2827},[68,54748,52618],{"class":335},[68,54750,52014],{"class":51501},[68,54752,51508],{"class":335},[68,54754,54755,54757,54759],{"class":70,"line":8153},[68,54756,51986],{"class":335},[68,54758,52001],{"class":51501},[68,54760,51508],{"class":335},[68,54762,54763],{"class":70,"line":8177},[68,54764,2606],{"emptyLinePlaceholder":260},[68,54766,54767,54769,54771],{"class":70,"line":8182},[68,54768,51986],{"class":335},[68,54770,50836],{"class":51501},[68,54772,51508],{"class":335},[19,54774,54775],{},"不要一直想着用死循环,避免死循环",[19,54777,54778,54781],{},[65,54779,54780],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22203,54783,54785],{"id":54784},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[23,54787,54788],{},[26,54789,54790],{},"法1",[58,54792,54794],{"className":50834,"code":54793,"language":50836,"meta":63,"style":63},"\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",[65,54795,54796,54806,54820,54824,54832,54846,54866,54878,54886,54892,54903,54914,54918,54922,54929,54941,54945,54949,54956,54968,54982,54995,55009,55013,55017,55024,55035,55046,55057,55069,55081,55093,55097,55101,55109,55119,55132,55144,55157,55161,55165,55172,55182,55194,55206,55217,55228,55238,55250,55262,55266,55270,55279,55291,55303,55331,55344,55348,55352,55359,55370,55374,55382,55390,55394,55402,55416,55431,55455,55463,55478,55491,55499,55520,55532,55544,55556,55568,55580,55592,55604,55613,55621,55629,55637,55649,55672,55691,55710,55729,55748,55767,55786,55806,55810,55830,55849,55869,55890,55901,55918,55928,55938,55948,55953,55958,55963,55968,55993,56006,56010,56033,56037,56045,56053,56061,56065],{"__ignoreMap":63},[68,54797,54798,54800,54802,54804],{"class":70,"line":71},[68,54799,51498],{"class":335},[68,54801,51502],{"class":51501},[68,54803,51505],{"class":74},[68,54805,51508],{"class":335},[68,54807,54808,54810,54812,54814,54816,54818],{"class":70,"line":92},[68,54809,1243],{"class":335},[68,54811,50836],{"class":51501},[68,54813,51517],{"class":74},[68,54815,381],{"class":335},[68,54817,51522],{"class":78},[68,54819,51508],{"class":335},[68,54821,54822],{"class":70,"line":1387},[68,54823,2606],{"emptyLinePlaceholder":260},[68,54825,54826,54828,54830],{"class":70,"line":1402},[68,54827,1243],{"class":335},[68,54829,51535],{"class":51501},[68,54831,51508],{"class":335},[68,54833,54834,54836,54838,54840,54842,54844],{"class":70,"line":1408},[68,54835,52345],{"class":335},[68,54837,51545],{"class":51501},[68,54839,51548],{"class":74},[68,54841,381],{"class":335},[68,54843,51553],{"class":78},[68,54845,51508],{"class":335},[68,54847,54848,54850,54852,54854,54856,54858,54860,54862,54864],{"class":70,"line":1422},[68,54849,52345],{"class":335},[68,54851,51545],{"class":51501},[68,54853,15125],{"class":74},[68,54855,381],{"class":335},[68,54857,51592],{"class":78},[68,54859,51572],{"class":74},[68,54861,381],{"class":335},[68,54863,51599],{"class":78},[68,54865,51508],{"class":335},[68,54867,54868,54870,54872,54874,54876],{"class":70,"line":1428},[68,54869,52345],{"class":335},[68,54871,51608],{"class":51501},[68,54873,51611],{"class":335},[68,54875,51608],{"class":51501},[68,54877,51508],{"class":335},[68,54879,54880,54882,54884],{"class":70,"line":1519},[68,54881,52345],{"class":335},[68,54883,250],{"class":51501},[68,54885,51508],{"class":335},[68,54887,54888,54890],{"class":70,"line":1525},[68,54889,6608],{"class":51501},[68,54891,15777],{"class":335},[68,54893,54894,54897,54899,54901],{"class":70,"line":1537},[68,54895,54896],{"class":82},"      padding",[68,54898,51638],{"class":335},[68,54900,525],{"class":82},[68,54902,1498],{"class":335},[68,54904,54905,54908,54910,54912],{"class":70,"line":1819},[68,54906,54907],{"class":82},"      margin",[68,54909,51638],{"class":335},[68,54911,525],{"class":82},[68,54913,1498],{"class":335},[68,54915,54916],{"class":70,"line":1824},[68,54917,2393],{"class":335},[68,54919,54920],{"class":70,"line":1830},[68,54921,2606],{"emptyLinePlaceholder":260},[68,54923,54924,54927],{"class":70,"line":1835},[68,54925,54926],{"class":51501},"    li",[68,54928,15777],{"class":335},[68,54930,54931,54934,54936,54939],{"class":70,"line":1849},[68,54932,54933],{"class":82},"      list-style",[68,54935,51638],{"class":335},[68,54937,54938],{"class":82},"none",[68,54940,1498],{"class":335},[68,54942,54943],{"class":70,"line":1854},[68,54944,2393],{"class":335},[68,54946,54947],{"class":70,"line":1860},[68,54948,2606],{"emptyLinePlaceholder":260},[68,54950,54951,54954],{"class":70,"line":1881},[68,54952,54953],{"class":74},"    .box",[68,54955,15777],{"class":335},[68,54957,54958,54961,54963,54966],{"class":70,"line":1886},[68,54959,54960],{"class":82},"      position",[68,54962,51638],{"class":335},[68,54964,54965],{"class":82},"relative",[68,54967,1498],{"class":335},[68,54969,54970,54973,54975,54978,54980],{"class":70,"line":1900},[68,54971,54972],{"class":82},"      width",[68,54974,51638],{"class":335},[68,54976,54977],{"class":82},"976",[68,54979,51693],{"class":331},[68,54981,1498],{"class":335},[68,54983,54984,54987,54989,54991,54993],{"class":70,"line":1905},[68,54985,54986],{"class":82},"      height",[68,54988,51638],{"class":335},[68,54990,1746],{"class":82},[68,54992,51693],{"class":331},[68,54994,1498],{"class":335},[68,54996,54997,54999,55001,55003,55005,55007],{"class":70,"line":1934},[68,54998,54907],{"class":82},[68,55000,51638],{"class":335},[68,55002,644],{"class":82},[68,55004,51693],{"class":331},[68,55006,51757],{"class":82},[68,55008,1498],{"class":335},[68,55010,55011],{"class":70,"line":1939},[68,55012,2393],{"class":335},[68,55014,55015],{"class":70,"line":1956},[68,55016,2606],{"emptyLinePlaceholder":260},[68,55018,55019,55022],{"class":70,"line":1961},[68,55020,55021],{"class":74},"    .slider-footer",[68,55023,15777],{"class":335},[68,55025,55026,55028,55030,55033],{"class":70,"line":1966},[68,55027,54960],{"class":82},[68,55029,51638],{"class":335},[68,55031,55032],{"class":82},"absolute",[68,55034,1498],{"class":335},[68,55036,55037,55040,55042,55044],{"class":70,"line":1971},[68,55038,55039],{"class":82},"      left",[68,55041,51638],{"class":335},[68,55043,525],{"class":82},[68,55045,1498],{"class":335},[68,55047,55048,55051,55053,55055],{"class":70,"line":1985},[68,55049,55050],{"class":82},"      bottom",[68,55052,51638],{"class":335},[68,55054,525],{"class":82},[68,55056,1498],{"class":335},[68,55058,55059,55061,55063,55065,55067],{"class":70,"line":1990},[68,55060,54972],{"class":82},[68,55062,51638],{"class":335},[68,55064,644],{"class":82},[68,55066,661],{"class":331},[68,55068,1498],{"class":335},[68,55070,55071,55073,55075,55077,55079],{"class":70,"line":2783},[68,55072,54986],{"class":82},[68,55074,51638],{"class":335},[68,55076,908],{"class":82},[68,55078,661],{"class":331},[68,55080,1498],{"class":335},[68,55082,55083,55086,55088,55091],{"class":70,"line":2797},[68,55084,55085],{"class":82},"      background-color",[68,55087,51638],{"class":335},[68,55089,55090],{"class":82},"skyblue",[68,55092,1498],{"class":335},[68,55094,55095],{"class":70,"line":2805},[68,55096,2393],{"class":335},[68,55098,55099],{"class":70,"line":2810},[68,55100,2606],{"emptyLinePlaceholder":260},[68,55102,55103,55105,55107],{"class":70,"line":2816},[68,55104,55021],{"class":74},[68,55106,7030],{"class":51501},[68,55108,15777],{"class":335},[68,55110,55111,55113,55115,55117],{"class":70,"line":2822},[68,55112,54960],{"class":82},[68,55114,51638],{"class":335},[68,55116,55032],{"class":82},[68,55118,1498],{"class":335},[68,55120,55121,55124,55126,55128,55130],{"class":70,"line":2827},[68,55122,55123],{"class":82},"      font-size",[68,55125,51638],{"class":335},[68,55127,1234],{"class":82},[68,55129,51693],{"class":331},[68,55131,1498],{"class":335},[68,55133,55134,55136,55138,55140,55142],{"class":70,"line":8153},[68,55135,55039],{"class":82},[68,55137,51638],{"class":335},[68,55139,1033],{"class":82},[68,55141,51693],{"class":331},[68,55143,1498],{"class":335},[68,55145,55146,55149,55151,55153,55155],{"class":70,"line":8177},[68,55147,55148],{"class":82},"      top",[68,55150,51638],{"class":335},[68,55152,652],{"class":82},[68,55154,51693],{"class":331},[68,55156,1498],{"class":335},[68,55158,55159],{"class":70,"line":8182},[68,55160,2393],{"class":335},[68,55162,55163],{"class":70,"line":8188},[68,55164,2606],{"emptyLinePlaceholder":260},[68,55166,55167,55170],{"class":70,"line":8215},[68,55168,55169],{"class":51501},"    ul",[68,55171,15777],{"class":335},[68,55173,55174,55176,55178,55180],{"class":70,"line":8220},[68,55175,54960],{"class":82},[68,55177,51638],{"class":335},[68,55179,55032],{"class":82},[68,55181,1498],{"class":335},[68,55183,55184,55186,55188,55190,55192],{"class":70,"line":8226},[68,55185,55148],{"class":82},[68,55187,51638],{"class":335},[68,55189,1114],{"class":82},[68,55191,51693],{"class":331},[68,55193,1498],{"class":335},[68,55195,55196,55198,55200,55202,55204],{"class":70,"line":8238},[68,55197,55039],{"class":82},[68,55199,51638],{"class":335},[68,55201,1033],{"class":82},[68,55203,51693],{"class":331},[68,55205,1498],{"class":335},[68,55207,55208,55211,55213,55215],{"class":70,"line":8250},[68,55209,55210],{"class":82},"      display",[68,55212,51638],{"class":335},[68,55214,51678],{"class":82},[68,55216,1498],{"class":335},[68,55218,55219,55222,55224,55226],{"class":70,"line":8262},[68,55220,55221],{"class":82},"      justify-content",[68,55223,51638],{"class":335},[68,55225,51869],{"class":82},[68,55227,1498],{"class":335},[68,55229,55230,55232,55234,55236],{"class":70,"line":9921},[68,55231,54960],{"class":82},[68,55233,51638],{"class":335},[68,55235,55032],{"class":82},[68,55237,1498],{"class":335},[68,55239,55240,55242,55244,55246,55248],{"class":70,"line":9946},[68,55241,54972],{"class":82},[68,55243,51638],{"class":335},[68,55245,4198],{"class":82},[68,55247,51693],{"class":331},[68,55249,1498],{"class":335},[68,55251,55252,55254,55256,55258,55260],{"class":70,"line":9969},[68,55253,54986],{"class":82},[68,55255,51638],{"class":335},[68,55257,1033],{"class":82},[68,55259,51693],{"class":331},[68,55261,1498],{"class":335},[68,55263,55264],{"class":70,"line":9993},[68,55265,2393],{"class":335},[68,55267,55268],{"class":70,"line":9998},[68,55269,2606],{"emptyLinePlaceholder":260},[68,55271,55272,55274,55277],{"class":70,"line":10003},[68,55273,55169],{"class":51501},[68,55275,55276],{"class":51501}," li",[68,55278,15777],{"class":335},[68,55280,55281,55283,55285,55287,55289],{"class":70,"line":10008},[68,55282,54972],{"class":82},[68,55284,51638],{"class":335},[68,55286,1033],{"class":82},[68,55288,51693],{"class":331},[68,55290,1498],{"class":335},[68,55292,55293,55295,55297,55299,55301],{"class":70,"line":10017},[68,55294,54986],{"class":82},[68,55296,51638],{"class":335},[68,55298,1033],{"class":82},[68,55300,51693],{"class":331},[68,55302,1498],{"class":335},[68,55304,55305,55307,55309,55312,55314,55316,55318,55320,55322,55324,55326,55329],{"class":70,"line":10022},[68,55306,55085],{"class":82},[68,55308,51638],{"class":335},[68,55310,55311],{"class":82},"rgba",[68,55313,336],{"class":335},[68,55315,525],{"class":82},[68,55317,12640],{"class":335},[68,55319,525],{"class":82},[68,55321,12640],{"class":335},[68,55323,525],{"class":82},[68,55325,12640],{"class":335},[68,55327,55328],{"class":82},".4",[68,55330,2925],{"class":335},[68,55332,55333,55336,55338,55340,55342],{"class":70,"line":10028},[68,55334,55335],{"class":82},"      border-radius",[68,55337,51638],{"class":335},[68,55339,779],{"class":82},[68,55341,51693],{"class":331},[68,55343,1498],{"class":335},[68,55345,55346],{"class":70,"line":10049},[68,55347,2393],{"class":335},[68,55349,55350],{"class":70,"line":10055},[68,55351,2606],{"emptyLinePlaceholder":260},[68,55353,55354,55357],{"class":70,"line":10069},[68,55355,55356],{"class":74},"    .activate",[68,55358,15777],{"class":335},[68,55360,55361,55363,55365,55368],{"class":70,"line":10075},[68,55362,55085],{"class":82},[68,55364,51638],{"class":335},[68,55366,55367],{"class":82},"#f7f7f7",[68,55369,1498],{"class":335},[68,55371,55372],{"class":70,"line":10102},[68,55373,2393],{"class":335},[68,55375,55376,55378,55380],{"class":70,"line":10111},[68,55377,52618],{"class":335},[68,55379,250],{"class":51501},[68,55381,51508],{"class":335},[68,55383,55384,55386,55388],{"class":70,"line":10117},[68,55385,51986],{"class":335},[68,55387,51535],{"class":51501},[68,55389,51508],{"class":335},[68,55391,55392],{"class":70,"line":10125},[68,55393,2606],{"emptyLinePlaceholder":260},[68,55395,55396,55398,55400],{"class":70,"line":10130},[68,55397,1243],{"class":335},[68,55399,52001],{"class":51501},[68,55401,51508],{"class":335},[68,55403,55404,55406,55408,55410,55412,55414],{"class":70,"line":16809},[68,55405,52345],{"class":335},[68,55407,51812],{"class":51501},[68,55409,53687],{"class":74},[68,55411,381],{"class":335},[68,55413,53692],{"class":78},[68,55415,51508],{"class":335},[68,55417,55418,55420,55422,55424,55426,55429],{"class":70,"line":16815},[68,55419,51542],{"class":335},[68,55421,51812],{"class":51501},[68,55423,53687],{"class":74},[68,55425,381],{"class":335},[68,55427,55428],{"class":78},"\"slider-wrapper\"",[68,55430,51508],{"class":335},[68,55432,55433,55436,55438,55441,55443,55446,55449,55451,55453],{"class":70,"line":16838},[68,55434,55435],{"class":335},"      \u003C",[68,55437,48],{"class":51501},[68,55439,55440],{"class":74}," src",[68,55442,381],{"class":335},[68,55444,55445],{"class":78},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[68,55447,55448],{"class":74}," alt",[68,55450,381],{"class":335},[68,55452,7857],{"class":78},[68,55454,51508],{"class":335},[68,55456,55457,55459,55461],{"class":70,"line":16844},[68,55458,51977],{"class":335},[68,55460,51812],{"class":51501},[68,55462,51508],{"class":335},[68,55464,55465,55467,55469,55471,55473,55476],{"class":70,"line":16867},[68,55466,51542],{"class":335},[68,55468,51812],{"class":51501},[68,55470,53687],{"class":74},[68,55472,381],{"class":335},[68,55474,55475],{"class":78},"\"slider-footer\"",[68,55477,51508],{"class":335},[68,55479,55480,55482,55484,55487,55489],{"class":70,"line":16881},[68,55481,55435],{"class":335},[68,55483,19],{"class":51501},[68,55485,55486],{"class":335},">对人类来说会不会太超前了?\u003C\u002F",[68,55488,19],{"class":51501},[68,55490,51508],{"class":335},[68,55492,55493,55495,55497],{"class":70,"line":16901},[68,55494,55435],{"class":335},[68,55496,42],{"class":51501},[68,55498,51508],{"class":335},[68,55500,55501,55504,55506,55508,55510,55513,55516,55518],{"class":70,"line":16907},[68,55502,55503],{"class":335},"        \u003C",[68,55505,26],{"class":51501},[68,55507,53687],{"class":74},[68,55509,381],{"class":335},[68,55511,55512],{"class":78},"\"activate\"",[68,55514,55515],{"class":335},">\u003C\u002F",[68,55517,26],{"class":51501},[68,55519,51508],{"class":335},[68,55521,55522,55524,55526,55528,55530],{"class":70,"line":16918},[68,55523,55503],{"class":335},[68,55525,26],{"class":51501},[68,55527,55515],{"class":335},[68,55529,26],{"class":51501},[68,55531,51508],{"class":335},[68,55533,55534,55536,55538,55540,55542],{"class":70,"line":16941},[68,55535,55503],{"class":335},[68,55537,26],{"class":51501},[68,55539,55515],{"class":335},[68,55541,26],{"class":51501},[68,55543,51508],{"class":335},[68,55545,55546,55548,55550,55552,55554],{"class":70,"line":16963},[68,55547,55503],{"class":335},[68,55549,26],{"class":51501},[68,55551,55515],{"class":335},[68,55553,26],{"class":51501},[68,55555,51508],{"class":335},[68,55557,55558,55560,55562,55564,55566],{"class":70,"line":16968},[68,55559,55503],{"class":335},[68,55561,26],{"class":51501},[68,55563,55515],{"class":335},[68,55565,26],{"class":51501},[68,55567,51508],{"class":335},[68,55569,55570,55572,55574,55576,55578],{"class":70,"line":16974},[68,55571,55503],{"class":335},[68,55573,26],{"class":51501},[68,55575,55515],{"class":335},[68,55577,26],{"class":51501},[68,55579,51508],{"class":335},[68,55581,55582,55584,55586,55588,55590],{"class":70,"line":16988},[68,55583,55503],{"class":335},[68,55585,26],{"class":51501},[68,55587,55515],{"class":335},[68,55589,26],{"class":51501},[68,55591,51508],{"class":335},[68,55593,55594,55596,55598,55600,55602],{"class":70,"line":17001},[68,55595,55503],{"class":335},[68,55597,26],{"class":51501},[68,55599,55515],{"class":335},[68,55601,26],{"class":51501},[68,55603,51508],{"class":335},[68,55605,55606,55609,55611],{"class":70,"line":17006},[68,55607,55608],{"class":335},"      \u003C\u002F",[68,55610,42],{"class":51501},[68,55612,51508],{"class":335},[68,55614,55615,55617,55619],{"class":70,"line":17020},[68,55616,51977],{"class":335},[68,55618,51812],{"class":51501},[68,55620,51508],{"class":335},[68,55622,55623,55625,55627],{"class":70,"line":17025},[68,55624,52618],{"class":335},[68,55626,51812],{"class":51501},[68,55628,51508],{"class":335},[68,55630,55631,55633,55635],{"class":70,"line":17031},[68,55632,52345],{"class":335},[68,55634,52014],{"class":51501},[68,55636,51508],{"class":335},[68,55638,55639,55641,55644,55646],{"class":70,"line":17036},[68,55640,11426],{"class":331},[68,55642,55643],{"class":82}," arrImage",[68,55645,13769],{"class":331},[68,55647,55648],{"class":335}," [\n",[68,55650,55651,55654,55657,55660,55663,55666,55669],{"class":70,"line":17050},[68,55652,55653],{"class":335},"      { url: ",[68,55655,55656],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[68,55658,55659],{"class":335},", title: ",[68,55661,55662],{"class":78},"'对人类来说会不会太超前了?'",[68,55664,55665],{"class":335},", color: ",[68,55667,55668],{"class":78},"'rgba(100,67,68)'",[68,55670,55671],{"class":335}," },\n",[68,55673,55674,55676,55679,55681,55684,55686,55689],{"class":70,"line":17055},[68,55675,55653],{"class":335},[68,55677,55678],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[68,55680,55659],{"class":335},[68,55682,55683],{"class":78},"'开启剑与雪的黑暗传说!'",[68,55685,55665],{"class":335},[68,55687,55688],{"class":78},"'rgba(43,35,26)'",[68,55690,55671],{"class":335},[68,55692,55693,55695,55698,55700,55703,55705,55708],{"class":70,"line":17060},[68,55694,55653],{"class":335},[68,55696,55697],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[68,55699,55659],{"class":335},[68,55701,55702],{"class":78},"'真正的jo厨出现了!'",[68,55704,55665],{"class":335},[68,55706,55707],{"class":78},"'rgba(36,31,33)'",[68,55709,55671],{"class":335},[68,55711,55712,55714,55717,55719,55722,55724,55727],{"class":70,"line":17074},[68,55713,55653],{"class":335},[68,55715,55716],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[68,55718,55659],{"class":335},[68,55720,55721],{"class":78},"'李玉刚:让世界通过b站看到东方大国文化'",[68,55723,55665],{"class":335},[68,55725,55726],{"class":78},"'rgba(139,98,66)'",[68,55728,55671],{"class":335},[68,55730,55731,55733,55736,55738,55741,55743,55746],{"class":70,"line":17086},[68,55732,55653],{"class":335},[68,55734,55735],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[68,55737,55659],{"class":335},[68,55739,55740],{"class":78},"'快来分享你的寒假日常吧'",[68,55742,55665],{"class":335},[68,55744,55745],{"class":78},"'rgba(67,90,92)'",[68,55747,55671],{"class":335},[68,55749,55750,55752,55755,55757,55760,55762,55765],{"class":70,"line":17091},[68,55751,55653],{"class":335},[68,55753,55754],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[68,55756,55659],{"class":335},[68,55758,55759],{"class":78},"'哔哩哔哩小年YEAR'",[68,55761,55665],{"class":335},[68,55763,55764],{"class":78},"'rgba(166,131,143)'",[68,55766,55671],{"class":335},[68,55768,55769,55771,55774,55776,55779,55781,55784],{"class":70,"line":17104},[68,55770,55653],{"class":335},[68,55772,55773],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[68,55775,55659],{"class":335},[68,55777,55778],{"class":78},"'一站式解决你的电脑配置问题'",[68,55780,55665],{"class":335},[68,55782,55783],{"class":78},"'rgba(53,29,25)'",[68,55785,55671],{"class":335},[68,55787,55788,55790,55793,55795,55798,55800,55803],{"class":70,"line":17109},[68,55789,55653],{"class":335},[68,55791,55792],{"class":78},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[68,55794,55659],{"class":335},[68,55796,55797],{"class":78},"'谁不想和小猫咪贴贴呢?'",[68,55799,55665],{"class":335},[68,55801,55802],{"class":78},"'rgba(99,72,114)'",[68,55804,55805],{"class":335}," }\n",[68,55807,55808],{"class":70,"line":17114},[68,55809,53310],{"class":335},[68,55811,55812,55814,55817,55819,55821,55823,55825,55828],{"class":70,"line":17119},[68,55813,11426],{"class":331},[68,55815,55816],{"class":82}," img",[68,55818,13769],{"class":331},[68,55820,54597],{"class":335},[68,55822,54600],{"class":74},[68,55824,336],{"class":335},[68,55826,55827],{"class":78},"'.slider-wrapper img'",[68,55829,342],{"class":335},[68,55831,55832,55834,55836,55838,55840,55842,55844,55847],{"class":70,"line":17132},[68,55833,11426],{"class":331},[68,55835,7030],{"class":82},[68,55837,13769],{"class":331},[68,55839,54597],{"class":335},[68,55841,54600],{"class":74},[68,55843,336],{"class":335},[68,55845,55846],{"class":78},"'.slider-footer p'",[68,55848,342],{"class":335},[68,55850,55851,55853,55856,55858,55860,55862,55864,55867],{"class":70,"line":17137},[68,55852,11426],{"class":331},[68,55854,55855],{"class":82}," color",[68,55857,13769],{"class":331},[68,55859,54597],{"class":335},[68,55861,54600],{"class":74},[68,55863,336],{"class":335},[68,55865,55866],{"class":78},"'.slider-footer'",[68,55868,342],{"class":335},[68,55870,55871,55873,55876,55878,55880,55883,55885,55888],{"class":70,"line":32834},[68,55872,11426],{"class":331},[68,55874,55875],{"class":82}," lis",[68,55877,13769],{"class":331},[68,55879,54597],{"class":335},[68,55881,55882],{"class":74},"querySelectorAll",[68,55884,336],{"class":335},[68,55886,55887],{"class":78},"'.slider-footer ul li'",[68,55889,342],{"class":335},[68,55891,55892,55894,55896,55898],{"class":70,"line":32840},[68,55893,52420],{"class":331},[68,55895,9643],{"class":335},[68,55897,381],{"class":331},[68,55899,55900],{"class":82}," 1\n",[68,55902,55903,55905,55908,55910,55912,55914,55916],{"class":70,"line":32846},[68,55904,52420],{"class":331},[68,55906,55907],{"class":335}," timer ",[68,55909,381],{"class":331},[68,55911,54645],{"class":74},[68,55913,336],{"class":335},[68,55915,54650],{"class":331},[68,55917,54653],{"class":335},[68,55919,55920,55923,55925],{"class":70,"line":32852},[68,55921,55922],{"class":335},"      img.src ",[68,55924,381],{"class":331},[68,55926,55927],{"class":335}," arrImage[i].url\n",[68,55929,55930,55933,55935],{"class":70,"line":32858},[68,55931,55932],{"class":335},"      p.innerHTML ",[68,55934,381],{"class":331},[68,55936,55937],{"class":335}," arrImage[i].title\n",[68,55939,55940,55943,55945],{"class":70,"line":32869},[68,55941,55942],{"class":335},"      color.style.backgroundColor ",[68,55944,381],{"class":331},[68,55946,55947],{"class":335}," arrImage[i].color\n",[68,55949,55950],{"class":70,"line":32875},[68,55951,55952],{"class":393},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[68,55954,55955],{"class":70,"line":32895},[68,55956,55957],{"class":393},"      \u002F\u002F li.classList.add('activate')\n",[68,55959,55960],{"class":70,"line":32901},[68,55961,55962],{"class":393},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[68,55964,55965],{"class":70,"line":32912},[68,55966,55967],{"class":393},"      \u002F\u002F lis[i].classList.remove('activate')\n",[68,55969,55970,55973,55975,55977,55980,55983,55986,55988,55991],{"class":70,"line":32918},[68,55971,55972],{"class":335},"      document.",[68,55974,54600],{"class":74},[68,55976,336],{"class":335},[68,55978,55979],{"class":78},"'.activate'",[68,55981,55982],{"class":335},")?.classList.",[68,55984,55985],{"class":74},"toggle",[68,55987,336],{"class":335},[68,55989,55990],{"class":78},"'activate'",[68,55992,342],{"class":335},[68,55994,55995,55998,56000,56002,56004],{"class":70,"line":32924},[68,55996,55997],{"class":335},"      lis[i].classList.",[68,55999,5539],{"class":74},[68,56001,336],{"class":335},[68,56003,55990],{"class":78},[68,56005,342],{"class":335},[68,56007,56008],{"class":70,"line":32930},[68,56009,2606],{"emptyLinePlaceholder":260},[68,56011,56012,56015,56017,56019,56021,56023,56025,56027,56030],{"class":70,"line":32936},[68,56013,56014],{"class":335},"      i ",[68,56016,381],{"class":331},[68,56018,54684],{"class":335},[68,56020,814],{"class":331},[68,56022,25322],{"class":82},[68,56024,13919],{"class":335},[68,56026,661],{"class":331},[68,56028,56029],{"class":335}," arrImage.",[68,56031,56032],{"class":82},"length\n",[68,56034,56035],{"class":70,"line":32942},[68,56036,2606],{"emptyLinePlaceholder":260},[68,56038,56039,56041,56043],{"class":70,"line":32948},[68,56040,54736],{"class":335},[68,56042,6615],{"class":82},[68,56044,342],{"class":335},[68,56046,56047,56049,56051],{"class":70,"line":32954},[68,56048,52618],{"class":335},[68,56050,52014],{"class":51501},[68,56052,51508],{"class":335},[68,56054,56055,56057,56059],{"class":70,"line":32974},[68,56056,51986],{"class":335},[68,56058,52001],{"class":51501},[68,56060,51508],{"class":335},[68,56062,56063],{"class":70,"line":32980},[68,56064,2606],{"emptyLinePlaceholder":260},[68,56066,56067,56069,56071],{"class":70,"line":32996},[68,56068,51986],{"class":335},[68,56070,50836],{"class":51501},[68,56072,51508],{"class":335},[19,56074,56075],{},[48,56076],{"alt":63,"src":56077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56079,56080],{},"?.就是短路保护,确保输出正常进行",[19,56082,56083],{},"不要忘记取余%,有时候可以用",[19,56085,56086],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[23,56088,56089],{"start":92},[26,56090,56091],{},"法2",[58,56093,56095],{"className":50834,"code":56094,"language":50836,"meta":63,"style":63},"\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",[65,56096,56097,56107,56121,56125,56133,56147,56167,56179,56187,56193,56203,56213,56217,56221,56227,56237,56241,56245,56251,56261,56273,56285,56299,56303,56307,56313,56323,56333,56343,56355,56367,56377,56381,56385,56393,56403,56415,56427,56439,56443,56447,56453,56463,56475,56487,56497,56507,56517,56529,56541,56545,56549,56557,56569,56581,56607,56619,56623,56627,56633,56643,56647,56655,56663,56667,56675,56689,56703,56723,56731,56745,56757,56765,56783,56795,56807,56819,56831,56843,56855,56867,56875,56883,56891,56899,56910,56926,56942,56958,56974,56990,57006,57022,57038,57042,57047,57065,57083,57093,57098,57103,57114,57120,57135,57144,57148,57153,57162,57167,57176,57181,57186,57191,57214,57244,57248,57256,57260,57268,57276,57280],{"__ignoreMap":63},[68,56098,56099,56101,56103,56105],{"class":70,"line":71},[68,56100,51498],{"class":335},[68,56102,51502],{"class":51501},[68,56104,51505],{"class":74},[68,56106,51508],{"class":335},[68,56108,56109,56111,56113,56115,56117,56119],{"class":70,"line":92},[68,56110,1243],{"class":335},[68,56112,50836],{"class":51501},[68,56114,51517],{"class":74},[68,56116,381],{"class":335},[68,56118,51522],{"class":78},[68,56120,51508],{"class":335},[68,56122,56123],{"class":70,"line":1387},[68,56124,2606],{"emptyLinePlaceholder":260},[68,56126,56127,56129,56131],{"class":70,"line":1402},[68,56128,1243],{"class":335},[68,56130,51535],{"class":51501},[68,56132,51508],{"class":335},[68,56134,56135,56137,56139,56141,56143,56145],{"class":70,"line":1408},[68,56136,52345],{"class":335},[68,56138,51545],{"class":51501},[68,56140,51548],{"class":74},[68,56142,381],{"class":335},[68,56144,51553],{"class":78},[68,56146,51508],{"class":335},[68,56148,56149,56151,56153,56155,56157,56159,56161,56163,56165],{"class":70,"line":1422},[68,56150,52345],{"class":335},[68,56152,51545],{"class":51501},[68,56154,15125],{"class":74},[68,56156,381],{"class":335},[68,56158,51592],{"class":78},[68,56160,51572],{"class":74},[68,56162,381],{"class":335},[68,56164,51599],{"class":78},[68,56166,51508],{"class":335},[68,56168,56169,56171,56173,56175,56177],{"class":70,"line":1428},[68,56170,52345],{"class":335},[68,56172,51608],{"class":51501},[68,56174,51611],{"class":335},[68,56176,51608],{"class":51501},[68,56178,51508],{"class":335},[68,56180,56181,56183,56185],{"class":70,"line":1519},[68,56182,52345],{"class":335},[68,56184,250],{"class":51501},[68,56186,51508],{"class":335},[68,56188,56189,56191],{"class":70,"line":1525},[68,56190,6608],{"class":51501},[68,56192,15777],{"class":335},[68,56194,56195,56197,56199,56201],{"class":70,"line":1537},[68,56196,54896],{"class":82},[68,56198,51638],{"class":335},[68,56200,525],{"class":82},[68,56202,1498],{"class":335},[68,56204,56205,56207,56209,56211],{"class":70,"line":1819},[68,56206,54907],{"class":82},[68,56208,51638],{"class":335},[68,56210,525],{"class":82},[68,56212,1498],{"class":335},[68,56214,56215],{"class":70,"line":1824},[68,56216,2393],{"class":335},[68,56218,56219],{"class":70,"line":1830},[68,56220,2606],{"emptyLinePlaceholder":260},[68,56222,56223,56225],{"class":70,"line":1835},[68,56224,54926],{"class":51501},[68,56226,15777],{"class":335},[68,56228,56229,56231,56233,56235],{"class":70,"line":1849},[68,56230,54933],{"class":82},[68,56232,51638],{"class":335},[68,56234,54938],{"class":82},[68,56236,1498],{"class":335},[68,56238,56239],{"class":70,"line":1854},[68,56240,2393],{"class":335},[68,56242,56243],{"class":70,"line":1860},[68,56244,2606],{"emptyLinePlaceholder":260},[68,56246,56247,56249],{"class":70,"line":1881},[68,56248,54953],{"class":74},[68,56250,15777],{"class":335},[68,56252,56253,56255,56257,56259],{"class":70,"line":1886},[68,56254,54960],{"class":82},[68,56256,51638],{"class":335},[68,56258,54965],{"class":82},[68,56260,1498],{"class":335},[68,56262,56263,56265,56267,56269,56271],{"class":70,"line":1900},[68,56264,54972],{"class":82},[68,56266,51638],{"class":335},[68,56268,54977],{"class":82},[68,56270,51693],{"class":331},[68,56272,1498],{"class":335},[68,56274,56275,56277,56279,56281,56283],{"class":70,"line":1905},[68,56276,54986],{"class":82},[68,56278,51638],{"class":335},[68,56280,1746],{"class":82},[68,56282,51693],{"class":331},[68,56284,1498],{"class":335},[68,56286,56287,56289,56291,56293,56295,56297],{"class":70,"line":1934},[68,56288,54907],{"class":82},[68,56290,51638],{"class":335},[68,56292,644],{"class":82},[68,56294,51693],{"class":331},[68,56296,51757],{"class":82},[68,56298,1498],{"class":335},[68,56300,56301],{"class":70,"line":1939},[68,56302,2393],{"class":335},[68,56304,56305],{"class":70,"line":1956},[68,56306,2606],{"emptyLinePlaceholder":260},[68,56308,56309,56311],{"class":70,"line":1961},[68,56310,55021],{"class":74},[68,56312,15777],{"class":335},[68,56314,56315,56317,56319,56321],{"class":70,"line":1966},[68,56316,54960],{"class":82},[68,56318,51638],{"class":335},[68,56320,55032],{"class":82},[68,56322,1498],{"class":335},[68,56324,56325,56327,56329,56331],{"class":70,"line":1971},[68,56326,55039],{"class":82},[68,56328,51638],{"class":335},[68,56330,525],{"class":82},[68,56332,1498],{"class":335},[68,56334,56335,56337,56339,56341],{"class":70,"line":1985},[68,56336,55050],{"class":82},[68,56338,51638],{"class":335},[68,56340,525],{"class":82},[68,56342,1498],{"class":335},[68,56344,56345,56347,56349,56351,56353],{"class":70,"line":1990},[68,56346,54972],{"class":82},[68,56348,51638],{"class":335},[68,56350,644],{"class":82},[68,56352,661],{"class":331},[68,56354,1498],{"class":335},[68,56356,56357,56359,56361,56363,56365],{"class":70,"line":2783},[68,56358,54986],{"class":82},[68,56360,51638],{"class":335},[68,56362,908],{"class":82},[68,56364,661],{"class":331},[68,56366,1498],{"class":335},[68,56368,56369,56371,56373,56375],{"class":70,"line":2797},[68,56370,55085],{"class":82},[68,56372,51638],{"class":335},[68,56374,55090],{"class":82},[68,56376,1498],{"class":335},[68,56378,56379],{"class":70,"line":2805},[68,56380,2393],{"class":335},[68,56382,56383],{"class":70,"line":2810},[68,56384,2606],{"emptyLinePlaceholder":260},[68,56386,56387,56389,56391],{"class":70,"line":2816},[68,56388,55021],{"class":74},[68,56390,7030],{"class":51501},[68,56392,15777],{"class":335},[68,56394,56395,56397,56399,56401],{"class":70,"line":2822},[68,56396,54960],{"class":82},[68,56398,51638],{"class":335},[68,56400,55032],{"class":82},[68,56402,1498],{"class":335},[68,56404,56405,56407,56409,56411,56413],{"class":70,"line":2827},[68,56406,55123],{"class":82},[68,56408,51638],{"class":335},[68,56410,1234],{"class":82},[68,56412,51693],{"class":331},[68,56414,1498],{"class":335},[68,56416,56417,56419,56421,56423,56425],{"class":70,"line":8153},[68,56418,55039],{"class":82},[68,56420,51638],{"class":335},[68,56422,1033],{"class":82},[68,56424,51693],{"class":331},[68,56426,1498],{"class":335},[68,56428,56429,56431,56433,56435,56437],{"class":70,"line":8177},[68,56430,55148],{"class":82},[68,56432,51638],{"class":335},[68,56434,652],{"class":82},[68,56436,51693],{"class":331},[68,56438,1498],{"class":335},[68,56440,56441],{"class":70,"line":8182},[68,56442,2393],{"class":335},[68,56444,56445],{"class":70,"line":8188},[68,56446,2606],{"emptyLinePlaceholder":260},[68,56448,56449,56451],{"class":70,"line":8215},[68,56450,55169],{"class":51501},[68,56452,15777],{"class":335},[68,56454,56455,56457,56459,56461],{"class":70,"line":8220},[68,56456,54960],{"class":82},[68,56458,51638],{"class":335},[68,56460,55032],{"class":82},[68,56462,1498],{"class":335},[68,56464,56465,56467,56469,56471,56473],{"class":70,"line":8226},[68,56466,55148],{"class":82},[68,56468,51638],{"class":335},[68,56470,1114],{"class":82},[68,56472,51693],{"class":331},[68,56474,1498],{"class":335},[68,56476,56477,56479,56481,56483,56485],{"class":70,"line":8238},[68,56478,55039],{"class":82},[68,56480,51638],{"class":335},[68,56482,1033],{"class":82},[68,56484,51693],{"class":331},[68,56486,1498],{"class":335},[68,56488,56489,56491,56493,56495],{"class":70,"line":8250},[68,56490,55210],{"class":82},[68,56492,51638],{"class":335},[68,56494,51678],{"class":82},[68,56496,1498],{"class":335},[68,56498,56499,56501,56503,56505],{"class":70,"line":8262},[68,56500,55221],{"class":82},[68,56502,51638],{"class":335},[68,56504,51869],{"class":82},[68,56506,1498],{"class":335},[68,56508,56509,56511,56513,56515],{"class":70,"line":9921},[68,56510,54960],{"class":82},[68,56512,51638],{"class":335},[68,56514,55032],{"class":82},[68,56516,1498],{"class":335},[68,56518,56519,56521,56523,56525,56527],{"class":70,"line":9946},[68,56520,54972],{"class":82},[68,56522,51638],{"class":335},[68,56524,4198],{"class":82},[68,56526,51693],{"class":331},[68,56528,1498],{"class":335},[68,56530,56531,56533,56535,56537,56539],{"class":70,"line":9969},[68,56532,54986],{"class":82},[68,56534,51638],{"class":335},[68,56536,1033],{"class":82},[68,56538,51693],{"class":331},[68,56540,1498],{"class":335},[68,56542,56543],{"class":70,"line":9993},[68,56544,2393],{"class":335},[68,56546,56547],{"class":70,"line":9998},[68,56548,2606],{"emptyLinePlaceholder":260},[68,56550,56551,56553,56555],{"class":70,"line":10003},[68,56552,55169],{"class":51501},[68,56554,55276],{"class":51501},[68,56556,15777],{"class":335},[68,56558,56559,56561,56563,56565,56567],{"class":70,"line":10008},[68,56560,54972],{"class":82},[68,56562,51638],{"class":335},[68,56564,1033],{"class":82},[68,56566,51693],{"class":331},[68,56568,1498],{"class":335},[68,56570,56571,56573,56575,56577,56579],{"class":70,"line":10017},[68,56572,54986],{"class":82},[68,56574,51638],{"class":335},[68,56576,1033],{"class":82},[68,56578,51693],{"class":331},[68,56580,1498],{"class":335},[68,56582,56583,56585,56587,56589,56591,56593,56595,56597,56599,56601,56603,56605],{"class":70,"line":10022},[68,56584,55085],{"class":82},[68,56586,51638],{"class":335},[68,56588,55311],{"class":82},[68,56590,336],{"class":335},[68,56592,525],{"class":82},[68,56594,12640],{"class":335},[68,56596,525],{"class":82},[68,56598,12640],{"class":335},[68,56600,525],{"class":82},[68,56602,12640],{"class":335},[68,56604,55328],{"class":82},[68,56606,2925],{"class":335},[68,56608,56609,56611,56613,56615,56617],{"class":70,"line":10028},[68,56610,55335],{"class":82},[68,56612,51638],{"class":335},[68,56614,779],{"class":82},[68,56616,51693],{"class":331},[68,56618,1498],{"class":335},[68,56620,56621],{"class":70,"line":10049},[68,56622,2393],{"class":335},[68,56624,56625],{"class":70,"line":10055},[68,56626,2606],{"emptyLinePlaceholder":260},[68,56628,56629,56631],{"class":70,"line":10069},[68,56630,55356],{"class":74},[68,56632,15777],{"class":335},[68,56634,56635,56637,56639,56641],{"class":70,"line":10075},[68,56636,55085],{"class":82},[68,56638,51638],{"class":335},[68,56640,55367],{"class":82},[68,56642,1498],{"class":335},[68,56644,56645],{"class":70,"line":10102},[68,56646,2393],{"class":335},[68,56648,56649,56651,56653],{"class":70,"line":10111},[68,56650,52618],{"class":335},[68,56652,250],{"class":51501},[68,56654,51508],{"class":335},[68,56656,56657,56659,56661],{"class":70,"line":10117},[68,56658,51986],{"class":335},[68,56660,51535],{"class":51501},[68,56662,51508],{"class":335},[68,56664,56665],{"class":70,"line":10125},[68,56666,2606],{"emptyLinePlaceholder":260},[68,56668,56669,56671,56673],{"class":70,"line":10130},[68,56670,1243],{"class":335},[68,56672,52001],{"class":51501},[68,56674,51508],{"class":335},[68,56676,56677,56679,56681,56683,56685,56687],{"class":70,"line":16809},[68,56678,52345],{"class":335},[68,56680,51812],{"class":51501},[68,56682,53687],{"class":74},[68,56684,381],{"class":335},[68,56686,53692],{"class":78},[68,56688,51508],{"class":335},[68,56690,56691,56693,56695,56697,56699,56701],{"class":70,"line":16815},[68,56692,51542],{"class":335},[68,56694,51812],{"class":51501},[68,56696,53687],{"class":74},[68,56698,381],{"class":335},[68,56700,55428],{"class":78},[68,56702,51508],{"class":335},[68,56704,56705,56707,56709,56711,56713,56715,56717,56719,56721],{"class":70,"line":16838},[68,56706,55435],{"class":335},[68,56708,48],{"class":51501},[68,56710,55440],{"class":74},[68,56712,381],{"class":335},[68,56714,55445],{"class":78},[68,56716,55448],{"class":74},[68,56718,381],{"class":335},[68,56720,7857],{"class":78},[68,56722,51508],{"class":335},[68,56724,56725,56727,56729],{"class":70,"line":16844},[68,56726,51977],{"class":335},[68,56728,51812],{"class":51501},[68,56730,51508],{"class":335},[68,56732,56733,56735,56737,56739,56741,56743],{"class":70,"line":16867},[68,56734,51542],{"class":335},[68,56736,51812],{"class":51501},[68,56738,53687],{"class":74},[68,56740,381],{"class":335},[68,56742,55475],{"class":78},[68,56744,51508],{"class":335},[68,56746,56747,56749,56751,56753,56755],{"class":70,"line":16881},[68,56748,55435],{"class":335},[68,56750,19],{"class":51501},[68,56752,55486],{"class":335},[68,56754,19],{"class":51501},[68,56756,51508],{"class":335},[68,56758,56759,56761,56763],{"class":70,"line":16901},[68,56760,55435],{"class":335},[68,56762,42],{"class":51501},[68,56764,51508],{"class":335},[68,56766,56767,56769,56771,56773,56775,56777,56779,56781],{"class":70,"line":16907},[68,56768,55503],{"class":335},[68,56770,26],{"class":51501},[68,56772,53687],{"class":74},[68,56774,381],{"class":335},[68,56776,55512],{"class":78},[68,56778,55515],{"class":335},[68,56780,26],{"class":51501},[68,56782,51508],{"class":335},[68,56784,56785,56787,56789,56791,56793],{"class":70,"line":16918},[68,56786,55503],{"class":335},[68,56788,26],{"class":51501},[68,56790,55515],{"class":335},[68,56792,26],{"class":51501},[68,56794,51508],{"class":335},[68,56796,56797,56799,56801,56803,56805],{"class":70,"line":16941},[68,56798,55503],{"class":335},[68,56800,26],{"class":51501},[68,56802,55515],{"class":335},[68,56804,26],{"class":51501},[68,56806,51508],{"class":335},[68,56808,56809,56811,56813,56815,56817],{"class":70,"line":16963},[68,56810,55503],{"class":335},[68,56812,26],{"class":51501},[68,56814,55515],{"class":335},[68,56816,26],{"class":51501},[68,56818,51508],{"class":335},[68,56820,56821,56823,56825,56827,56829],{"class":70,"line":16968},[68,56822,55503],{"class":335},[68,56824,26],{"class":51501},[68,56826,55515],{"class":335},[68,56828,26],{"class":51501},[68,56830,51508],{"class":335},[68,56832,56833,56835,56837,56839,56841],{"class":70,"line":16974},[68,56834,55503],{"class":335},[68,56836,26],{"class":51501},[68,56838,55515],{"class":335},[68,56840,26],{"class":51501},[68,56842,51508],{"class":335},[68,56844,56845,56847,56849,56851,56853],{"class":70,"line":16988},[68,56846,55503],{"class":335},[68,56848,26],{"class":51501},[68,56850,55515],{"class":335},[68,56852,26],{"class":51501},[68,56854,51508],{"class":335},[68,56856,56857,56859,56861,56863,56865],{"class":70,"line":17001},[68,56858,55503],{"class":335},[68,56860,26],{"class":51501},[68,56862,55515],{"class":335},[68,56864,26],{"class":51501},[68,56866,51508],{"class":335},[68,56868,56869,56871,56873],{"class":70,"line":17006},[68,56870,55608],{"class":335},[68,56872,42],{"class":51501},[68,56874,51508],{"class":335},[68,56876,56877,56879,56881],{"class":70,"line":17020},[68,56878,51977],{"class":335},[68,56880,51812],{"class":51501},[68,56882,51508],{"class":335},[68,56884,56885,56887,56889],{"class":70,"line":17025},[68,56886,52618],{"class":335},[68,56888,51812],{"class":51501},[68,56890,51508],{"class":335},[68,56892,56893,56895,56897],{"class":70,"line":17031},[68,56894,52345],{"class":335},[68,56896,52014],{"class":51501},[68,56898,51508],{"class":335},[68,56900,56901,56903,56906,56908],{"class":70,"line":17036},[68,56902,11426],{"class":331},[68,56904,56905],{"class":82}," sliderData",[68,56907,13769],{"class":331},[68,56909,55648],{"class":335},[68,56911,56912,56914,56916,56918,56920,56922,56924],{"class":70,"line":17050},[68,56913,55653],{"class":335},[68,56915,55656],{"class":78},[68,56917,55659],{"class":335},[68,56919,55662],{"class":78},[68,56921,55665],{"class":335},[68,56923,55668],{"class":78},[68,56925,55671],{"class":335},[68,56927,56928,56930,56932,56934,56936,56938,56940],{"class":70,"line":17055},[68,56929,55653],{"class":335},[68,56931,55678],{"class":78},[68,56933,55659],{"class":335},[68,56935,55683],{"class":78},[68,56937,55665],{"class":335},[68,56939,55688],{"class":78},[68,56941,55671],{"class":335},[68,56943,56944,56946,56948,56950,56952,56954,56956],{"class":70,"line":17060},[68,56945,55653],{"class":335},[68,56947,55697],{"class":78},[68,56949,55659],{"class":335},[68,56951,55702],{"class":78},[68,56953,55665],{"class":335},[68,56955,55707],{"class":78},[68,56957,55671],{"class":335},[68,56959,56960,56962,56964,56966,56968,56970,56972],{"class":70,"line":17074},[68,56961,55653],{"class":335},[68,56963,55716],{"class":78},[68,56965,55659],{"class":335},[68,56967,55721],{"class":78},[68,56969,55665],{"class":335},[68,56971,55726],{"class":78},[68,56973,55671],{"class":335},[68,56975,56976,56978,56980,56982,56984,56986,56988],{"class":70,"line":17086},[68,56977,55653],{"class":335},[68,56979,55735],{"class":78},[68,56981,55659],{"class":335},[68,56983,55740],{"class":78},[68,56985,55665],{"class":335},[68,56987,55745],{"class":78},[68,56989,55671],{"class":335},[68,56991,56992,56994,56996,56998,57000,57002,57004],{"class":70,"line":17091},[68,56993,55653],{"class":335},[68,56995,55754],{"class":78},[68,56997,55659],{"class":335},[68,56999,55759],{"class":78},[68,57001,55665],{"class":335},[68,57003,55764],{"class":78},[68,57005,55671],{"class":335},[68,57007,57008,57010,57012,57014,57016,57018,57020],{"class":70,"line":17104},[68,57009,55653],{"class":335},[68,57011,55773],{"class":78},[68,57013,55659],{"class":335},[68,57015,55778],{"class":78},[68,57017,55665],{"class":335},[68,57019,55783],{"class":78},[68,57021,55671],{"class":335},[68,57023,57024,57026,57028,57030,57032,57034,57036],{"class":70,"line":17109},[68,57025,55653],{"class":335},[68,57027,55792],{"class":78},[68,57029,55659],{"class":335},[68,57031,55797],{"class":78},[68,57033,55665],{"class":335},[68,57035,55802],{"class":78},[68,57037,55805],{"class":335},[68,57039,57040],{"class":70,"line":17114},[68,57041,53310],{"class":335},[68,57043,57044],{"class":70,"line":17119},[68,57045,57046],{"class":393},"    \u002F\u002F 1.获取元素\n",[68,57048,57049,57051,57053,57055,57057,57059,57061,57063],{"class":70,"line":17132},[68,57050,11426],{"class":331},[68,57052,55816],{"class":82},[68,57054,13769],{"class":331},[68,57056,54597],{"class":335},[68,57058,54600],{"class":74},[68,57060,336],{"class":335},[68,57062,55827],{"class":78},[68,57064,342],{"class":335},[68,57066,57067,57069,57071,57073,57075,57077,57079,57081],{"class":70,"line":17137},[68,57068,11426],{"class":331},[68,57070,7030],{"class":82},[68,57072,13769],{"class":331},[68,57074,54597],{"class":335},[68,57076,54600],{"class":74},[68,57078,336],{"class":335},[68,57080,55846],{"class":78},[68,57082,342],{"class":335},[68,57084,57085,57087,57089,57091],{"class":70,"line":32834},[68,57086,52420],{"class":331},[68,57088,9643],{"class":335},[68,57090,381],{"class":331},[68,57092,47534],{"class":82},[68,57094,57095],{"class":70,"line":32840},[68,57096,57097],{"class":393},"    \u002F\u002F 2.开启定时器\n",[68,57099,57100],{"class":70,"line":32846},[68,57101,57102],{"class":393},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[68,57104,57105,57108,57110,57112],{"class":70,"line":32852},[68,57106,57107],{"class":74},"    setInterval",[68,57109,336],{"class":335},[68,57111,54650],{"class":331},[68,57113,54653],{"class":335},[68,57115,57116,57118],{"class":70,"line":32858},[68,57117,54658],{"class":335},[68,57119,2908],{"class":331},[68,57121,57122,57124,57126,57128,57131,57133],{"class":70,"line":32869},[68,57123,54681],{"class":331},[68,57125,54684],{"class":335},[68,57127,1917],{"class":331},[68,57129,57130],{"class":335}," sliderData.",[68,57132,52169],{"class":82},[68,57134,12647],{"class":335},[68,57136,57137,57140,57142],{"class":70,"line":32875},[68,57138,57139],{"class":335},"        i ",[68,57141,381],{"class":331},[68,57143,47534],{"class":82},[68,57145,57146],{"class":70,"line":32895},[68,57147,52599],{"class":335},[68,57149,57150],{"class":70,"line":32901},[68,57151,57152],{"class":393},"      \u002F\u002F 更换图片路径\n",[68,57154,57155,57157,57159],{"class":70,"line":32912},[68,57156,55922],{"class":335},[68,57158,381],{"class":331},[68,57160,57161],{"class":335}," sliderData[i].url\n",[68,57163,57164],{"class":70,"line":32918},[68,57165,57166],{"class":393},"      \u002F\u002F 把文字写到p里面\n",[68,57168,57169,57171,57173],{"class":70,"line":32924},[68,57170,55932],{"class":335},[68,57172,381],{"class":331},[68,57174,57175],{"class":335}," sliderData[i].title\n",[68,57177,57178],{"class":70,"line":32930},[68,57179,57180],{"class":393},"      \u002F\u002F 小圆点\n",[68,57182,57183],{"class":70,"line":32936},[68,57184,57185],{"class":393},"      \u002F\u002F 先删除以前的active\n",[68,57187,57188],{"class":70,"line":32942},[68,57189,57190],{"class":393},"      \u002F\u002F 只让当前li添加active\n",[68,57192,57193,57195,57197,57199,57202,57205,57208,57210,57212],{"class":70,"line":32948},[68,57194,55972],{"class":335},[68,57196,54600],{"class":74},[68,57198,336],{"class":335},[68,57200,57201],{"class":78},"'.slider-footer .activate'",[68,57203,57204],{"class":335},").classList.",[68,57206,57207],{"class":74},"remove",[68,57209,336],{"class":335},[68,57211,55990],{"class":78},[68,57213,342],{"class":335},[68,57215,57216,57218,57220,57222,57225,57227,57229,57231,57234,57236,57238,57240,57242],{"class":70,"line":32954},[68,57217,55972],{"class":335},[68,57219,54600],{"class":74},[68,57221,336],{"class":335},[68,57223,57224],{"class":78},"`.slider-footer ul li:nth-child(${",[68,57226,774],{"class":335},[68,57228,45767],{"class":331},[68,57230,25322],{"class":82},[68,57232,57233],{"class":78},"})`",[68,57235,57204],{"class":335},[68,57237,5539],{"class":74},[68,57239,336],{"class":335},[68,57241,55990],{"class":78},[68,57243,342],{"class":335},[68,57245,57246],{"class":70,"line":32974},[68,57247,2606],{"emptyLinePlaceholder":260},[68,57249,57250,57252,57254],{"class":70,"line":32980},[68,57251,54736],{"class":335},[68,57253,6615],{"class":82},[68,57255,342],{"class":335},[68,57257,57258],{"class":70,"line":32996},[68,57259,2606],{"emptyLinePlaceholder":260},[68,57261,57262,57264,57266],{"class":70,"line":33002},[68,57263,52618],{"class":335},[68,57265,52014],{"class":51501},[68,57267,51508],{"class":335},[68,57269,57270,57272,57274],{"class":70,"line":33016},[68,57271,51986],{"class":335},[68,57273,52001],{"class":51501},[68,57275,51508],{"class":335},[68,57277,57278],{"class":70,"line":33022},[68,57279,2606],{"emptyLinePlaceholder":260},[68,57281,57282,57284,57286],{"class":70,"line":33037},[68,57283,51986],{"class":335},[68,57285,50836],{"class":51501},[68,57287,51508],{"class":335},[301,57289,57291],{"id":57290},"_317-重要知识点","3.1.7 重要知识点",[19,57293,57294,57295],{},"浏览器在渲染文本时， ",[483,57296,57297],{},"没有空格或换行符就没有“断行点”",[19,57299,57300],{},[48,57301],{"alt":63,"src":57302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57304,57305],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57307,57308],{},[48,57309],{"alt":63,"src":57310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57312,57313],{},[48,57314],{"alt":63,"src":57315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57317,57319],{"id":57318},"_32-dom事件基础","3.2 DOM事件基础",[301,57321,57323],{"id":57322},"_321-事件监听","3.2.1 事件监听",[19,57325,57326],{},[48,57327],{"alt":63,"src":57328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57330,57331],{},"事件监听有响应的发生",[19,57333,57334],{},[48,57335],{"alt":63,"src":57336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57338,57339],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57341,57342],{},"对于有名函数,要执行的函数名后边不要加()",[301,57344,57346],{"id":57345},"_322-随机点名案例","3.2.2 随机点名案例",[58,57348,57350],{"className":50834,"code":57349,"language":50836,"meta":63,"style":63},"\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",[65,57351,57352,57362,57376,57380,57388,57402,57422,57434,57442,57448,57458,57468,57472,57476,57483,57494,57498,57502,57508,57520,57534,57544,57556,57569,57573,57577,57584,57588,57601,57613,57625,57629,57633,57637,57644,57654,57658,57662,57671,57683,57695,57710,57714,57722,57730,57734,57742,57755,57769,57782,57802,57810,57825,57845,57865,57873,57877,57885,57890,57926,57946,57951,57970,57975,57986,57991,58002,58007,58026,58041,58046,58072,58082,58091,58096,58112,58117,58122,58127,58142,58146,58150,58155,58174,58191,58199,58204,58219,58223,58227,58235,58243,58247],{"__ignoreMap":63},[68,57353,57354,57356,57358,57360],{"class":70,"line":71},[68,57355,51498],{"class":335},[68,57357,51502],{"class":51501},[68,57359,51505],{"class":74},[68,57361,51508],{"class":335},[68,57363,57364,57366,57368,57370,57372,57374],{"class":70,"line":92},[68,57365,1243],{"class":335},[68,57367,50836],{"class":51501},[68,57369,51517],{"class":74},[68,57371,381],{"class":335},[68,57373,51522],{"class":78},[68,57375,51508],{"class":335},[68,57377,57378],{"class":70,"line":1387},[68,57379,2606],{"emptyLinePlaceholder":260},[68,57381,57382,57384,57386],{"class":70,"line":1402},[68,57383,1243],{"class":335},[68,57385,51535],{"class":51501},[68,57387,51508],{"class":335},[68,57389,57390,57392,57394,57396,57398,57400],{"class":70,"line":1408},[68,57391,52345],{"class":335},[68,57393,51545],{"class":51501},[68,57395,51548],{"class":74},[68,57397,381],{"class":335},[68,57399,51553],{"class":78},[68,57401,51508],{"class":335},[68,57403,57404,57406,57408,57410,57412,57414,57416,57418,57420],{"class":70,"line":1422},[68,57405,52345],{"class":335},[68,57407,51545],{"class":51501},[68,57409,15125],{"class":74},[68,57411,381],{"class":335},[68,57413,51592],{"class":78},[68,57415,51572],{"class":74},[68,57417,381],{"class":335},[68,57419,51599],{"class":78},[68,57421,51508],{"class":335},[68,57423,57424,57426,57428,57430,57432],{"class":70,"line":1428},[68,57425,52345],{"class":335},[68,57427,51608],{"class":51501},[68,57429,51611],{"class":335},[68,57431,51608],{"class":51501},[68,57433,51508],{"class":335},[68,57435,57436,57438,57440],{"class":70,"line":1519},[68,57437,52345],{"class":335},[68,57439,250],{"class":51501},[68,57441,51508],{"class":335},[68,57443,57444,57446],{"class":70,"line":1525},[68,57445,6608],{"class":51501},[68,57447,15777],{"class":335},[68,57449,57450,57452,57454,57456],{"class":70,"line":1537},[68,57451,54907],{"class":82},[68,57453,51638],{"class":335},[68,57455,525],{"class":82},[68,57457,1498],{"class":335},[68,57459,57460,57462,57464,57466],{"class":70,"line":1819},[68,57461,54896],{"class":82},[68,57463,51638],{"class":335},[68,57465,525],{"class":82},[68,57467,1498],{"class":335},[68,57469,57470],{"class":70,"line":1824},[68,57471,2393],{"class":335},[68,57473,57474],{"class":70,"line":1830},[68,57475,2606],{"emptyLinePlaceholder":260},[68,57477,57478,57481],{"class":70,"line":1835},[68,57479,57480],{"class":51501},"    h2",[68,57482,15777],{"class":335},[68,57484,57485,57488,57490,57492],{"class":70,"line":1849},[68,57486,57487],{"class":82},"      text-align",[68,57489,51638],{"class":335},[68,57491,51793],{"class":82},[68,57493,1498],{"class":335},[68,57495,57496],{"class":70,"line":1854},[68,57497,2393],{"class":335},[68,57499,57500],{"class":70,"line":1860},[68,57501,2606],{"emptyLinePlaceholder":260},[68,57503,57504,57506],{"class":70,"line":1881},[68,57505,54953],{"class":74},[68,57507,15777],{"class":335},[68,57509,57510,57512,57514,57516,57518],{"class":70,"line":1886},[68,57511,54972],{"class":82},[68,57513,51638],{"class":335},[68,57515,1746],{"class":82},[68,57517,51693],{"class":331},[68,57519,1498],{"class":335},[68,57521,57522,57524,57526,57528,57530,57532],{"class":70,"line":1900},[68,57523,54907],{"class":82},[68,57525,51638],{"class":335},[68,57527,989],{"class":82},[68,57529,51693],{"class":331},[68,57531,51757],{"class":82},[68,57533,1498],{"class":335},[68,57535,57536,57538,57540,57542],{"class":70,"line":1905},[68,57537,55210],{"class":82},[68,57539,51638],{"class":335},[68,57541,51678],{"class":82},[68,57543,1498],{"class":335},[68,57545,57546,57548,57550,57552,57554],{"class":70,"line":1934},[68,57547,55123],{"class":82},[68,57549,51638],{"class":335},[68,57551,1158],{"class":82},[68,57553,51693],{"class":331},[68,57555,1498],{"class":335},[68,57557,57558,57561,57563,57565,57567],{"class":70,"line":1939},[68,57559,57560],{"class":82},"      line-height",[68,57562,51638],{"class":335},[68,57564,734],{"class":82},[68,57566,51693],{"class":331},[68,57568,1498],{"class":335},[68,57570,57571],{"class":70,"line":1956},[68,57572,2393],{"class":335},[68,57574,57575],{"class":70,"line":1961},[68,57576,2606],{"emptyLinePlaceholder":260},[68,57578,57579,57582],{"class":70,"line":1966},[68,57580,57581],{"class":74},"    .qs",[68,57583,15777],{"class":335},[68,57585,57586],{"class":70,"line":1971},[68,57587,2606],{"emptyLinePlaceholder":260},[68,57589,57590,57592,57594,57597,57599],{"class":70,"line":1985},[68,57591,54972],{"class":82},[68,57593,51638],{"class":335},[68,57595,57596],{"class":82},"450",[68,57598,51693],{"class":331},[68,57600,1498],{"class":335},[68,57602,57603,57605,57607,57609,57611],{"class":70,"line":1990},[68,57604,54986],{"class":82},[68,57606,51638],{"class":335},[68,57608,734],{"class":82},[68,57610,51693],{"class":331},[68,57612,1498],{"class":335},[68,57614,57615,57618,57620,57623],{"class":70,"line":2783},[68,57616,57617],{"class":82},"      color",[68,57619,51638],{"class":335},[68,57621,57622],{"class":82},"red",[68,57624,1498],{"class":335},[68,57626,57627],{"class":70,"line":2797},[68,57628,2606],{"emptyLinePlaceholder":260},[68,57630,57631],{"class":70,"line":2805},[68,57632,2393],{"class":335},[68,57634,57635],{"class":70,"line":2810},[68,57636,2606],{"emptyLinePlaceholder":260},[68,57638,57639,57642],{"class":70,"line":2816},[68,57640,57641],{"class":74},"    .btns",[68,57643,15777],{"class":335},[68,57645,57646,57648,57650,57652],{"class":70,"line":2822},[68,57647,57487],{"class":82},[68,57649,51638],{"class":335},[68,57651,51793],{"class":82},[68,57653,1498],{"class":335},[68,57655,57656],{"class":70,"line":2827},[68,57657,2393],{"class":335},[68,57659,57660],{"class":70,"line":8153},[68,57661,2606],{"emptyLinePlaceholder":260},[68,57663,57664,57666,57669],{"class":70,"line":8177},[68,57665,57641],{"class":74},[68,57667,57668],{"class":51501}," button",[68,57670,15777],{"class":335},[68,57672,57673,57675,57677,57679,57681],{"class":70,"line":8182},[68,57674,54972],{"class":82},[68,57676,51638],{"class":335},[68,57678,1150],{"class":82},[68,57680,51693],{"class":331},[68,57682,1498],{"class":335},[68,57684,57685,57687,57689,57691,57693],{"class":70,"line":8188},[68,57686,54986],{"class":82},[68,57688,51638],{"class":335},[68,57690,606],{"class":82},[68,57692,51693],{"class":331},[68,57694,1498],{"class":335},[68,57696,57697,57699,57701,57703,57706,57708],{"class":70,"line":8215},[68,57698,54907],{"class":82},[68,57700,51638],{"class":335},[68,57702,525],{"class":82},[68,57704,57705],{"class":82}," 50",[68,57707,51693],{"class":331},[68,57709,1498],{"class":335},[68,57711,57712],{"class":70,"line":8220},[68,57713,2393],{"class":335},[68,57715,57716,57718,57720],{"class":70,"line":8226},[68,57717,52618],{"class":335},[68,57719,250],{"class":51501},[68,57721,51508],{"class":335},[68,57723,57724,57726,57728],{"class":70,"line":8238},[68,57725,51986],{"class":335},[68,57727,51535],{"class":51501},[68,57729,51508],{"class":335},[68,57731,57732],{"class":70,"line":8250},[68,57733,2606],{"emptyLinePlaceholder":260},[68,57735,57736,57738,57740],{"class":70,"line":8262},[68,57737,1243],{"class":335},[68,57739,52001],{"class":51501},[68,57741,51508],{"class":335},[68,57743,57744,57746,57748,57751,57753],{"class":70,"line":9921},[68,57745,52345],{"class":335},[68,57747,14],{"class":51501},[68,57749,57750],{"class":335},">随机点名\u003C\u002F",[68,57752,14],{"class":51501},[68,57754,51508],{"class":335},[68,57756,57757,57759,57761,57763,57765,57767],{"class":70,"line":9946},[68,57758,52345],{"class":335},[68,57760,51812],{"class":51501},[68,57762,53687],{"class":74},[68,57764,381],{"class":335},[68,57766,53692],{"class":78},[68,57768,51508],{"class":335},[68,57770,57771,57773,57775,57778,57780],{"class":70,"line":9969},[68,57772,51542],{"class":335},[68,57774,68],{"class":51501},[68,57776,57777],{"class":335},">名字是：\u003C\u002F",[68,57779,68],{"class":51501},[68,57781,51508],{"class":335},[68,57783,57784,57786,57788,57790,57792,57795,57798,57800],{"class":70,"line":9993},[68,57785,51542],{"class":335},[68,57787,51812],{"class":51501},[68,57789,53687],{"class":74},[68,57791,381],{"class":335},[68,57793,57794],{"class":78},"\"qs\"",[68,57796,57797],{"class":335},">这里显示姓名\u003C\u002F",[68,57799,51812],{"class":51501},[68,57801,51508],{"class":335},[68,57803,57804,57806,57808],{"class":70,"line":9998},[68,57805,52618],{"class":335},[68,57807,51812],{"class":51501},[68,57809,51508],{"class":335},[68,57811,57812,57814,57816,57818,57820,57823],{"class":70,"line":10003},[68,57813,52345],{"class":335},[68,57815,51812],{"class":51501},[68,57817,53687],{"class":74},[68,57819,381],{"class":335},[68,57821,57822],{"class":78},"\"btns\"",[68,57824,51508],{"class":335},[68,57826,57827,57829,57831,57833,57835,57838,57841,57843],{"class":70,"line":10008},[68,57828,51542],{"class":335},[68,57830,54088],{"class":51501},[68,57832,53687],{"class":74},[68,57834,381],{"class":335},[68,57836,57837],{"class":78},"\"start\"",[68,57839,57840],{"class":335},">开始\u003C\u002F",[68,57842,54088],{"class":51501},[68,57844,51508],{"class":335},[68,57846,57847,57849,57851,57853,57855,57858,57861,57863],{"class":70,"line":10017},[68,57848,51542],{"class":335},[68,57850,54088],{"class":51501},[68,57852,53687],{"class":74},[68,57854,381],{"class":335},[68,57856,57857],{"class":78},"\"end\"",[68,57859,57860],{"class":335},">结束\u003C\u002F",[68,57862,54088],{"class":51501},[68,57864,51508],{"class":335},[68,57866,57867,57869,57871],{"class":70,"line":10022},[68,57868,52618],{"class":335},[68,57870,51812],{"class":51501},[68,57872,51508],{"class":335},[68,57874,57875],{"class":70,"line":10028},[68,57876,2606],{"emptyLinePlaceholder":260},[68,57878,57879,57881,57883],{"class":70,"line":10049},[68,57880,52345],{"class":335},[68,57882,52014],{"class":51501},[68,57884,51508],{"class":335},[68,57886,57887],{"class":70,"line":10055},[68,57888,57889],{"class":393},"    \u002F\u002F 数据数组\n",[68,57891,57892,57894,57897,57899,57901,57904,57906,57909,57911,57914,57916,57919,57921,57924],{"class":70,"line":10069},[68,57893,11426],{"class":331},[68,57895,57896],{"class":82}," arr",[68,57898,13769],{"class":331},[68,57900,52427],{"class":335},[68,57902,57903],{"class":78},"'马超'",[68,57905,12640],{"class":335},[68,57907,57908],{"class":78},"'黄忠'",[68,57910,12640],{"class":335},[68,57912,57913],{"class":78},"'赵云'",[68,57915,12640],{"class":335},[68,57917,57918],{"class":78},"'关羽'",[68,57920,12640],{"class":335},[68,57922,57923],{"class":78},"'张飞'",[68,57925,33447],{"class":335},[68,57927,57928,57930,57933,57935,57937,57939,57941,57944],{"class":70,"line":10075},[68,57929,11426],{"class":331},[68,57931,57932],{"class":82}," qs",[68,57934,13769],{"class":331},[68,57936,54597],{"class":335},[68,57938,54600],{"class":74},[68,57940,336],{"class":335},[68,57942,57943],{"class":78},"'.qs'",[68,57945,342],{"class":335},[68,57947,57948],{"class":70,"line":10102},[68,57949,57950],{"class":393},"    \u002F\u002F 1.业务1.开始按钮模块\n",[68,57952,57953,57955,57957,57959,57961,57963,57965,57968],{"class":70,"line":10111},[68,57954,11426],{"class":331},[68,57956,4390],{"class":82},[68,57958,13769],{"class":331},[68,57960,54597],{"class":335},[68,57962,54600],{"class":74},[68,57964,336],{"class":335},[68,57966,57967],{"class":78},"'.start'",[68,57969,342],{"class":335},[68,57971,57972],{"class":70,"line":10117},[68,57973,57974],{"class":393},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[68,57976,57977,57979,57982,57984],{"class":70,"line":10125},[68,57978,52420],{"class":331},[68,57980,57981],{"class":335}," timerId ",[68,57983,381],{"class":331},[68,57985,47534],{"class":82},[68,57987,57988],{"class":70,"line":10130},[68,57989,57990],{"class":393},"    \u002F\u002F 随机号要全局变量\n",[68,57992,57993,57995,57998,58000],{"class":70,"line":16809},[68,57994,52420],{"class":331},[68,57996,57997],{"class":335}," random ",[68,57999,381],{"class":331},[68,58001,47534],{"class":82},[68,58003,58004],{"class":70,"line":16815},[68,58005,58006],{"class":393},"    \u002F\u002F 1.1 添加点击事件\n",[68,58008,58009,58012,58015,58017,58020,58022,58024],{"class":70,"line":16838},[68,58010,58011],{"class":335},"    start.",[68,58013,58014],{"class":74},"addEventListener",[68,58016,336],{"class":335},[68,58018,58019],{"class":78},"'click'",[68,58021,12640],{"class":335},[68,58023,54650],{"class":331},[68,58025,54653],{"class":335},[68,58027,58028,58031,58033,58035,58037,58039],{"class":70,"line":16844},[68,58029,58030],{"class":335},"      timerId ",[68,58032,381],{"class":331},[68,58034,54645],{"class":74},[68,58036,336],{"class":335},[68,58038,54650],{"class":331},[68,58040,54653],{"class":335},[68,58042,58043],{"class":70,"line":16867},[68,58044,58045],{"class":393},"        \u002F\u002F 随机数\n",[68,58047,58048,58051,58053,58056,58059,58062,58064,58066,58068,58070],{"class":70,"line":16881},[68,58049,58050],{"class":335},"        random ",[68,58052,381],{"class":331},[68,58054,58055],{"class":74}," parseInt",[68,58057,58058],{"class":335},"(Math.",[68,58060,58061],{"class":74},"random",[68,58063,13255],{"class":335},[68,58065,788],{"class":331},[68,58067,52166],{"class":335},[68,58069,52169],{"class":82},[68,58071,342],{"class":335},[68,58073,58074,58077,58079],{"class":70,"line":16901},[68,58075,58076],{"class":335},"        qs.innerHTML ",[68,58078,381],{"class":331},[68,58080,58081],{"class":335}," arr[random]\n",[68,58083,58084,58087,58089],{"class":70,"line":16907},[68,58085,58086],{"class":335},"      }, ",[68,58088,606],{"class":82},[68,58090,342],{"class":335},[68,58092,58093],{"class":70,"line":16918},[68,58094,58095],{"class":393},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[68,58097,58098,58100,58103,58105,58108,58110],{"class":70,"line":16941},[68,58099,54681],{"class":331},[68,58101,58102],{"class":335}," (arr.",[68,58104,52169],{"class":82},[68,58106,58107],{"class":331}," ===",[68,58109,25322],{"class":82},[68,58111,12647],{"class":335},[68,58113,58114],{"class":70,"line":16963},[68,58115,58116],{"class":393},"        \u002F\u002F start.disabled = true\n",[68,58118,58119],{"class":70,"line":16968},[68,58120,58121],{"class":393},"        \u002F\u002F end.disabled = true\n",[68,58123,58124],{"class":70,"line":16974},[68,58125,58126],{"class":393},"        \u002F\u002F 可以合起来写\n",[68,58128,58129,58132,58134,58137,58139],{"class":70,"line":16988},[68,58130,58131],{"class":335},"        start.disabled ",[68,58133,381],{"class":331},[68,58135,58136],{"class":335}," end.disabled ",[68,58138,381],{"class":331},[68,58140,58141],{"class":82}," true\n",[68,58143,58144],{"class":70,"line":17001},[68,58145,52599],{"class":335},[68,58147,58148],{"class":70,"line":17006},[68,58149,33662],{"class":335},[68,58151,58152],{"class":70,"line":17020},[68,58153,58154],{"class":393},"    \u002F\u002F 1.2 关闭按钮模块\n",[68,58156,58157,58159,58161,58163,58165,58167,58169,58172],{"class":70,"line":17025},[68,58158,11426],{"class":331},[68,58160,4406],{"class":82},[68,58162,13769],{"class":331},[68,58164,54597],{"class":335},[68,58166,54600],{"class":74},[68,58168,336],{"class":335},[68,58170,58171],{"class":78},"'.end'",[68,58173,342],{"class":335},[68,58175,58176,58179,58181,58183,58185,58187,58189],{"class":70,"line":17031},[68,58177,58178],{"class":335},"    end.",[68,58180,58014],{"class":74},[68,58182,336],{"class":335},[68,58184,58019],{"class":78},[68,58186,12640],{"class":335},[68,58188,54650],{"class":331},[68,58190,54653],{"class":335},[68,58192,58193,58196],{"class":70,"line":17036},[68,58194,58195],{"class":74},"      clearInterval",[68,58197,58198],{"class":335},"(timerId)\n",[68,58200,58201],{"class":70,"line":17050},[68,58202,58203],{"class":393},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[68,58205,58206,58209,58212,58215,58217],{"class":70,"line":17055},[68,58207,58208],{"class":335},"      arr.",[68,58210,58211],{"class":74},"splice",[68,58213,58214],{"class":335},"(random, ",[68,58216,551],{"class":82},[68,58218,342],{"class":335},[68,58220,58221],{"class":70,"line":17060},[68,58222,33662],{"class":335},[68,58224,58225],{"class":70,"line":17074},[68,58226,2606],{"emptyLinePlaceholder":260},[68,58228,58229,58231,58233],{"class":70,"line":17086},[68,58230,52618],{"class":335},[68,58232,52014],{"class":51501},[68,58234,51508],{"class":335},[68,58236,58237,58239,58241],{"class":70,"line":17091},[68,58238,51986],{"class":335},[68,58240,52001],{"class":51501},[68,58242,51508],{"class":335},[68,58244,58245],{"class":70,"line":17104},[68,58246,2606],{"emptyLinePlaceholder":260},[68,58248,58249,58251,58253],{"class":70,"line":17109},[68,58250,51986],{"class":335},[68,58252,50836],{"class":51501},[68,58254,51508],{"class":335},[19,58256,58257],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[301,58259,58261],{"id":58260},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[58,58263,58265],{"className":50834,"code":58264,"language":50836,"meta":63,"style":63},"\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",[65,58266,58267,58277,58291,58295,58303,58317,58337,58349,58357,58361,58369,58381,58389,58408,58425,58441,58451,58455,58463,58471,58475],{"__ignoreMap":63},[68,58268,58269,58271,58273,58275],{"class":70,"line":71},[68,58270,51498],{"class":335},[68,58272,51502],{"class":51501},[68,58274,51505],{"class":74},[68,58276,51508],{"class":335},[68,58278,58279,58281,58283,58285,58287,58289],{"class":70,"line":92},[68,58280,1243],{"class":335},[68,58282,50836],{"class":51501},[68,58284,51517],{"class":74},[68,58286,381],{"class":335},[68,58288,51522],{"class":78},[68,58290,51508],{"class":335},[68,58292,58293],{"class":70,"line":1387},[68,58294,2606],{"emptyLinePlaceholder":260},[68,58296,58297,58299,58301],{"class":70,"line":1402},[68,58298,1243],{"class":335},[68,58300,51535],{"class":51501},[68,58302,51508],{"class":335},[68,58304,58305,58307,58309,58311,58313,58315],{"class":70,"line":1408},[68,58306,52345],{"class":335},[68,58308,51545],{"class":51501},[68,58310,51548],{"class":74},[68,58312,381],{"class":335},[68,58314,51553],{"class":78},[68,58316,51508],{"class":335},[68,58318,58319,58321,58323,58325,58327,58329,58331,58333,58335],{"class":70,"line":1422},[68,58320,52345],{"class":335},[68,58322,51545],{"class":51501},[68,58324,15125],{"class":74},[68,58326,381],{"class":335},[68,58328,51592],{"class":78},[68,58330,51572],{"class":74},[68,58332,381],{"class":335},[68,58334,51599],{"class":78},[68,58336,51508],{"class":335},[68,58338,58339,58341,58343,58345,58347],{"class":70,"line":1428},[68,58340,52345],{"class":335},[68,58342,51608],{"class":51501},[68,58344,51611],{"class":335},[68,58346,51608],{"class":51501},[68,58348,51508],{"class":335},[68,58350,58351,58353,58355],{"class":70,"line":1519},[68,58352,51986],{"class":335},[68,58354,51535],{"class":51501},[68,58356,51508],{"class":335},[68,58358,58359],{"class":70,"line":1525},[68,58360,2606],{"emptyLinePlaceholder":260},[68,58362,58363,58365,58367],{"class":70,"line":1537},[68,58364,1243],{"class":335},[68,58366,52001],{"class":51501},[68,58368,51508],{"class":335},[68,58370,58371,58373,58375,58377,58379],{"class":70,"line":1819},[68,58372,52345],{"class":335},[68,58374,54088],{"class":51501},[68,58376,54094],{"class":335},[68,58378,54088],{"class":51501},[68,58380,51508],{"class":335},[68,58382,58383,58385,58387],{"class":70,"line":1824},[68,58384,52345],{"class":335},[68,58386,52014],{"class":51501},[68,58388,51508],{"class":335},[68,58390,58391,58393,58395,58397,58399,58401,58403,58406],{"class":70,"line":1830},[68,58392,11426],{"class":331},[68,58394,54592],{"class":82},[68,58396,13769],{"class":331},[68,58398,54597],{"class":335},[68,58400,54600],{"class":74},[68,58402,336],{"class":335},[68,58404,58405],{"class":78},"'button'",[68,58407,342],{"class":335},[68,58409,58410,58413,58415,58417,58419,58421,58423],{"class":70,"line":1835},[68,58411,58412],{"class":335},"    btn.",[68,58414,58014],{"class":74},[68,58416,336],{"class":335},[68,58418,58019],{"class":78},[68,58420,12640],{"class":335},[68,58422,54650],{"class":331},[68,58424,54653],{"class":335},[68,58426,58427,58430,58432,58434,58437,58439],{"class":70,"line":1849},[68,58428,58429],{"class":331},"      const",[68,58431,2446],{"class":82},[68,58433,13769],{"class":331},[68,58435,58436],{"class":335}," Math.",[68,58438,58061],{"class":74},[68,58440,2182],{"class":335},[68,58442,58443,58446,58449],{"class":70,"line":1854},[68,58444,58445],{"class":335},"      console.",[68,58447,58448],{"class":74},"log",[68,58450,349],{"class":335},[68,58452,58453],{"class":70,"line":1860},[68,58454,33662],{"class":335},[68,58456,58457,58459,58461],{"class":70,"line":1881},[68,58458,52618],{"class":335},[68,58460,52014],{"class":51501},[68,58462,51508],{"class":335},[68,58464,58465,58467,58469],{"class":70,"line":1886},[68,58466,51986],{"class":335},[68,58468,52001],{"class":51501},[68,58470,51508],{"class":335},[68,58472,58473],{"class":70,"line":1900},[68,58474,2606],{"emptyLinePlaceholder":260},[68,58476,58477,58479,58481],{"class":70,"line":1905},[68,58478,51986],{"class":335},[68,58480,50836],{"class":51501},[68,58482,51508],{"class":335},[19,58484,58485],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58487,58488],{},"常量不可以重新赋值",[19,58490,58491],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[58,58493,58495],{"className":50834,"code":58494,"language":50836,"meta":63,"style":63},"\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",[65,58496,58497,58507,58521,58525,58533,58547,58567,58579,58587,58591,58599,58611,58619,58630,58648,58664,58678,58686,58690,58698,58706,58710],{"__ignoreMap":63},[68,58498,58499,58501,58503,58505],{"class":70,"line":71},[68,58500,51498],{"class":335},[68,58502,51502],{"class":51501},[68,58504,51505],{"class":74},[68,58506,51508],{"class":335},[68,58508,58509,58511,58513,58515,58517,58519],{"class":70,"line":92},[68,58510,1243],{"class":335},[68,58512,50836],{"class":51501},[68,58514,51517],{"class":74},[68,58516,381],{"class":335},[68,58518,51522],{"class":78},[68,58520,51508],{"class":335},[68,58522,58523],{"class":70,"line":1387},[68,58524,2606],{"emptyLinePlaceholder":260},[68,58526,58527,58529,58531],{"class":70,"line":1402},[68,58528,1243],{"class":335},[68,58530,51535],{"class":51501},[68,58532,51508],{"class":335},[68,58534,58535,58537,58539,58541,58543,58545],{"class":70,"line":1408},[68,58536,52345],{"class":335},[68,58538,51545],{"class":51501},[68,58540,51548],{"class":74},[68,58542,381],{"class":335},[68,58544,51553],{"class":78},[68,58546,51508],{"class":335},[68,58548,58549,58551,58553,58555,58557,58559,58561,58563,58565],{"class":70,"line":1422},[68,58550,52345],{"class":335},[68,58552,51545],{"class":51501},[68,58554,15125],{"class":74},[68,58556,381],{"class":335},[68,58558,51592],{"class":78},[68,58560,51572],{"class":74},[68,58562,381],{"class":335},[68,58564,51599],{"class":78},[68,58566,51508],{"class":335},[68,58568,58569,58571,58573,58575,58577],{"class":70,"line":1428},[68,58570,52345],{"class":335},[68,58572,51608],{"class":51501},[68,58574,51611],{"class":335},[68,58576,51608],{"class":51501},[68,58578,51508],{"class":335},[68,58580,58581,58583,58585],{"class":70,"line":1519},[68,58582,51986],{"class":335},[68,58584,51535],{"class":51501},[68,58586,51508],{"class":335},[68,58588,58589],{"class":70,"line":1525},[68,58590,2606],{"emptyLinePlaceholder":260},[68,58592,58593,58595,58597],{"class":70,"line":1537},[68,58594,1243],{"class":335},[68,58596,52001],{"class":51501},[68,58598,51508],{"class":335},[68,58600,58601,58603,58605,58607,58609],{"class":70,"line":1819},[68,58602,52345],{"class":335},[68,58604,54088],{"class":51501},[68,58606,54094],{"class":335},[68,58608,54088],{"class":51501},[68,58610,51508],{"class":335},[68,58612,58613,58615,58617],{"class":70,"line":1824},[68,58614,52345],{"class":335},[68,58616,52014],{"class":51501},[68,58618,51508],{"class":335},[68,58620,58621,58623,58625,58627],{"class":70,"line":1830},[68,58622,11426],{"class":331},[68,58624,2446],{"class":82},[68,58626,13769],{"class":331},[68,58628,58629],{"class":82}," 10\n",[68,58631,58632,58634,58636,58638,58640,58642,58644,58646],{"class":70,"line":1835},[68,58633,11426],{"class":331},[68,58635,54592],{"class":82},[68,58637,13769],{"class":331},[68,58639,54597],{"class":335},[68,58641,54600],{"class":74},[68,58643,336],{"class":335},[68,58645,58405],{"class":78},[68,58647,342],{"class":335},[68,58649,58650,58652,58654,58656,58658,58660,58662],{"class":70,"line":1849},[68,58651,58412],{"class":335},[68,58653,58014],{"class":74},[68,58655,336],{"class":335},[68,58657,58019],{"class":78},[68,58659,12640],{"class":335},[68,58661,54650],{"class":331},[68,58663,54653],{"class":335},[68,58665,58666,58668,58670,58672,58674,58676],{"class":70,"line":1854},[68,58667,58429],{"class":331},[68,58669,2446],{"class":82},[68,58671,13769],{"class":331},[68,58673,58436],{"class":335},[68,58675,58061],{"class":74},[68,58677,2182],{"class":335},[68,58679,58680,58682,58684],{"class":70,"line":1860},[68,58681,58445],{"class":335},[68,58683,58448],{"class":74},[68,58685,349],{"class":335},[68,58687,58688],{"class":70,"line":1881},[68,58689,33662],{"class":335},[68,58691,58692,58694,58696],{"class":70,"line":1886},[68,58693,52618],{"class":335},[68,58695,52014],{"class":51501},[68,58697,51508],{"class":335},[68,58699,58700,58702,58704],{"class":70,"line":1900},[68,58701,51986],{"class":335},[68,58703,52001],{"class":51501},[68,58705,51508],{"class":335},[68,58707,58708],{"class":70,"line":1905},[68,58709,2606],{"emptyLinePlaceholder":260},[68,58711,58712,58714,58716],{"class":70,"line":1934},[68,58713,51986],{"class":335},[68,58715,50836],{"class":51501},[68,58717,51508],{"class":335},[19,58719,58720],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[58,58722,58724],{"className":50834,"code":58723,"language":50836,"meta":63,"style":63},"\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",[65,58725,58726,58736,58750,58754,58762,58776,58796,58808,58816,58820,58828,58840,58848,58858,58876,58892,58905,58913,58917,58925,58933,58937],{"__ignoreMap":63},[68,58727,58728,58730,58732,58734],{"class":70,"line":71},[68,58729,51498],{"class":335},[68,58731,51502],{"class":51501},[68,58733,51505],{"class":74},[68,58735,51508],{"class":335},[68,58737,58738,58740,58742,58744,58746,58748],{"class":70,"line":92},[68,58739,1243],{"class":335},[68,58741,50836],{"class":51501},[68,58743,51517],{"class":74},[68,58745,381],{"class":335},[68,58747,51522],{"class":78},[68,58749,51508],{"class":335},[68,58751,58752],{"class":70,"line":1387},[68,58753,2606],{"emptyLinePlaceholder":260},[68,58755,58756,58758,58760],{"class":70,"line":1402},[68,58757,1243],{"class":335},[68,58759,51535],{"class":51501},[68,58761,51508],{"class":335},[68,58763,58764,58766,58768,58770,58772,58774],{"class":70,"line":1408},[68,58765,52345],{"class":335},[68,58767,51545],{"class":51501},[68,58769,51548],{"class":74},[68,58771,381],{"class":335},[68,58773,51553],{"class":78},[68,58775,51508],{"class":335},[68,58777,58778,58780,58782,58784,58786,58788,58790,58792,58794],{"class":70,"line":1422},[68,58779,52345],{"class":335},[68,58781,51545],{"class":51501},[68,58783,15125],{"class":74},[68,58785,381],{"class":335},[68,58787,51592],{"class":78},[68,58789,51572],{"class":74},[68,58791,381],{"class":335},[68,58793,51599],{"class":78},[68,58795,51508],{"class":335},[68,58797,58798,58800,58802,58804,58806],{"class":70,"line":1428},[68,58799,52345],{"class":335},[68,58801,51608],{"class":51501},[68,58803,51611],{"class":335},[68,58805,51608],{"class":51501},[68,58807,51508],{"class":335},[68,58809,58810,58812,58814],{"class":70,"line":1519},[68,58811,51986],{"class":335},[68,58813,51535],{"class":51501},[68,58815,51508],{"class":335},[68,58817,58818],{"class":70,"line":1525},[68,58819,2606],{"emptyLinePlaceholder":260},[68,58821,58822,58824,58826],{"class":70,"line":1537},[68,58823,1243],{"class":335},[68,58825,52001],{"class":51501},[68,58827,51508],{"class":335},[68,58829,58830,58832,58834,58836,58838],{"class":70,"line":1819},[68,58831,52345],{"class":335},[68,58833,54088],{"class":51501},[68,58835,54094],{"class":335},[68,58837,54088],{"class":51501},[68,58839,51508],{"class":335},[68,58841,58842,58844,58846],{"class":70,"line":1824},[68,58843,52345],{"class":335},[68,58845,52014],{"class":51501},[68,58847,51508],{"class":335},[68,58849,58850,58852,58854,58856],{"class":70,"line":1830},[68,58851,11426],{"class":331},[68,58853,2446],{"class":82},[68,58855,13769],{"class":331},[68,58857,58629],{"class":82},[68,58859,58860,58862,58864,58866,58868,58870,58872,58874],{"class":70,"line":1835},[68,58861,11426],{"class":331},[68,58863,54592],{"class":82},[68,58865,13769],{"class":331},[68,58867,54597],{"class":335},[68,58869,54600],{"class":74},[68,58871,336],{"class":335},[68,58873,58405],{"class":78},[68,58875,342],{"class":335},[68,58877,58878,58880,58882,58884,58886,58888,58890],{"class":70,"line":1849},[68,58879,58412],{"class":335},[68,58881,58014],{"class":74},[68,58883,336],{"class":335},[68,58885,58019],{"class":78},[68,58887,12640],{"class":335},[68,58889,54650],{"class":331},[68,58891,54653],{"class":335},[68,58893,58894,58897,58899,58901,58903],{"class":70,"line":1854},[68,58895,58896],{"class":335},"      num ",[68,58898,381],{"class":331},[68,58900,58436],{"class":335},[68,58902,58061],{"class":74},[68,58904,2182],{"class":335},[68,58906,58907,58909,58911],{"class":70,"line":1860},[68,58908,58445],{"class":335},[68,58910,58448],{"class":74},[68,58912,349],{"class":335},[68,58914,58915],{"class":70,"line":1881},[68,58916,33662],{"class":335},[68,58918,58919,58921,58923],{"class":70,"line":1886},[68,58920,52618],{"class":335},[68,58922,52014],{"class":51501},[68,58924,51508],{"class":335},[68,58926,58927,58929,58931],{"class":70,"line":1900},[68,58928,51986],{"class":335},[68,58930,52001],{"class":51501},[68,58932,51508],{"class":335},[68,58934,58935],{"class":70,"line":1905},[68,58936,2606],{"emptyLinePlaceholder":260},[68,58938,58939,58941,58943],{"class":70,"line":1934},[68,58940,51986],{"class":335},[68,58942,50836],{"class":51501},[68,58944,51508],{"class":335},[19,58946,58947],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[301,58949,58951],{"id":58950},"_324-事件监听版本","3.2.4 事件监听版本",[19,58953,58954],{},[48,58955],{"alt":63,"src":58956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58958,58959],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58961,58962],{},"这种方式会覆盖前边的事件监听:",[58,58964,58966],{"className":50834,"code":58965,"language":50836,"meta":63,"style":63},"\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",[65,58967,58968,58978,58992,58996,59004,59018,59038,59050,59058,59062,59070,59082,59090,59108,59122,59133,59137,59149,59159,59163,59171,59179,59183],{"__ignoreMap":63},[68,58969,58970,58972,58974,58976],{"class":70,"line":71},[68,58971,51498],{"class":335},[68,58973,51502],{"class":51501},[68,58975,51505],{"class":74},[68,58977,51508],{"class":335},[68,58979,58980,58982,58984,58986,58988,58990],{"class":70,"line":92},[68,58981,1243],{"class":335},[68,58983,50836],{"class":51501},[68,58985,51517],{"class":74},[68,58987,381],{"class":335},[68,58989,51522],{"class":78},[68,58991,51508],{"class":335},[68,58993,58994],{"class":70,"line":1387},[68,58995,2606],{"emptyLinePlaceholder":260},[68,58997,58998,59000,59002],{"class":70,"line":1402},[68,58999,1243],{"class":335},[68,59001,51535],{"class":51501},[68,59003,51508],{"class":335},[68,59005,59006,59008,59010,59012,59014,59016],{"class":70,"line":1408},[68,59007,52345],{"class":335},[68,59009,51545],{"class":51501},[68,59011,51548],{"class":74},[68,59013,381],{"class":335},[68,59015,51553],{"class":78},[68,59017,51508],{"class":335},[68,59019,59020,59022,59024,59026,59028,59030,59032,59034,59036],{"class":70,"line":1422},[68,59021,52345],{"class":335},[68,59023,51545],{"class":51501},[68,59025,15125],{"class":74},[68,59027,381],{"class":335},[68,59029,51592],{"class":78},[68,59031,51572],{"class":74},[68,59033,381],{"class":335},[68,59035,51599],{"class":78},[68,59037,51508],{"class":335},[68,59039,59040,59042,59044,59046,59048],{"class":70,"line":1428},[68,59041,52345],{"class":335},[68,59043,51608],{"class":51501},[68,59045,51611],{"class":335},[68,59047,51608],{"class":51501},[68,59049,51508],{"class":335},[68,59051,59052,59054,59056],{"class":70,"line":1519},[68,59053,51986],{"class":335},[68,59055,51535],{"class":51501},[68,59057,51508],{"class":335},[68,59059,59060],{"class":70,"line":1525},[68,59061,2606],{"emptyLinePlaceholder":260},[68,59063,59064,59066,59068],{"class":70,"line":1537},[68,59065,1243],{"class":335},[68,59067,52001],{"class":51501},[68,59069,51508],{"class":335},[68,59071,59072,59074,59076,59078,59080],{"class":70,"line":1819},[68,59073,52345],{"class":335},[68,59075,54088],{"class":51501},[68,59077,54094],{"class":335},[68,59079,54088],{"class":51501},[68,59081,51508],{"class":335},[68,59083,59084,59086,59088],{"class":70,"line":1824},[68,59085,52345],{"class":335},[68,59087,52014],{"class":51501},[68,59089,51508],{"class":335},[68,59091,59092,59094,59096,59098,59100,59102,59104,59106],{"class":70,"line":1830},[68,59093,11426],{"class":331},[68,59095,54592],{"class":82},[68,59097,13769],{"class":331},[68,59099,54597],{"class":335},[68,59101,54600],{"class":74},[68,59103,336],{"class":335},[68,59105,58405],{"class":78},[68,59107,342],{"class":335},[68,59109,59110,59112,59115,59117,59120],{"class":70,"line":1835},[68,59111,58412],{"class":335},[68,59113,59114],{"class":74},"onclick",[68,59116,13769],{"class":331},[68,59118,59119],{"class":331}," function",[68,59121,54653],{"class":335},[68,59123,59124,59127,59129,59131],{"class":70,"line":1849},[68,59125,59126],{"class":74},"      alert",[68,59128,336],{"class":335},[68,59130,805],{"class":82},[68,59132,342],{"class":335},[68,59134,59135],{"class":70,"line":1854},[68,59136,2393],{"class":335},[68,59138,59139,59141,59143,59145,59147],{"class":70,"line":1860},[68,59140,58412],{"class":335},[68,59142,59114],{"class":74},[68,59144,13769],{"class":331},[68,59146,59119],{"class":331},[68,59148,54653],{"class":335},[68,59150,59151,59153,59155,59157],{"class":70,"line":1881},[68,59152,59126],{"class":74},[68,59154,336],{"class":335},[68,59156,1083],{"class":82},[68,59158,342],{"class":335},[68,59160,59161],{"class":70,"line":1886},[68,59162,2393],{"class":335},[68,59164,59165,59167,59169],{"class":70,"line":1900},[68,59166,52618],{"class":335},[68,59168,52014],{"class":51501},[68,59170,51508],{"class":335},[68,59172,59173,59175,59177],{"class":70,"line":1905},[68,59174,51986],{"class":335},[68,59176,52001],{"class":51501},[68,59178,51508],{"class":335},[68,59180,59181],{"class":70,"line":1934},[68,59182,2606],{"emptyLinePlaceholder":260},[68,59184,59185,59187,59189],{"class":70,"line":1939},[68,59186,51986],{"class":335},[68,59188,50836],{"class":51501},[68,59190,51508],{"class":335},[19,59192,59193],{},"只要点击就输出结果为22,前边11被覆盖了",[58,59195,59197],{"className":50834,"code":59196,"language":50836,"meta":63,"style":63},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[65,59198,59199,59204,59209,59213,59218,59223],{"__ignoreMap":63},[68,59200,59201],{"class":70,"line":71},[68,59202,59203],{"class":335},"  btn.addEventListener('click', function () {\n",[68,59205,59206],{"class":70,"line":92},[68,59207,59208],{"class":335},"      alert(11)\n",[68,59210,59211],{"class":70,"line":1387},[68,59212,33662],{"class":335},[68,59214,59215],{"class":70,"line":1402},[68,59216,59217],{"class":335},"    btn.addEventListener('click', function () {\n",[68,59219,59220],{"class":70,"line":1408},[68,59221,59222],{"class":335},"      alert(22)\n",[68,59224,59225],{"class":70,"line":1422},[68,59226,33662],{"class":335},[19,59228,59229],{},"点击第一次输出11,第二次点击为22",[301,59231,59233],{"id":59232},"_325-事件类型","3.2.5 事件类型",[19,59235,59236],{},[48,59237],{"alt":63,"src":59238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22203,59240,59242],{"id":59241},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59244,59245],{},"补充知识:",[19,59247,59248],{},"轮播图自动播放模块,可以使用",[19,59250,59251],{},"let timerId = setInterval(function () {",[19,59253,59254],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59256,59257],{},"用js方法模拟进行点击事件,click必须加()",[19,59259,59260],{},"next.click()",[19,59262,59263],{},"}, 1000)",[19,59265,59266],{},[48,59267],{"alt":63,"src":59268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[58,59270,59272],{"className":53268,"code":59271,"language":53270,"meta":63,"style":63},"\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",[65,59273,59274,59278,59288,59302,59306,59314,59329,59349,59369,59382,59390,59395,59400,59404,59408,59413,59418,59423,59428,59432,59436,59441,59446,59451,59455,59459,59464,59468,59473,59478,59482,59486,59491,59496,59501,59506,59511,59515,59519,59524,59529,59534,59539,59544,59548,59552,59557,59562,59567,59572,59577,59582,59587,59592,59597,59602,59606,59610,59615,59620,59624,59628,59633,59638,59642,59647,59652,59656,59660,59665,59669,59674,59679,59683,59688,59692,59696,59701,59706,59711,59716,59721,59726,59731,59735,59739,59743,59748,59753,59758,59763,59767,59775,59783,59787,59795,59810,59824,59845,59853,59867,59880,59895,59914,59926,59938,59950,59962,59974,59986,59998,60006,60021,60045,60069,60077,60085,60093,60101,60106,60111,60116,60121,60126,60131,60136,60141,60146,60151,60155,60160,60165,60170,60175,60180,60185,60190,60195,60200,60204,60209,60214,60219,60224,60229,60234,60239,60244,60249,60254,60259,60264,60268,60272,60277,60282,60287,60291,60296,60301,60306,60311,60316,60320,60325,60329,60333,60337,60341,60345,60349,60354,60359,60364,60369,60374,60379,60384,60389,60394,60398,60402,60407,60412,60417,60422,60427,60431,60436,60441,60446,60451,60456,60461,60465,60469,60474,60478,60483,60487,60492,60497,60502,60507,60512,60517,60521,60529,60537,60541],{"__ignoreMap":63},[68,59275,59276],{"class":70,"line":71},[68,59277,2606],{"emptyLinePlaceholder":260},[68,59279,59280,59282,59284,59286],{"class":70,"line":92},[68,59281,51498],{"class":335},[68,59283,51502],{"class":331},[68,59285,51505],{"class":82},[68,59287,51508],{"class":335},[68,59289,59290,59292,59294,59296,59298,59300],{"class":70,"line":1387},[68,59291,1243],{"class":335},[68,59293,50836],{"class":51501},[68,59295,51517],{"class":74},[68,59297,381],{"class":335},[68,59299,51522],{"class":78},[68,59301,51508],{"class":335},[68,59303,59304],{"class":70,"line":1402},[68,59305,2606],{"emptyLinePlaceholder":260},[68,59307,59308,59310,59312],{"class":70,"line":1408},[68,59309,1243],{"class":335},[68,59311,51535],{"class":51501},[68,59313,51508],{"class":335},[68,59315,59316,59318,59320,59322,59324,59326],{"class":70,"line":1422},[68,59317,52345],{"class":335},[68,59319,51545],{"class":51501},[68,59321,51548],{"class":74},[68,59323,381],{"class":335},[68,59325,51553],{"class":78},[68,59327,59328],{"class":335}," \u002F>\n",[68,59330,59331,59333,59335,59337,59339,59341,59343,59345,59347],{"class":70,"line":1428},[68,59332,52345],{"class":335},[68,59334,51545],{"class":51501},[68,59336,51564],{"class":74},[68,59338,381],{"class":335},[68,59340,51569],{"class":78},[68,59342,51572],{"class":74},[68,59344,381],{"class":335},[68,59346,51577],{"class":78},[68,59348,59328],{"class":335},[68,59350,59351,59353,59355,59357,59359,59361,59363,59365,59367],{"class":70,"line":1519},[68,59352,52345],{"class":335},[68,59354,51545],{"class":51501},[68,59356,15125],{"class":74},[68,59358,381],{"class":335},[68,59360,51592],{"class":78},[68,59362,51572],{"class":74},[68,59364,381],{"class":335},[68,59366,51599],{"class":78},[68,59368,59328],{"class":335},[68,59370,59371,59373,59375,59378,59380],{"class":70,"line":1525},[68,59372,52345],{"class":335},[68,59374,51608],{"class":51501},[68,59376,59377],{"class":335},">轮播图点击切换\u003C\u002F",[68,59379,51608],{"class":51501},[68,59381,51508],{"class":335},[68,59383,59384,59386,59388],{"class":70,"line":1537},[68,59385,52345],{"class":335},[68,59387,250],{"class":51501},[68,59389,51508],{"class":335},[68,59391,59392],{"class":70,"line":1819},[68,59393,59394],{"class":335},"    * {\n",[68,59396,59397],{"class":70,"line":1824},[68,59398,59399],{"class":335},"      box-sizing: border-box;\n",[68,59401,59402],{"class":70,"line":1830},[68,59403,2393],{"class":335},[68,59405,59406],{"class":70,"line":1835},[68,59407,2606],{"emptyLinePlaceholder":260},[68,59409,59410],{"class":70,"line":1849},[68,59411,59412],{"class":335},"    .slider {\n",[68,59414,59415],{"class":70,"line":1854},[68,59416,59417],{"class":335},"      width: 560px;\n",[68,59419,59420],{"class":70,"line":1860},[68,59421,59422],{"class":335},"      height: 400px;\n",[68,59424,59425],{"class":70,"line":1881},[68,59426,59427],{"class":335},"      overflow: hidden;\n",[68,59429,59430],{"class":70,"line":1886},[68,59431,2393],{"class":335},[68,59433,59434],{"class":70,"line":1900},[68,59435,2606],{"emptyLinePlaceholder":260},[68,59437,59438],{"class":70,"line":1905},[68,59439,59440],{"class":335},"    .slider-wrapper {\n",[68,59442,59443],{"class":70,"line":1934},[68,59444,59445],{"class":335},"      width: 100%;\n",[68,59447,59448],{"class":70,"line":1939},[68,59449,59450],{"class":335},"      height: 320px;\n",[68,59452,59453],{"class":70,"line":1956},[68,59454,2393],{"class":335},[68,59456,59457],{"class":70,"line":1961},[68,59458,2606],{"emptyLinePlaceholder":260},[68,59460,59461],{"class":70,"line":1966},[68,59462,59463],{"class":335},"    .slider-wrapper img {\n",[68,59465,59466],{"class":70,"line":1971},[68,59467,59445],{"class":335},[68,59469,59470],{"class":70,"line":1985},[68,59471,59472],{"class":335},"      height: 100%;\n",[68,59474,59475],{"class":70,"line":1990},[68,59476,59477],{"class":335},"      display: block;\n",[68,59479,59480],{"class":70,"line":2783},[68,59481,2393],{"class":335},[68,59483,59484],{"class":70,"line":2797},[68,59485,2606],{"emptyLinePlaceholder":260},[68,59487,59488],{"class":70,"line":2805},[68,59489,59490],{"class":335},"    .slider-footer {\n",[68,59492,59493],{"class":70,"line":2810},[68,59494,59495],{"class":335},"      height: 80px;\n",[68,59497,59498],{"class":70,"line":2816},[68,59499,59500],{"class":335},"      background-color: rgb(100, 67, 68);\n",[68,59502,59503],{"class":70,"line":2822},[68,59504,59505],{"class":335},"      padding: 12px 12px 0 12px;\n",[68,59507,59508],{"class":70,"line":2827},[68,59509,59510],{"class":335},"      position: relative;\n",[68,59512,59513],{"class":70,"line":8153},[68,59514,2393],{"class":335},[68,59516,59517],{"class":70,"line":8177},[68,59518,2606],{"emptyLinePlaceholder":260},[68,59520,59521],{"class":70,"line":8182},[68,59522,59523],{"class":335},"    .slider-footer .toggle {\n",[68,59525,59526],{"class":70,"line":8188},[68,59527,59528],{"class":335},"      position: absolute;\n",[68,59530,59531],{"class":70,"line":8215},[68,59532,59533],{"class":335},"      right: 0;\n",[68,59535,59536],{"class":70,"line":8220},[68,59537,59538],{"class":335},"      top: 12px;\n",[68,59540,59541],{"class":70,"line":8226},[68,59542,59543],{"class":335},"      display: flex;\n",[68,59545,59546],{"class":70,"line":8238},[68,59547,2393],{"class":335},[68,59549,59550],{"class":70,"line":8250},[68,59551,2606],{"emptyLinePlaceholder":260},[68,59553,59554],{"class":70,"line":8262},[68,59555,59556],{"class":335},"    .slider-footer .toggle button {\n",[68,59558,59559],{"class":70,"line":9921},[68,59560,59561],{"class":335},"      margin-right: 12px;\n",[68,59563,59564],{"class":70,"line":9946},[68,59565,59566],{"class":335},"      width: 28px;\n",[68,59568,59569],{"class":70,"line":9969},[68,59570,59571],{"class":335},"      height: 28px;\n",[68,59573,59574],{"class":70,"line":9993},[68,59575,59576],{"class":335},"      appearance: none;\n",[68,59578,59579],{"class":70,"line":9998},[68,59580,59581],{"class":335},"      border: none;\n",[68,59583,59584],{"class":70,"line":10003},[68,59585,59586],{"class":335},"      background: rgba(255, 255, 255, 0.1);\n",[68,59588,59589],{"class":70,"line":10008},[68,59590,59591],{"class":335},"      color: #fff;\n",[68,59593,59594],{"class":70,"line":10017},[68,59595,59596],{"class":335},"      border-radius: 4px;\n",[68,59598,59599],{"class":70,"line":10022},[68,59600,59601],{"class":335},"      cursor: pointer;\n",[68,59603,59604],{"class":70,"line":10028},[68,59605,2393],{"class":335},[68,59607,59608],{"class":70,"line":10049},[68,59609,2606],{"emptyLinePlaceholder":260},[68,59611,59612],{"class":70,"line":10055},[68,59613,59614],{"class":335},"    .slider-footer .toggle button:hover {\n",[68,59616,59617],{"class":70,"line":10069},[68,59618,59619],{"class":335},"      background: rgba(255, 255, 255, 0.2);\n",[68,59621,59622],{"class":70,"line":10075},[68,59623,2393],{"class":335},[68,59625,59626],{"class":70,"line":10102},[68,59627,2606],{"emptyLinePlaceholder":260},[68,59629,59630],{"class":70,"line":10111},[68,59631,59632],{"class":335},"    .slider-footer p {\n",[68,59634,59635],{"class":70,"line":10117},[68,59636,59637],{"class":335},"      margin: 0;\n",[68,59639,59640],{"class":70,"line":10125},[68,59641,59591],{"class":335},[68,59643,59644],{"class":70,"line":10130},[68,59645,59646],{"class":335},"      font-size: 18px;\n",[68,59648,59649],{"class":70,"line":16809},[68,59650,59651],{"class":335},"      margin-bottom: 10px;\n",[68,59653,59654],{"class":70,"line":16815},[68,59655,2393],{"class":335},[68,59657,59658],{"class":70,"line":16838},[68,59659,2606],{"emptyLinePlaceholder":260},[68,59661,59662],{"class":70,"line":16844},[68,59663,59664],{"class":335},"    .slider-indicator {\n",[68,59666,59667],{"class":70,"line":16867},[68,59668,59637],{"class":335},[68,59670,59671],{"class":70,"line":16881},[68,59672,59673],{"class":335},"      padding: 0;\n",[68,59675,59676],{"class":70,"line":16901},[68,59677,59678],{"class":335},"      list-style: none;\n",[68,59680,59681],{"class":70,"line":16907},[68,59682,59543],{"class":335},[68,59684,59685],{"class":70,"line":16918},[68,59686,59687],{"class":335},"      align-items: center;\n",[68,59689,59690],{"class":70,"line":16941},[68,59691,2393],{"class":335},[68,59693,59694],{"class":70,"line":16963},[68,59695,2606],{"emptyLinePlaceholder":260},[68,59697,59698],{"class":70,"line":16968},[68,59699,59700],{"class":335},"    .slider-indicator li {\n",[68,59702,59703],{"class":70,"line":16974},[68,59704,59705],{"class":335},"      width: 8px;\n",[68,59707,59708],{"class":70,"line":16988},[68,59709,59710],{"class":335},"      height: 8px;\n",[68,59712,59713],{"class":70,"line":17001},[68,59714,59715],{"class":335},"      margin: 4px;\n",[68,59717,59718],{"class":70,"line":17006},[68,59719,59720],{"class":335},"      border-radius: 50%;\n",[68,59722,59723],{"class":70,"line":17020},[68,59724,59725],{"class":335},"      background: #fff;\n",[68,59727,59728],{"class":70,"line":17025},[68,59729,59730],{"class":335},"      opacity: 0.4;\n",[68,59732,59733],{"class":70,"line":17031},[68,59734,59601],{"class":335},[68,59736,59737],{"class":70,"line":17036},[68,59738,2393],{"class":335},[68,59740,59741],{"class":70,"line":17050},[68,59742,2606],{"emptyLinePlaceholder":260},[68,59744,59745],{"class":70,"line":17055},[68,59746,59747],{"class":335},"    .slider-indicator li.active {\n",[68,59749,59750],{"class":70,"line":17060},[68,59751,59752],{"class":335},"      width: 12px;\n",[68,59754,59755],{"class":70,"line":17074},[68,59756,59757],{"class":335},"      height: 12px;\n",[68,59759,59760],{"class":70,"line":17086},[68,59761,59762],{"class":335},"      opacity: 1;\n",[68,59764,59765],{"class":70,"line":17091},[68,59766,2393],{"class":335},[68,59768,59769,59771,59773],{"class":70,"line":17104},[68,59770,52618],{"class":335},[68,59772,250],{"class":51501},[68,59774,51508],{"class":335},[68,59776,59777,59779,59781],{"class":70,"line":17109},[68,59778,51986],{"class":335},[68,59780,51535],{"class":51501},[68,59782,51508],{"class":335},[68,59784,59785],{"class":70,"line":17114},[68,59786,2606],{"emptyLinePlaceholder":260},[68,59788,59789,59791,59793],{"class":70,"line":17119},[68,59790,1243],{"class":335},[68,59792,52001],{"class":51501},[68,59794,51508],{"class":335},[68,59796,59797,59799,59801,59803,59805,59808],{"class":70,"line":17132},[68,59798,52345],{"class":335},[68,59800,51812],{"class":51501},[68,59802,53687],{"class":74},[68,59804,381],{"class":335},[68,59806,59807],{"class":78},"\"slider\"",[68,59809,51508],{"class":335},[68,59811,59812,59814,59816,59818,59820,59822],{"class":70,"line":17137},[68,59813,51542],{"class":335},[68,59815,51812],{"class":51501},[68,59817,53687],{"class":74},[68,59819,381],{"class":335},[68,59821,55428],{"class":78},[68,59823,51508],{"class":335},[68,59825,59826,59828,59830,59832,59834,59837,59839,59841,59843],{"class":70,"line":32834},[68,59827,55435],{"class":335},[68,59829,48],{"class":51501},[68,59831,55440],{"class":74},[68,59833,381],{"class":335},[68,59835,59836],{"class":78},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[68,59838,55448],{"class":74},[68,59840,381],{"class":335},[68,59842,7857],{"class":78},[68,59844,59328],{"class":335},[68,59846,59847,59849,59851],{"class":70,"line":32840},[68,59848,51977],{"class":335},[68,59850,51812],{"class":51501},[68,59852,51508],{"class":335},[68,59854,59855,59857,59859,59861,59863,59865],{"class":70,"line":32846},[68,59856,51542],{"class":335},[68,59858,51812],{"class":51501},[68,59860,53687],{"class":74},[68,59862,381],{"class":335},[68,59864,55475],{"class":78},[68,59866,51508],{"class":335},[68,59868,59869,59871,59873,59876,59878],{"class":70,"line":32852},[68,59870,55435],{"class":335},[68,59872,19],{"class":51501},[68,59874,59875],{"class":335},">对人类来说会不会太超前了？\u003C\u002F",[68,59877,19],{"class":51501},[68,59879,51508],{"class":335},[68,59881,59882,59884,59886,59888,59890,59893],{"class":70,"line":32858},[68,59883,55435],{"class":335},[68,59885,42],{"class":51501},[68,59887,53687],{"class":74},[68,59889,381],{"class":335},[68,59891,59892],{"class":78},"\"slider-indicator\"",[68,59894,51508],{"class":335},[68,59896,59897,59899,59901,59903,59905,59908,59910,59912],{"class":70,"line":32869},[68,59898,55503],{"class":335},[68,59900,26],{"class":51501},[68,59902,53687],{"class":74},[68,59904,381],{"class":335},[68,59906,59907],{"class":78},"\"active\"",[68,59909,55515],{"class":335},[68,59911,26],{"class":51501},[68,59913,51508],{"class":335},[68,59915,59916,59918,59920,59922,59924],{"class":70,"line":32875},[68,59917,55503],{"class":335},[68,59919,26],{"class":51501},[68,59921,55515],{"class":335},[68,59923,26],{"class":51501},[68,59925,51508],{"class":335},[68,59927,59928,59930,59932,59934,59936],{"class":70,"line":32895},[68,59929,55503],{"class":335},[68,59931,26],{"class":51501},[68,59933,55515],{"class":335},[68,59935,26],{"class":51501},[68,59937,51508],{"class":335},[68,59939,59940,59942,59944,59946,59948],{"class":70,"line":32901},[68,59941,55503],{"class":335},[68,59943,26],{"class":51501},[68,59945,55515],{"class":335},[68,59947,26],{"class":51501},[68,59949,51508],{"class":335},[68,59951,59952,59954,59956,59958,59960],{"class":70,"line":32912},[68,59953,55503],{"class":335},[68,59955,26],{"class":51501},[68,59957,55515],{"class":335},[68,59959,26],{"class":51501},[68,59961,51508],{"class":335},[68,59963,59964,59966,59968,59970,59972],{"class":70,"line":32918},[68,59965,55503],{"class":335},[68,59967,26],{"class":51501},[68,59969,55515],{"class":335},[68,59971,26],{"class":51501},[68,59973,51508],{"class":335},[68,59975,59976,59978,59980,59982,59984],{"class":70,"line":32924},[68,59977,55503],{"class":335},[68,59979,26],{"class":51501},[68,59981,55515],{"class":335},[68,59983,26],{"class":51501},[68,59985,51508],{"class":335},[68,59987,59988,59990,59992,59994,59996],{"class":70,"line":32930},[68,59989,55503],{"class":335},[68,59991,26],{"class":51501},[68,59993,55515],{"class":335},[68,59995,26],{"class":51501},[68,59997,51508],{"class":335},[68,59999,60000,60002,60004],{"class":70,"line":32936},[68,60001,55608],{"class":335},[68,60003,42],{"class":51501},[68,60005,51508],{"class":335},[68,60007,60008,60010,60012,60014,60016,60019],{"class":70,"line":32942},[68,60009,55435],{"class":335},[68,60011,51812],{"class":51501},[68,60013,53687],{"class":74},[68,60015,381],{"class":335},[68,60017,60018],{"class":78},"\"toggle\"",[68,60020,51508],{"class":335},[68,60022,60023,60025,60027,60029,60031,60034,60036,60039,60041,60043],{"class":70,"line":32948},[68,60024,55503],{"class":335},[68,60026,54088],{"class":51501},[68,60028,53687],{"class":74},[68,60030,381],{"class":335},[68,60032,60033],{"class":78},"\"prev\"",[68,60035,1293],{"class":335},[68,60037,60038],{"class":82},"&lt;",[68,60040,51986],{"class":335},[68,60042,54088],{"class":51501},[68,60044,51508],{"class":335},[68,60046,60047,60049,60051,60053,60055,60058,60060,60063,60065,60067],{"class":70,"line":32954},[68,60048,55503],{"class":335},[68,60050,54088],{"class":51501},[68,60052,53687],{"class":74},[68,60054,381],{"class":335},[68,60056,60057],{"class":78},"\"next\"",[68,60059,1293],{"class":335},[68,60061,60062],{"class":82},"&gt;",[68,60064,51986],{"class":335},[68,60066,54088],{"class":51501},[68,60068,51508],{"class":335},[68,60070,60071,60073,60075],{"class":70,"line":32974},[68,60072,55608],{"class":335},[68,60074,51812],{"class":51501},[68,60076,51508],{"class":335},[68,60078,60079,60081,60083],{"class":70,"line":32980},[68,60080,51977],{"class":335},[68,60082,51812],{"class":51501},[68,60084,51508],{"class":335},[68,60086,60087,60089,60091],{"class":70,"line":32996},[68,60088,52618],{"class":335},[68,60090,51812],{"class":51501},[68,60092,51508],{"class":335},[68,60094,60095,60097,60099],{"class":70,"line":33002},[68,60096,52345],{"class":335},[68,60098,52014],{"class":51501},[68,60100,51508],{"class":335},[68,60102,60103],{"class":70,"line":33016},[68,60104,60105],{"class":335},"    \u002F\u002F 1. 初始数据\n",[68,60107,60108],{"class":70,"line":33022},[68,60109,60110],{"class":335},"    const data = [\n",[68,60112,60113],{"class":70,"line":33037},[68,60114,60115],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[68,60117,60118],{"class":70,"line":33043},[68,60119,60120],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[68,60122,60123],{"class":70,"line":33052},[68,60124,60125],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[68,60127,60128],{"class":70,"line":33058},[68,60129,60130],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[68,60132,60133],{"class":70,"line":33067},[68,60134,60135],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[68,60137,60138],{"class":70,"line":33073},[68,60139,60140],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[68,60142,60143],{"class":70,"line":33079},[68,60144,60145],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[68,60147,60148],{"class":70,"line":33088},[68,60149,60150],{"class":335},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[68,60152,60153],{"class":70,"line":33094},[68,60154,53310],{"class":335},[68,60156,60157],{"class":70,"line":33105},[68,60158,60159],{"class":335},"    \u002F\u002F 获取元素\n",[68,60161,60162],{"class":70,"line":33111},[68,60163,60164],{"class":335},"    const img = document.querySelector('.slider-wrapper img')\n",[68,60166,60167],{"class":70,"line":33130},[68,60168,60169],{"class":335},"    const p = document.querySelector('.slider-footer p')\n",[68,60171,60172],{"class":70,"line":33136},[68,60173,60174],{"class":335},"    const footer = document.querySelector('.slider-footer')\n",[68,60176,60177],{"class":70,"line":33147},[68,60178,60179],{"class":335},"    \u002F\u002F 1. 右按钮业务\n",[68,60181,60182],{"class":70,"line":33153},[68,60183,60184],{"class":335},"    \u002F\u002F 1.1 获取右侧按钮 \n",[68,60186,60187],{"class":70,"line":33173},[68,60188,60189],{"class":335},"    const next = document.querySelector('.next')\n",[68,60191,60192],{"class":70,"line":33189},[68,60193,60194],{"class":335},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[68,60196,60197],{"class":70,"line":33195},[68,60198,60199],{"class":335},"    \u002F\u002F 1.2 注册点击事件\n",[68,60201,60202],{"class":70,"line":33209},[68,60203,2606],{"emptyLinePlaceholder":260},[68,60205,60206],{"class":70,"line":33215},[68,60207,60208],{"class":335},"    next.addEventListener('click', function () {\n",[68,60210,60211],{"class":70,"line":33221},[68,60212,60213],{"class":335},"      \u002F\u002F console.log(11)\n",[68,60215,60216],{"class":70,"line":33232},[68,60217,60218],{"class":335},"      i++\n",[68,60220,60221],{"class":70,"line":33238},[68,60222,60223],{"class":335},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[68,60225,60226],{"class":70,"line":33244},[68,60227,60228],{"class":335},"      \u002F\u002F if (i >= 8) {\n",[68,60230,60231],{"class":70,"line":33254},[68,60232,60233],{"class":335},"      \u002F\u002F   i = 0\n",[68,60235,60236],{"class":70,"line":33260},[68,60237,60238],{"class":335},"      \u002F\u002F }\n",[68,60240,60241],{"class":70,"line":33271},[68,60242,60243],{"class":335},"      i = i >= data.length ? 0 : i\n",[68,60245,60246],{"class":70,"line":33277},[68,60247,60248],{"class":335},"      \u002F\u002F 1.3 得到对应的对象\n",[68,60250,60251],{"class":70,"line":33287},[68,60252,60253],{"class":335},"      \u002F\u002F console.log(data[i])\n",[68,60255,60256],{"class":70,"line":33292},[68,60257,60258],{"class":335},"      \u002F\u002F 调用函数\n",[68,60260,60261],{"class":70,"line":33298},[68,60262,60263],{"class":335},"      toggle()\n",[68,60265,60266],{"class":70,"line":33347},[68,60267,33662],{"class":335},[68,60269,60270],{"class":70,"line":33394},[68,60271,2606],{"emptyLinePlaceholder":260},[68,60273,60274],{"class":70,"line":33399},[68,60275,60276],{"class":335},"    \u002F\u002F 2. 左侧按钮业务\n",[68,60278,60279],{"class":70,"line":33405},[68,60280,60281],{"class":335},"    \u002F\u002F 2.1 获取左侧按钮 \n",[68,60283,60284],{"class":70,"line":33424},[68,60285,60286],{"class":335},"    const prev = document.querySelector('.prev')\n",[68,60288,60289],{"class":70,"line":33430},[68,60290,60199],{"class":335},[68,60292,60293],{"class":70,"line":33450},[68,60294,60295],{"class":335},"    prev.addEventListener('click', function () {\n",[68,60297,60298],{"class":70,"line":33456},[68,60299,60300],{"class":335},"      i--\n",[68,60302,60303],{"class":70,"line":33462},[68,60304,60305],{"class":335},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[68,60307,60308],{"class":70,"line":33472},[68,60309,60310],{"class":335},"      \u002F\u002F if (i \u003C 0) {\n",[68,60312,60313],{"class":70,"line":33477},[68,60314,60315],{"class":335},"      \u002F\u002F   i = 7\n",[68,60317,60318],{"class":70,"line":33483},[68,60319,60238],{"class":335},[68,60321,60322],{"class":70,"line":33499},[68,60323,60324],{"class":335},"      i = i \u003C 0 ? data.length - 1 : i\n",[68,60326,60327],{"class":70,"line":33544},[68,60328,60248],{"class":335},[68,60330,60331],{"class":70,"line":33550},[68,60332,60253],{"class":335},[68,60334,60335],{"class":70,"line":33556},[68,60336,60258],{"class":335},[68,60338,60339],{"class":70,"line":33562},[68,60340,60263],{"class":335},[68,60342,60343],{"class":70,"line":33573},[68,60344,33662],{"class":335},[68,60346,60347],{"class":70,"line":33579},[68,60348,2606],{"emptyLinePlaceholder":260},[68,60350,60351],{"class":70,"line":33585},[68,60352,60353],{"class":335},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[68,60355,60356],{"class":70,"line":33591},[68,60357,60358],{"class":335},"    function toggle() {\n",[68,60360,60361],{"class":70,"line":33609},[68,60362,60363],{"class":335},"      \u002F\u002F 1.4 渲染对应的数据\n",[68,60365,60366],{"class":70,"line":33623},[68,60367,60368],{"class":335},"      img.src = data[i].url\n",[68,60370,60371],{"class":70,"line":33632},[68,60372,60373],{"class":335},"      p.innerHTML = data[i].title\n",[68,60375,60376],{"class":70,"line":33641},[68,60377,60378],{"class":335},"      footer.style.backgroundColor = data[i].color\n",[68,60380,60381],{"class":70,"line":33650},[68,60382,60383],{"class":335},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[68,60385,60386],{"class":70,"line":33659},[68,60387,60388],{"class":335},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[68,60390,60391],{"class":70,"line":33665},[68,60392,60393],{"class":335},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[68,60395,60396],{"class":70,"line":33671},[68,60397,2393],{"class":335},[68,60399,60400],{"class":70,"line":33679},[68,60401,2606],{"emptyLinePlaceholder":260},[68,60403,60404],{"class":70,"line":33684},[68,60405,60406],{"class":335},"    \u002F\u002F 3. 自动播放模块\n",[68,60408,60409],{"class":70,"line":33690},[68,60410,60411],{"class":335},"    let timerId = setInterval(function () {\n",[68,60413,60414],{"class":70,"line":33701},[68,60415,60416],{"class":335},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[68,60418,60419],{"class":70,"line":33707},[68,60420,60421],{"class":335},"      next.click()\n",[68,60423,60424],{"class":70,"line":33727},[68,60425,60426],{"class":335},"    }, 1000)\n",[68,60428,60429],{"class":70,"line":33733},[68,60430,2606],{"emptyLinePlaceholder":260},[68,60432,60433],{"class":70,"line":33739},[68,60434,60435],{"class":335},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[68,60437,60438],{"class":70,"line":33745},[68,60439,60440],{"class":335},"    const slider = document.querySelector('.slider')\n",[68,60442,60443],{"class":70,"line":33762},[68,60444,60445],{"class":335},"    \u002F\u002F 注册事件\n",[68,60447,60448],{"class":70,"line":33768},[68,60449,60450],{"class":335},"    slider.addEventListener('mouseenter', function () {\n",[68,60452,60453],{"class":70,"line":33774},[68,60454,60455],{"class":335},"      \u002F\u002F 停止定时器\n",[68,60457,60458],{"class":70,"line":33780},[68,60459,60460],{"class":335},"      clearInterval(timerId)\n",[68,60462,60463],{"class":70,"line":33786},[68,60464,33662],{"class":335},[68,60466,60467],{"class":70,"line":33792},[68,60468,2606],{"emptyLinePlaceholder":260},[68,60470,60471],{"class":70,"line":33819},[68,60472,60473],{"class":335},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[68,60475,60476],{"class":70,"line":33843},[68,60477,60445],{"class":335},[68,60479,60480],{"class":70,"line":33849},[68,60481,60482],{"class":335},"    slider.addEventListener('mouseleave', function () {\n",[68,60484,60485],{"class":70,"line":33855},[68,60486,60455],{"class":335},[68,60488,60489],{"class":70,"line":33861},[68,60490,60491],{"class":335},"      if (timerId) clearInterval(timerId)\n",[68,60493,60494],{"class":70,"line":33872},[68,60495,60496],{"class":335},"      \u002F\u002F 开启定时器\n",[68,60498,60499],{"class":70,"line":33883},[68,60500,60501],{"class":335},"      timerId = setInterval(function () {\n",[68,60503,60504],{"class":70,"line":33889},[68,60505,60506],{"class":335},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[68,60508,60509],{"class":70,"line":33906},[68,60510,60511],{"class":335},"        next.click()\n",[68,60513,60514],{"class":70,"line":33929},[68,60515,60516],{"class":335},"      }, 1000)\n",[68,60518,60519],{"class":70,"line":33952},[68,60520,33662],{"class":335},[68,60522,60523,60525,60527],{"class":70,"line":33958},[68,60524,52618],{"class":335},[68,60526,52014],{"class":51501},[68,60528,51508],{"class":335},[68,60530,60531,60533,60535],{"class":70,"line":33963},[68,60532,51986],{"class":335},[68,60534,52001],{"class":51501},[68,60536,51508],{"class":335},[68,60538,60539],{"class":70,"line":33972},[68,60540,2606],{"emptyLinePlaceholder":260},[68,60542,60543,60545,60547],{"class":70,"line":33982},[68,60544,51986],{"class":335},[68,60546,50836],{"class":51501},[68,60548,51508],{"class":335},[22203,60550,60552],{"id":60551},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60554,60555],{},"小米搜索框案例：",[58,60557,60559],{"className":50834,"code":60558,"language":50836,"meta":63,"style":63},"\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",[65,60560,60561,60571,60585,60589,60597,60611,60631,60651,60663,60671,60677,60687,60697,60709,60713,60717,60724,60728,60739,60743,60747,60754,60765,60778,60792,60796,60800,60809,60821,60833,60847,60860,60873,60891,60902,60906,60910,60919,60936,60940,60944,60951,60961,60971,60982,60995,61007,61023,61034,61046,61050,61054,61062,61073,61090,61102,61114,61125,61129,61133,61144,61155,61159,61167,61171,61179,61183,61191,61206,61229,61244,61275,61302,61329,61356,61383,61410,61437,61446,61454,61462,61467,61487,61507,61512,61517,61535,61540,61550,61555,61569,61574,61579,61596,61605,61617,61621,61629,61637,61641],{"__ignoreMap":63},[68,60562,60563,60565,60567,60569],{"class":70,"line":71},[68,60564,51498],{"class":335},[68,60566,51502],{"class":51501},[68,60568,51505],{"class":74},[68,60570,51508],{"class":335},[68,60572,60573,60575,60577,60579,60581,60583],{"class":70,"line":92},[68,60574,1243],{"class":335},[68,60576,50836],{"class":51501},[68,60578,51517],{"class":74},[68,60580,381],{"class":335},[68,60582,51522],{"class":78},[68,60584,51508],{"class":335},[68,60586,60587],{"class":70,"line":1387},[68,60588,2606],{"emptyLinePlaceholder":260},[68,60590,60591,60593,60595],{"class":70,"line":1402},[68,60592,1243],{"class":335},[68,60594,51535],{"class":51501},[68,60596,51508],{"class":335},[68,60598,60599,60601,60603,60605,60607,60609],{"class":70,"line":1408},[68,60600,51542],{"class":335},[68,60602,51545],{"class":51501},[68,60604,51548],{"class":74},[68,60606,381],{"class":335},[68,60608,51553],{"class":78},[68,60610,51508],{"class":335},[68,60612,60613,60615,60617,60619,60621,60623,60625,60627,60629],{"class":70,"line":1422},[68,60614,51542],{"class":335},[68,60616,51545],{"class":51501},[68,60618,51564],{"class":74},[68,60620,381],{"class":335},[68,60622,51569],{"class":78},[68,60624,51572],{"class":74},[68,60626,381],{"class":335},[68,60628,51577],{"class":78},[68,60630,51508],{"class":335},[68,60632,60633,60635,60637,60639,60641,60643,60645,60647,60649],{"class":70,"line":1428},[68,60634,51542],{"class":335},[68,60636,51545],{"class":51501},[68,60638,15125],{"class":74},[68,60640,381],{"class":335},[68,60642,51592],{"class":78},[68,60644,51572],{"class":74},[68,60646,381],{"class":335},[68,60648,51599],{"class":78},[68,60650,51508],{"class":335},[68,60652,60653,60655,60657,60659,60661],{"class":70,"line":1519},[68,60654,51542],{"class":335},[68,60656,51608],{"class":51501},[68,60658,51611],{"class":335},[68,60660,51608],{"class":51501},[68,60662,51508],{"class":335},[68,60664,60665,60667,60669],{"class":70,"line":1525},[68,60666,51542],{"class":335},[68,60668,250],{"class":51501},[68,60670,51508],{"class":335},[68,60672,60673,60675],{"class":70,"line":1537},[68,60674,51628],{"class":51501},[68,60676,15777],{"class":335},[68,60678,60679,60681,60683,60685],{"class":70,"line":1819},[68,60680,51635],{"class":82},[68,60682,51638],{"class":335},[68,60684,525],{"class":82},[68,60686,1498],{"class":335},[68,60688,60689,60691,60693,60695],{"class":70,"line":1824},[68,60690,51647],{"class":82},[68,60692,51638],{"class":335},[68,60694,525],{"class":82},[68,60696,1498],{"class":335},[68,60698,60699,60702,60704,60707],{"class":70,"line":1830},[68,60700,60701],{"class":82},"            box-sizing",[68,60703,51638],{"class":335},[68,60705,60706],{"class":82},"border-box",[68,60708,1498],{"class":335},[68,60710,60711],{"class":70,"line":1835},[68,60712,2735],{"class":335},[68,60714,60715],{"class":70,"line":1849},[68,60716,2606],{"emptyLinePlaceholder":260},[68,60718,60719,60722],{"class":70,"line":1854},[68,60720,60721],{"class":51501},"        ul",[68,60723,15777],{"class":335},[68,60725,60726],{"class":70,"line":1860},[68,60727,2606],{"emptyLinePlaceholder":260},[68,60729,60730,60733,60735,60737],{"class":70,"line":1881},[68,60731,60732],{"class":82},"            list-style",[68,60734,51638],{"class":335},[68,60736,54938],{"class":82},[68,60738,1498],{"class":335},[68,60740,60741],{"class":70,"line":1886},[68,60742,2735],{"class":335},[68,60744,60745],{"class":70,"line":1900},[68,60746,2606],{"emptyLinePlaceholder":260},[68,60748,60749,60752],{"class":70,"line":1905},[68,60750,60751],{"class":74},"        .mi",[68,60753,15777],{"class":335},[68,60755,60756,60759,60761,60763],{"class":70,"line":1934},[68,60757,60758],{"class":82},"            position",[68,60760,51638],{"class":335},[68,60762,54965],{"class":82},[68,60764,1498],{"class":335},[68,60766,60767,60769,60771,60774,60776],{"class":70,"line":1939},[68,60768,51685],{"class":82},[68,60770,51638],{"class":335},[68,60772,60773],{"class":82},"223",[68,60775,51693],{"class":331},[68,60777,1498],{"class":335},[68,60779,60780,60782,60784,60786,60788,60790],{"class":70,"line":1956},[68,60781,51635],{"class":82},[68,60783,51638],{"class":335},[68,60785,644],{"class":82},[68,60787,51693],{"class":331},[68,60789,51757],{"class":82},[68,60791,1498],{"class":335},[68,60793,60794],{"class":70,"line":1961},[68,60795,2735],{"class":335},[68,60797,60798],{"class":70,"line":1966},[68,60799,2606],{"emptyLinePlaceholder":260},[68,60801,60802,60804,60807],{"class":70,"line":1971},[68,60803,60751],{"class":74},[68,60805,60806],{"class":51501}," input",[68,60808,15777],{"class":335},[68,60810,60811,60813,60815,60817,60819],{"class":70,"line":1985},[68,60812,51685],{"class":82},[68,60814,51638],{"class":335},[68,60816,60773],{"class":82},[68,60818,51693],{"class":331},[68,60820,1498],{"class":335},[68,60822,60823,60825,60827,60829,60831],{"class":70,"line":1990},[68,60824,51700],{"class":82},[68,60826,51638],{"class":335},[68,60828,940],{"class":82},[68,60830,51693],{"class":331},[68,60832,1498],{"class":335},[68,60834,60835,60837,60839,60841,60843,60845],{"class":70,"line":2783},[68,60836,51647],{"class":82},[68,60838,51638],{"class":335},[68,60840,525],{"class":82},[68,60842,2244],{"class":82},[68,60844,51693],{"class":331},[68,60846,1498],{"class":335},[68,60848,60849,60852,60854,60856,60858],{"class":70,"line":2797},[68,60850,60851],{"class":82},"            font-size",[68,60853,51638],{"class":335},[68,60855,882],{"class":82},[68,60857,51693],{"class":331},[68,60859,1498],{"class":335},[68,60861,60862,60865,60867,60869,60871],{"class":70,"line":2805},[68,60863,60864],{"class":82},"            line-height",[68,60866,51638],{"class":335},[68,60868,940],{"class":82},[68,60870,51693],{"class":331},[68,60872,1498],{"class":335},[68,60874,60875,60878,60880,60882,60884,60886,60889],{"class":70,"line":2810},[68,60876,60877],{"class":82},"            border",[68,60879,51638],{"class":335},[68,60881,551],{"class":82},[68,60883,51693],{"class":331},[68,60885,51722],{"class":82},[68,60887,60888],{"class":82}," #e0e0e0",[68,60890,1498],{"class":335},[68,60892,60893,60896,60898,60900],{"class":70,"line":2816},[68,60894,60895],{"class":82},"            outline",[68,60897,51638],{"class":335},[68,60899,54938],{"class":82},[68,60901,1498],{"class":335},[68,60903,60904],{"class":70,"line":2822},[68,60905,2735],{"class":335},[68,60907,60908],{"class":70,"line":2827},[68,60909,2606],{"emptyLinePlaceholder":260},[68,60911,60912,60914,60917],{"class":70,"line":8153},[68,60913,60751],{"class":74},[68,60915,60916],{"class":74}," .search",[68,60918,15777],{"class":335},[68,60920,60921,60923,60925,60927,60929,60931,60934],{"class":70,"line":8177},[68,60922,60877],{"class":82},[68,60924,51638],{"class":335},[68,60926,551],{"class":82},[68,60928,51693],{"class":331},[68,60930,51722],{"class":82},[68,60932,60933],{"class":82}," #ff6700",[68,60935,1498],{"class":335},[68,60937,60938],{"class":70,"line":8182},[68,60939,2735],{"class":335},[68,60941,60942],{"class":70,"line":8188},[68,60943,2606],{"emptyLinePlaceholder":260},[68,60945,60946,60949],{"class":70,"line":8215},[68,60947,60948],{"class":74},"        .result-list",[68,60950,15777],{"class":335},[68,60952,60953,60955,60957,60959],{"class":70,"line":8220},[68,60954,51673],{"class":82},[68,60956,51638],{"class":335},[68,60958,54938],{"class":82},[68,60960,1498],{"class":335},[68,60962,60963,60965,60967,60969],{"class":70,"line":8226},[68,60964,60758],{"class":82},[68,60966,51638],{"class":335},[68,60968,55032],{"class":82},[68,60970,1498],{"class":335},[68,60972,60973,60976,60978,60980],{"class":70,"line":8238},[68,60974,60975],{"class":82},"            left",[68,60977,51638],{"class":335},[68,60979,525],{"class":82},[68,60981,1498],{"class":335},[68,60983,60984,60987,60989,60991,60993],{"class":70,"line":8250},[68,60985,60986],{"class":82},"            top",[68,60988,51638],{"class":335},[68,60990,940],{"class":82},[68,60992,51693],{"class":331},[68,60994,1498],{"class":335},[68,60996,60997,60999,61001,61003,61005],{"class":70,"line":8262},[68,60998,51685],{"class":82},[68,61000,51638],{"class":335},[68,61002,60773],{"class":82},[68,61004,51693],{"class":331},[68,61006,1498],{"class":335},[68,61008,61009,61011,61013,61015,61017,61019,61021],{"class":70,"line":9921},[68,61010,60877],{"class":82},[68,61012,51638],{"class":335},[68,61014,551],{"class":82},[68,61016,51693],{"class":331},[68,61018,51722],{"class":82},[68,61020,60933],{"class":82},[68,61022,1498],{"class":335},[68,61024,61025,61028,61030,61032],{"class":70,"line":9946},[68,61026,61027],{"class":82},"            border-top",[68,61029,51638],{"class":335},[68,61031,525],{"class":82},[68,61033,1498],{"class":335},[68,61035,61036,61039,61041,61044],{"class":70,"line":9969},[68,61037,61038],{"class":82},"            background",[68,61040,51638],{"class":335},[68,61042,61043],{"class":82},"#fff",[68,61045,1498],{"class":335},[68,61047,61048],{"class":70,"line":9993},[68,61049,2735],{"class":335},[68,61051,61052],{"class":70,"line":9998},[68,61053,2606],{"emptyLinePlaceholder":260},[68,61055,61056,61058,61060],{"class":70,"line":10003},[68,61057,60948],{"class":74},[68,61059,1606],{"class":51501},[68,61061,15777],{"class":335},[68,61063,61064,61066,61068,61071],{"class":70,"line":10008},[68,61065,51673],{"class":82},[68,61067,51638],{"class":335},[68,61069,61070],{"class":82},"block",[68,61072,1498],{"class":335},[68,61074,61075,61077,61079,61081,61083,61086,61088],{"class":70,"line":10017},[68,61076,51647],{"class":82},[68,61078,51638],{"class":335},[68,61080,677],{"class":82},[68,61082,51693],{"class":331},[68,61084,61085],{"class":82}," 15",[68,61087,51693],{"class":331},[68,61089,1498],{"class":335},[68,61091,61092,61094,61096,61098,61100],{"class":70,"line":10022},[68,61093,60851],{"class":82},[68,61095,51638],{"class":335},[68,61097,831],{"class":82},[68,61099,51693],{"class":331},[68,61101,1498],{"class":335},[68,61103,61104,61107,61109,61112],{"class":70,"line":10028},[68,61105,61106],{"class":82},"            color",[68,61108,51638],{"class":335},[68,61110,61111],{"class":82},"#424242",[68,61113,1498],{"class":335},[68,61115,61116,61119,61121,61123],{"class":70,"line":10049},[68,61117,61118],{"class":82},"            text-decoration",[68,61120,51638],{"class":335},[68,61122,54938],{"class":82},[68,61124,1498],{"class":335},[68,61126,61127],{"class":70,"line":10055},[68,61128,2735],{"class":335},[68,61130,61131],{"class":70,"line":10069},[68,61132,2606],{"emptyLinePlaceholder":260},[68,61134,61135,61137,61139,61142],{"class":70,"line":10075},[68,61136,60948],{"class":74},[68,61138,1606],{"class":51501},[68,61140,61141],{"class":74},":hover",[68,61143,15777],{"class":335},[68,61145,61146,61148,61150,61153],{"class":70,"line":10102},[68,61147,51841],{"class":82},[68,61149,51638],{"class":335},[68,61151,61152],{"class":82},"#eee",[68,61154,1498],{"class":335},[68,61156,61157],{"class":70,"line":10111},[68,61158,2735],{"class":335},[68,61160,61161,61163,61165],{"class":70,"line":10117},[68,61162,51977],{"class":335},[68,61164,250],{"class":51501},[68,61166,51508],{"class":335},[68,61168,61169],{"class":70,"line":10125},[68,61170,2606],{"emptyLinePlaceholder":260},[68,61172,61173,61175,61177],{"class":70,"line":10130},[68,61174,51986],{"class":335},[68,61176,51535],{"class":51501},[68,61178,51508],{"class":335},[68,61180,61181],{"class":70,"line":16809},[68,61182,2606],{"emptyLinePlaceholder":260},[68,61184,61185,61187,61189],{"class":70,"line":16815},[68,61186,1243],{"class":335},[68,61188,52001],{"class":51501},[68,61190,51508],{"class":335},[68,61192,61193,61195,61197,61199,61201,61204],{"class":70,"line":16838},[68,61194,51542],{"class":335},[68,61196,51812],{"class":51501},[68,61198,53687],{"class":74},[68,61200,381],{"class":335},[68,61202,61203],{"class":78},"\"mi\"",[68,61205,51508],{"class":335},[68,61207,61208,61210,61212,61214,61216,61219,61222,61224,61227],{"class":70,"line":16844},[68,61209,55503],{"class":335},[68,61211,54022],{"class":51501},[68,61213,54025],{"class":74},[68,61215,381],{"class":335},[68,61217,61218],{"class":78},"\"search\"",[68,61220,61221],{"class":74}," placeholder",[68,61223,381],{"class":335},[68,61225,61226],{"class":78},"\"小米笔记本\"",[68,61228,51508],{"class":335},[68,61230,61231,61233,61235,61237,61239,61242],{"class":70,"line":16867},[68,61232,55503],{"class":335},[68,61234,42],{"class":51501},[68,61236,53687],{"class":74},[68,61238,381],{"class":335},[68,61240,61241],{"class":78},"\"result-list\"",[68,61243,51508],{"class":335},[68,61245,61246,61249,61251,61254,61256,61259,61261,61264,61267,61269,61271,61273],{"class":70,"line":16881},[68,61247,61248],{"class":335},"            \u003C",[68,61250,26],{"class":51501},[68,61252,61253],{"class":335},">\u003C",[68,61255,30],{"class":51501},[68,61257,61258],{"class":74}," href",[68,61260,381],{"class":335},[68,61262,61263],{"class":78},"\"#\"",[68,61265,61266],{"class":335},">全部商品\u003C\u002F",[68,61268,30],{"class":51501},[68,61270,55515],{"class":335},[68,61272,26],{"class":51501},[68,61274,51508],{"class":335},[68,61276,61277,61279,61281,61283,61285,61287,61289,61291,61294,61296,61298,61300],{"class":70,"line":16901},[68,61278,61248],{"class":335},[68,61280,26],{"class":51501},[68,61282,61253],{"class":335},[68,61284,30],{"class":51501},[68,61286,61258],{"class":74},[68,61288,381],{"class":335},[68,61290,61263],{"class":78},[68,61292,61293],{"class":335},">小米11\u003C\u002F",[68,61295,30],{"class":51501},[68,61297,55515],{"class":335},[68,61299,26],{"class":51501},[68,61301,51508],{"class":335},[68,61303,61304,61306,61308,61310,61312,61314,61316,61318,61321,61323,61325,61327],{"class":70,"line":16907},[68,61305,61248],{"class":335},[68,61307,26],{"class":51501},[68,61309,61253],{"class":335},[68,61311,30],{"class":51501},[68,61313,61258],{"class":74},[68,61315,381],{"class":335},[68,61317,61263],{"class":78},[68,61319,61320],{"class":335},">小米10S\u003C\u002F",[68,61322,30],{"class":51501},[68,61324,55515],{"class":335},[68,61326,26],{"class":51501},[68,61328,51508],{"class":335},[68,61330,61331,61333,61335,61337,61339,61341,61343,61345,61348,61350,61352,61354],{"class":70,"line":16918},[68,61332,61248],{"class":335},[68,61334,26],{"class":51501},[68,61336,61253],{"class":335},[68,61338,30],{"class":51501},[68,61340,61258],{"class":74},[68,61342,381],{"class":335},[68,61344,61263],{"class":78},[68,61346,61347],{"class":335},">小米笔记本\u003C\u002F",[68,61349,30],{"class":51501},[68,61351,55515],{"class":335},[68,61353,26],{"class":51501},[68,61355,51508],{"class":335},[68,61357,61358,61360,61362,61364,61366,61368,61370,61372,61375,61377,61379,61381],{"class":70,"line":16941},[68,61359,61248],{"class":335},[68,61361,26],{"class":51501},[68,61363,61253],{"class":335},[68,61365,30],{"class":51501},[68,61367,61258],{"class":74},[68,61369,381],{"class":335},[68,61371,61263],{"class":78},[68,61373,61374],{"class":335},">小米手机\u003C\u002F",[68,61376,30],{"class":51501},[68,61378,55515],{"class":335},[68,61380,26],{"class":51501},[68,61382,51508],{"class":335},[68,61384,61385,61387,61389,61391,61393,61395,61397,61399,61402,61404,61406,61408],{"class":70,"line":16963},[68,61386,61248],{"class":335},[68,61388,26],{"class":51501},[68,61390,61253],{"class":335},[68,61392,30],{"class":51501},[68,61394,61258],{"class":74},[68,61396,381],{"class":335},[68,61398,61263],{"class":78},[68,61400,61401],{"class":335},">黑鲨4\u003C\u002F",[68,61403,30],{"class":51501},[68,61405,55515],{"class":335},[68,61407,26],{"class":51501},[68,61409,51508],{"class":335},[68,61411,61412,61414,61416,61418,61420,61422,61424,61426,61429,61431,61433,61435],{"class":70,"line":16968},[68,61413,61248],{"class":335},[68,61415,26],{"class":51501},[68,61417,61253],{"class":335},[68,61419,30],{"class":51501},[68,61421,61258],{"class":74},[68,61423,381],{"class":335},[68,61425,61263],{"class":78},[68,61427,61428],{"class":335},">空调\u003C\u002F",[68,61430,30],{"class":51501},[68,61432,55515],{"class":335},[68,61434,26],{"class":51501},[68,61436,51508],{"class":335},[68,61438,61439,61442,61444],{"class":70,"line":16974},[68,61440,61441],{"class":335},"        \u003C\u002F",[68,61443,42],{"class":51501},[68,61445,51508],{"class":335},[68,61447,61448,61450,61452],{"class":70,"line":16988},[68,61449,51977],{"class":335},[68,61451,51812],{"class":51501},[68,61453,51508],{"class":335},[68,61455,61456,61458,61460],{"class":70,"line":17001},[68,61457,51542],{"class":335},[68,61459,52014],{"class":51501},[68,61461,51508],{"class":335},[68,61463,61464],{"class":70,"line":17006},[68,61465,61466],{"class":393},"        \u002F\u002F 1. 获取元素\n",[68,61468,61469,61472,61474,61476,61478,61480,61482,61485],{"class":70,"line":17020},[68,61470,61471],{"class":331},"        const",[68,61473,60806],{"class":82},[68,61475,13769],{"class":331},[68,61477,54597],{"class":335},[68,61479,54600],{"class":74},[68,61481,336],{"class":335},[68,61483,61484],{"class":78},"'[type=search]'",[68,61486,342],{"class":335},[68,61488,61489,61491,61494,61496,61498,61500,61502,61505],{"class":70,"line":17025},[68,61490,61471],{"class":331},[68,61492,61493],{"class":82}," ul",[68,61495,13769],{"class":331},[68,61497,54597],{"class":335},[68,61499,54600],{"class":74},[68,61501,336],{"class":335},[68,61503,61504],{"class":78},"'.result-list'",[68,61506,342],{"class":335},[68,61508,61509],{"class":70,"line":17031},[68,61510,61511],{"class":393},"        \u002F\u002F console.log(input)\n",[68,61513,61514],{"class":70,"line":17036},[68,61515,61516],{"class":393},"        \u002F\u002F 2. 监听事件 获得焦点\n",[68,61518,61519,61522,61524,61526,61529,61531,61533],{"class":70,"line":17050},[68,61520,61521],{"class":335},"        input.",[68,61523,58014],{"class":74},[68,61525,336],{"class":335},[68,61527,61528],{"class":78},"'focus'",[68,61530,12640],{"class":335},[68,61532,54650],{"class":331},[68,61534,54653],{"class":335},[68,61536,61537],{"class":70,"line":17055},[68,61538,61539],{"class":393},"            \u002F\u002F ul显示\n",[68,61541,61542,61545,61547],{"class":70,"line":17060},[68,61543,61544],{"class":335},"            ul.style.display ",[68,61546,381],{"class":331},[68,61548,61549],{"class":78}," 'block'\n",[68,61551,61552],{"class":70,"line":17074},[68,61553,61554],{"class":393},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[68,61556,61557,61560,61562,61564,61567],{"class":70,"line":17086},[68,61558,61559],{"class":335},"            input.classList.",[68,61561,5539],{"class":74},[68,61563,336],{"class":335},[68,61565,61566],{"class":78},"'search'",[68,61568,342],{"class":335},[68,61570,61571],{"class":70,"line":17091},[68,61572,61573],{"class":335},"        })\n",[68,61575,61576],{"class":70,"line":17104},[68,61577,61578],{"class":393},"        \u002F\u002F 3. 监听事件 失去焦点\n",[68,61580,61581,61583,61585,61587,61590,61592,61594],{"class":70,"line":17109},[68,61582,61521],{"class":335},[68,61584,58014],{"class":74},[68,61586,336],{"class":335},[68,61588,61589],{"class":78},"'blur'",[68,61591,12640],{"class":335},[68,61593,54650],{"class":331},[68,61595,54653],{"class":335},[68,61597,61598,61600,61602],{"class":70,"line":17114},[68,61599,61544],{"class":335},[68,61601,381],{"class":331},[68,61603,61604],{"class":78}," 'none'\n",[68,61606,61607,61609,61611,61613,61615],{"class":70,"line":17119},[68,61608,61559],{"class":335},[68,61610,57207],{"class":74},[68,61612,336],{"class":335},[68,61614,61566],{"class":78},[68,61616,342],{"class":335},[68,61618,61619],{"class":70,"line":17132},[68,61620,61573],{"class":335},[68,61622,61623,61625,61627],{"class":70,"line":17137},[68,61624,51977],{"class":335},[68,61626,52014],{"class":51501},[68,61628,51508],{"class":335},[68,61630,61631,61633,61635],{"class":70,"line":32834},[68,61632,51986],{"class":335},[68,61634,52001],{"class":51501},[68,61636,51508],{"class":335},[68,61638,61639],{"class":70,"line":32840},[68,61640,2606],{"emptyLinePlaceholder":260},[68,61642,61643,61645,61647],{"class":70,"line":32846},[68,61644,51986],{"class":335},[68,61646,50836],{"class":51501},[68,61648,51508],{"class":335},[22203,61650,61652],{"id":61651},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61654,61655],{},"评论字数统计案例",[19,61657,61658],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61660,61661],{},"牢记focus伪类选择器",[51545,61663],{"charSet":61664},"UTF-8",[51545,61666],{"name":61667,"content":61668},"viewport","width=device-width, initial-scale=1.0",[51608,61670,61671],{},"Document",[250,61673,61674],{},"\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",[54022,61676],{"type":5393},[42,61678,61679,61682],{},[26,61680,61681],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[26,61683,61684],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[58,61686,61688],{"className":50834,"code":61687,"language":50836,"meta":63,"style":63},"\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",[65,61689,61690,61700,61714,61718,61726,61740,61760,61780,61793,61801,61808,61821,61835,61845,61855,61859,61863,61870,61882,61894,61906,61918,61947,61960,61964,61968,61977,61988,62000,62011,62022,62034,62045,62057,62073,62085,62089,62093,62104,62115,62125,62137,62141,62145,62153,62164,62174,62185,62197,62210,62222,62234,62238,62242,62251,62263,62274,62287,62298,62312,62316,62320,62327,62339,62351,62361,62365,62369,62378,62390,62400,62404,62408,62419,62429,62448,62461,62465,62469,62479,62489,62493,62497,62508,62519,62531,62543,62547,62551,62562,62573,62587,62591,62595,62606,62616,62628,62632,62640,62648,62652,62660,62675,62694,62734,62747,62755,62769,62789,62797,62812,62835,62853,62868,62888,62908,62928,62936,62944,62952,62960,62980,63000,63005,63022,63031,63035,63040,63056,63064,63068,63073,63090,63095,63120,63124,63128,63133,63138,63146,63154,63158],{"__ignoreMap":63},[68,61691,61692,61694,61696,61698],{"class":70,"line":71},[68,61693,51498],{"class":335},[68,61695,51502],{"class":51501},[68,61697,51505],{"class":74},[68,61699,51508],{"class":335},[68,61701,61702,61704,61706,61708,61710,61712],{"class":70,"line":92},[68,61703,1243],{"class":335},[68,61705,50836],{"class":51501},[68,61707,51517],{"class":74},[68,61709,381],{"class":335},[68,61711,51522],{"class":78},[68,61713,51508],{"class":335},[68,61715,61716],{"class":70,"line":1387},[68,61717,2606],{"emptyLinePlaceholder":260},[68,61719,61720,61722,61724],{"class":70,"line":1402},[68,61721,1243],{"class":335},[68,61723,51535],{"class":51501},[68,61725,51508],{"class":335},[68,61727,61728,61730,61732,61734,61736,61738],{"class":70,"line":1408},[68,61729,52345],{"class":335},[68,61731,51545],{"class":51501},[68,61733,51548],{"class":74},[68,61735,381],{"class":335},[68,61737,51553],{"class":78},[68,61739,51508],{"class":335},[68,61741,61742,61744,61746,61748,61750,61752,61754,61756,61758],{"class":70,"line":1422},[68,61743,52345],{"class":335},[68,61745,51545],{"class":51501},[68,61747,51564],{"class":74},[68,61749,381],{"class":335},[68,61751,51569],{"class":78},[68,61753,51572],{"class":74},[68,61755,381],{"class":335},[68,61757,51577],{"class":78},[68,61759,51508],{"class":335},[68,61761,61762,61764,61766,61768,61770,61772,61774,61776,61778],{"class":70,"line":1428},[68,61763,52345],{"class":335},[68,61765,51545],{"class":51501},[68,61767,15125],{"class":74},[68,61769,381],{"class":335},[68,61771,51592],{"class":78},[68,61773,51572],{"class":74},[68,61775,381],{"class":335},[68,61777,51599],{"class":78},[68,61779,51508],{"class":335},[68,61781,61782,61784,61786,61789,61791],{"class":70,"line":1519},[68,61783,52345],{"class":335},[68,61785,51608],{"class":51501},[68,61787,61788],{"class":335},">评论回车发布\u003C\u002F",[68,61790,51608],{"class":51501},[68,61792,51508],{"class":335},[68,61794,61795,61797,61799],{"class":70,"line":1525},[68,61796,52345],{"class":335},[68,61798,250],{"class":51501},[68,61800,51508],{"class":335},[68,61802,61803,61806],{"class":70,"line":1537},[68,61804,61805],{"class":74},"    .wrapper",[68,61807,15777],{"class":335},[68,61809,61810,61813,61815,61817,61819],{"class":70,"line":1819},[68,61811,61812],{"class":82},"      min-width",[68,61814,51638],{"class":335},[68,61816,4193],{"class":82},[68,61818,51693],{"class":331},[68,61820,1498],{"class":335},[68,61822,61823,61826,61828,61831,61833],{"class":70,"line":1824},[68,61824,61825],{"class":82},"      max-width",[68,61827,51638],{"class":335},[68,61829,61830],{"class":82},"800",[68,61832,51693],{"class":331},[68,61834,1498],{"class":335},[68,61836,61837,61839,61841,61843],{"class":70,"line":1830},[68,61838,55210],{"class":82},[68,61840,51638],{"class":335},[68,61842,51678],{"class":82},[68,61844,1498],{"class":335},[68,61846,61847,61849,61851,61853],{"class":70,"line":1835},[68,61848,55221],{"class":82},[68,61850,51638],{"class":335},[68,61852,51781],{"class":82},[68,61854,1498],{"class":335},[68,61856,61857],{"class":70,"line":1849},[68,61858,2393],{"class":335},[68,61860,61861],{"class":70,"line":1854},[68,61862,2606],{"emptyLinePlaceholder":260},[68,61864,61865,61868],{"class":70,"line":1860},[68,61866,61867],{"class":74},"    .avatar",[68,61869,15777],{"class":335},[68,61871,61872,61874,61876,61878,61880],{"class":70,"line":1881},[68,61873,54972],{"class":82},[68,61875,51638],{"class":335},[68,61877,940],{"class":82},[68,61879,51693],{"class":331},[68,61881,1498],{"class":335},[68,61883,61884,61886,61888,61890,61892],{"class":70,"line":1886},[68,61885,54986],{"class":82},[68,61887,51638],{"class":335},[68,61889,940],{"class":82},[68,61891,51693],{"class":331},[68,61893,1498],{"class":335},[68,61895,61896,61898,61900,61902,61904],{"class":70,"line":1900},[68,61897,55335],{"class":82},[68,61899,51638],{"class":335},[68,61901,989],{"class":82},[68,61903,661],{"class":331},[68,61905,1498],{"class":335},[68,61907,61908,61911,61913,61916],{"class":70,"line":1905},[68,61909,61910],{"class":82},"      overflow",[68,61912,51638],{"class":335},[68,61914,61915],{"class":82},"hidden",[68,61917,1498],{"class":335},[68,61919,61920,61923,61925,61928,61930,61933,61935,61938,61940,61942,61945],{"class":70,"line":1934},[68,61921,61922],{"class":82},"      background",[68,61924,51638],{"class":335},[68,61926,61927],{"class":82},"url",[68,61929,336],{"class":335},[68,61931,61932],{"class":5421},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[68,61934,13919],{"class":335},[68,61936,61937],{"class":82},"no-repeat",[68,61939,17349],{"class":82},[68,61941,25182],{"class":335},[68,61943,61944],{"class":82},"cover",[68,61946,1498],{"class":335},[68,61948,61949,61952,61954,61956,61958],{"class":70,"line":1939},[68,61950,61951],{"class":82},"      margin-right",[68,61953,51638],{"class":335},[68,61955,1033],{"class":82},[68,61957,51693],{"class":331},[68,61959,1498],{"class":335},[68,61961,61962],{"class":70,"line":1956},[68,61963,2393],{"class":335},[68,61965,61966],{"class":70,"line":1961},[68,61967,2606],{"emptyLinePlaceholder":260},[68,61969,61970,61972,61975],{"class":70,"line":1966},[68,61971,61805],{"class":74},[68,61973,61974],{"class":51501}," textarea",[68,61976,15777],{"class":335},[68,61978,61979,61982,61984,61986],{"class":70,"line":1971},[68,61980,61981],{"class":82},"      outline",[68,61983,51638],{"class":335},[68,61985,54938],{"class":82},[68,61987,1498],{"class":335},[68,61989,61990,61993,61995,61998],{"class":70,"line":1985},[68,61991,61992],{"class":82},"      border-color",[68,61994,51638],{"class":335},[68,61996,61997],{"class":82},"transparent",[68,61999,1498],{"class":335},[68,62001,62002,62005,62007,62009],{"class":70,"line":1990},[68,62003,62004],{"class":82},"      resize",[68,62006,51638],{"class":335},[68,62008,54938],{"class":82},[68,62010,1498],{"class":335},[68,62012,62013,62015,62017,62020],{"class":70,"line":2783},[68,62014,61922],{"class":82},[68,62016,51638],{"class":335},[68,62018,62019],{"class":82},"#f5f5f5",[68,62021,1498],{"class":335},[68,62023,62024,62026,62028,62030,62032],{"class":70,"line":2797},[68,62025,55335],{"class":82},[68,62027,51638],{"class":335},[68,62029,626],{"class":82},[68,62031,51693],{"class":331},[68,62033,1498],{"class":335},[68,62035,62036,62039,62041,62043],{"class":70,"line":2805},[68,62037,62038],{"class":82},"      flex",[68,62040,51638],{"class":335},[68,62042,551],{"class":82},[68,62044,1498],{"class":335},[68,62046,62047,62049,62051,62053,62055],{"class":70,"line":2810},[68,62048,54896],{"class":82},[68,62050,51638],{"class":335},[68,62052,779],{"class":82},[68,62054,51693],{"class":331},[68,62056,1498],{"class":335},[68,62058,62059,62062,62064,62066,62069,62071],{"class":70,"line":2816},[68,62060,62061],{"class":82},"      transition",[68,62063,51638],{"class":335},[68,62065,28325],{"class":82},[68,62067,62068],{"class":82}," 0.5",[68,62070,1028],{"class":331},[68,62072,1498],{"class":335},[68,62074,62075,62077,62079,62081,62083],{"class":70,"line":2822},[68,62076,54986],{"class":82},[68,62078,51638],{"class":335},[68,62080,1284],{"class":82},[68,62082,51693],{"class":331},[68,62084,1498],{"class":335},[68,62086,62087],{"class":70,"line":2827},[68,62088,2393],{"class":335},[68,62090,62091],{"class":70,"line":8153},[68,62092,2606],{"emptyLinePlaceholder":260},[68,62094,62095,62097,62099,62102],{"class":70,"line":8177},[68,62096,61805],{"class":74},[68,62098,61974],{"class":51501},[68,62100,62101],{"class":74},":focus",[68,62103,15777],{"class":335},[68,62105,62106,62108,62110,62113],{"class":70,"line":8182},[68,62107,61992],{"class":82},[68,62109,51638],{"class":335},[68,62111,62112],{"class":82},"#e4e4e4",[68,62114,1498],{"class":335},[68,62116,62117,62119,62121,62123],{"class":70,"line":8188},[68,62118,61922],{"class":82},[68,62120,51638],{"class":335},[68,62122,61043],{"class":82},[68,62124,1498],{"class":335},[68,62126,62127,62129,62131,62133,62135],{"class":70,"line":8215},[68,62128,54986],{"class":82},[68,62130,51638],{"class":335},[68,62132,989],{"class":82},[68,62134,51693],{"class":331},[68,62136,1498],{"class":335},[68,62138,62139],{"class":70,"line":8220},[68,62140,2393],{"class":335},[68,62142,62143],{"class":70,"line":8226},[68,62144,2606],{"emptyLinePlaceholder":260},[68,62146,62147,62149,62151],{"class":70,"line":8238},[68,62148,61805],{"class":74},[68,62150,57668],{"class":51501},[68,62152,15777],{"class":335},[68,62154,62155,62157,62159,62162],{"class":70,"line":8250},[68,62156,61922],{"class":82},[68,62158,51638],{"class":335},[68,62160,62161],{"class":82},"#00aeec",[68,62163,1498],{"class":335},[68,62165,62166,62168,62170,62172],{"class":70,"line":8262},[68,62167,57617],{"class":82},[68,62169,51638],{"class":335},[68,62171,61043],{"class":82},[68,62173,1498],{"class":335},[68,62175,62176,62179,62181,62183],{"class":70,"line":9921},[68,62177,62178],{"class":82},"      border",[68,62180,51638],{"class":335},[68,62182,54938],{"class":82},[68,62184,1498],{"class":335},[68,62186,62187,62189,62191,62193,62195],{"class":70,"line":9946},[68,62188,55335],{"class":82},[68,62190,51638],{"class":335},[68,62192,626],{"class":82},[68,62194,51693],{"class":331},[68,62196,1498],{"class":335},[68,62198,62199,62202,62204,62206,62208],{"class":70,"line":9969},[68,62200,62201],{"class":82},"      margin-left",[68,62203,51638],{"class":335},[68,62205,779],{"class":82},[68,62207,51693],{"class":331},[68,62209,1498],{"class":335},[68,62211,62212,62214,62216,62218,62220],{"class":70,"line":9993},[68,62213,54972],{"class":82},[68,62215,51638],{"class":335},[68,62217,689],{"class":82},[68,62219,51693],{"class":331},[68,62221,1498],{"class":335},[68,62223,62224,62227,62229,62232],{"class":70,"line":9998},[68,62225,62226],{"class":82},"      cursor",[68,62228,51638],{"class":335},[68,62230,62231],{"class":82},"pointer",[68,62233,1498],{"class":335},[68,62235,62236],{"class":70,"line":10003},[68,62237,2393],{"class":335},[68,62239,62240],{"class":70,"line":10008},[68,62241,2606],{"emptyLinePlaceholder":260},[68,62243,62244,62246,62249],{"class":70,"line":10017},[68,62245,61805],{"class":74},[68,62247,62248],{"class":74}," .total",[68,62250,15777],{"class":335},[68,62252,62253,62255,62257,62259,62261],{"class":70,"line":10022},[68,62254,61951],{"class":82},[68,62256,51638],{"class":335},[68,62258,945],{"class":82},[68,62260,51693],{"class":331},[68,62262,1498],{"class":335},[68,62264,62265,62267,62269,62272],{"class":70,"line":10028},[68,62266,57617],{"class":82},[68,62268,51638],{"class":335},[68,62270,62271],{"class":82},"#999",[68,62273,1498],{"class":335},[68,62275,62276,62279,62281,62283,62285],{"class":70,"line":10049},[68,62277,62278],{"class":82},"      margin-top",[68,62280,51638],{"class":335},[68,62282,652],{"class":82},[68,62284,51693],{"class":331},[68,62286,1498],{"class":335},[68,62288,62289,62292,62294,62296],{"class":70,"line":10055},[68,62290,62291],{"class":82},"      opacity",[68,62293,51638],{"class":335},[68,62295,525],{"class":82},[68,62297,1498],{"class":335},[68,62299,62300,62302,62304,62306,62308,62310],{"class":70,"line":10069},[68,62301,62061],{"class":82},[68,62303,51638],{"class":335},[68,62305,28325],{"class":82},[68,62307,62068],{"class":82},[68,62309,1028],{"class":331},[68,62311,1498],{"class":335},[68,62313,62314],{"class":70,"line":10075},[68,62315,2393],{"class":335},[68,62317,62318],{"class":70,"line":10102},[68,62319,2606],{"emptyLinePlaceholder":260},[68,62321,62322,62325],{"class":70,"line":10111},[68,62323,62324],{"class":74},"    .list",[68,62326,15777],{"class":335},[68,62328,62329,62331,62333,62335,62337],{"class":70,"line":10117},[68,62330,61812],{"class":82},[68,62332,51638],{"class":335},[68,62334,4193],{"class":82},[68,62336,51693],{"class":331},[68,62338,1498],{"class":335},[68,62340,62341,62343,62345,62347,62349],{"class":70,"line":10125},[68,62342,61825],{"class":82},[68,62344,51638],{"class":335},[68,62346,61830],{"class":82},[68,62348,51693],{"class":331},[68,62350,1498],{"class":335},[68,62352,62353,62355,62357,62359],{"class":70,"line":10130},[68,62354,55210],{"class":82},[68,62356,51638],{"class":335},[68,62358,51678],{"class":82},[68,62360,1498],{"class":335},[68,62362,62363],{"class":70,"line":16809},[68,62364,2393],{"class":335},[68,62366,62367],{"class":70,"line":16815},[68,62368,2606],{"emptyLinePlaceholder":260},[68,62370,62371,62373,62376],{"class":70,"line":16838},[68,62372,62324],{"class":74},[68,62374,62375],{"class":74}," .item",[68,62377,15777],{"class":335},[68,62379,62380,62382,62384,62386,62388],{"class":70,"line":16844},[68,62381,54972],{"class":82},[68,62383,51638],{"class":335},[68,62385,644],{"class":82},[68,62387,661],{"class":331},[68,62389,1498],{"class":335},[68,62391,62392,62394,62396,62398],{"class":70,"line":16867},[68,62393,55210],{"class":82},[68,62395,51638],{"class":335},[68,62397,51678],{"class":82},[68,62399,1498],{"class":335},[68,62401,62402],{"class":70,"line":16881},[68,62403,2393],{"class":335},[68,62405,62406],{"class":70,"line":16901},[68,62407,2606],{"emptyLinePlaceholder":260},[68,62409,62410,62412,62414,62417],{"class":70,"line":16907},[68,62411,62324],{"class":74},[68,62413,62375],{"class":74},[68,62415,62416],{"class":74}," .info",[68,62418,15777],{"class":335},[68,62420,62421,62423,62425,62427],{"class":70,"line":16918},[68,62422,62038],{"class":82},[68,62424,51638],{"class":335},[68,62426,551],{"class":82},[68,62428,1498],{"class":335},[68,62430,62431,62434,62436,62438,62440,62443,62446],{"class":70,"line":16941},[68,62432,62433],{"class":82},"      border-bottom",[68,62435,51638],{"class":335},[68,62437,551],{"class":82},[68,62439,51693],{"class":331},[68,62441,62442],{"class":82}," dashed",[68,62444,62445],{"class":82}," #e4e4e4",[68,62447,1498],{"class":335},[68,62449,62450,62453,62455,62457,62459],{"class":70,"line":16963},[68,62451,62452],{"class":82},"      padding-bottom",[68,62454,51638],{"class":335},[68,62456,779],{"class":82},[68,62458,51693],{"class":331},[68,62460,1498],{"class":335},[68,62462,62463],{"class":70,"line":16968},[68,62464,2393],{"class":335},[68,62466,62467],{"class":70,"line":16974},[68,62468,2606],{"emptyLinePlaceholder":260},[68,62470,62471,62473,62475,62477],{"class":70,"line":16988},[68,62472,62324],{"class":74},[68,62474,62375],{"class":74},[68,62476,7030],{"class":51501},[68,62478,15777],{"class":335},[68,62480,62481,62483,62485,62487],{"class":70,"line":17001},[68,62482,54907],{"class":82},[68,62484,51638],{"class":335},[68,62486,525],{"class":82},[68,62488,1498],{"class":335},[68,62490,62491],{"class":70,"line":17006},[68,62492,2393],{"class":335},[68,62494,62495],{"class":70,"line":17020},[68,62496,2606],{"emptyLinePlaceholder":260},[68,62498,62499,62501,62503,62506],{"class":70,"line":17025},[68,62500,62324],{"class":74},[68,62502,62375],{"class":74},[68,62504,62505],{"class":74}," .name",[68,62507,15777],{"class":335},[68,62509,62510,62512,62514,62517],{"class":70,"line":17031},[68,62511,57617],{"class":82},[68,62513,51638],{"class":335},[68,62515,62516],{"class":82},"#FB7299",[68,62518,1498],{"class":335},[68,62520,62521,62523,62525,62527,62529],{"class":70,"line":17036},[68,62522,55123],{"class":82},[68,62524,51638],{"class":335},[68,62526,882],{"class":82},[68,62528,51693],{"class":331},[68,62530,1498],{"class":335},[68,62532,62533,62536,62538,62541],{"class":70,"line":17050},[68,62534,62535],{"class":82},"      font-weight",[68,62537,51638],{"class":335},[68,62539,62540],{"class":82},"bold",[68,62542,1498],{"class":335},[68,62544,62545],{"class":70,"line":17055},[68,62546,2393],{"class":335},[68,62548,62549],{"class":70,"line":17060},[68,62550,2606],{"emptyLinePlaceholder":260},[68,62552,62553,62555,62557,62560],{"class":70,"line":17074},[68,62554,62324],{"class":74},[68,62556,62375],{"class":74},[68,62558,62559],{"class":74}," .text",[68,62561,15777],{"class":335},[68,62563,62564,62566,62568,62571],{"class":70,"line":17086},[68,62565,57617],{"class":82},[68,62567,51638],{"class":335},[68,62569,62570],{"class":82},"#333",[68,62572,1498],{"class":335},[68,62574,62575,62577,62579,62581,62583,62585],{"class":70,"line":17091},[68,62576,54896],{"class":82},[68,62578,51638],{"class":335},[68,62580,779],{"class":82},[68,62582,51693],{"class":331},[68,62584,4299],{"class":82},[68,62586,1498],{"class":335},[68,62588,62589],{"class":70,"line":17104},[68,62590,2393],{"class":335},[68,62592,62593],{"class":70,"line":17109},[68,62594,2606],{"emptyLinePlaceholder":260},[68,62596,62597,62599,62601,62604],{"class":70,"line":17114},[68,62598,62324],{"class":74},[68,62600,62375],{"class":74},[68,62602,62603],{"class":74}," .time",[68,62605,15777],{"class":335},[68,62607,62608,62610,62612,62614],{"class":70,"line":17119},[68,62609,57617],{"class":82},[68,62611,51638],{"class":335},[68,62613,62271],{"class":82},[68,62615,1498],{"class":335},[68,62617,62618,62620,62622,62624,62626],{"class":70,"line":17132},[68,62619,55123],{"class":82},[68,62621,51638],{"class":335},[68,62623,831],{"class":82},[68,62625,51693],{"class":331},[68,62627,1498],{"class":335},[68,62629,62630],{"class":70,"line":17137},[68,62631,2393],{"class":335},[68,62633,62634,62636,62638],{"class":70,"line":32834},[68,62635,52618],{"class":335},[68,62637,250],{"class":51501},[68,62639,51508],{"class":335},[68,62641,62642,62644,62646],{"class":70,"line":32840},[68,62643,51986],{"class":335},[68,62645,51535],{"class":51501},[68,62647,51508],{"class":335},[68,62649,62650],{"class":70,"line":32846},[68,62651,2606],{"emptyLinePlaceholder":260},[68,62653,62654,62656,62658],{"class":70,"line":32852},[68,62655,1243],{"class":335},[68,62657,52001],{"class":51501},[68,62659,51508],{"class":335},[68,62661,62662,62664,62666,62668,62670,62673],{"class":70,"line":32858},[68,62663,52345],{"class":335},[68,62665,51812],{"class":51501},[68,62667,53687],{"class":74},[68,62669,381],{"class":335},[68,62671,62672],{"class":78},"\"wrapper\"",[68,62674,51508],{"class":335},[68,62676,62677,62679,62681,62683,62685,62688,62690,62692],{"class":70,"line":32869},[68,62678,51542],{"class":335},[68,62680,774],{"class":51501},[68,62682,53687],{"class":74},[68,62684,381],{"class":335},[68,62686,62687],{"class":78},"\"avatar\"",[68,62689,55515],{"class":335},[68,62691,774],{"class":51501},[68,62693,51508],{"class":335},[68,62695,62696,62698,62700,62702,62704,62707,62709,62711,62714,62716,62718,62720,62723,62725,62728,62730,62732],{"class":70,"line":32875},[68,62697,51542],{"class":335},[68,62699,54489],{"class":51501},[68,62701,15164],{"class":74},[68,62703,381],{"class":335},[68,62705,62706],{"class":78},"\"tx\"",[68,62708,61221],{"class":74},[68,62710,381],{"class":335},[68,62712,62713],{"class":78},"\"发一条友善的评论\"",[68,62715,54512],{"class":74},[68,62717,381],{"class":335},[68,62719,3907],{"class":78},[68,62721,62722],{"class":74}," maxlength",[68,62724,381],{"class":335},[68,62726,62727],{"class":78},"\"200\"",[68,62729,55515],{"class":335},[68,62731,54489],{"class":51501},[68,62733,51508],{"class":335},[68,62735,62736,62738,62740,62743,62745],{"class":70,"line":32895},[68,62737,51542],{"class":335},[68,62739,54088],{"class":51501},[68,62741,62742],{"class":335},">发布\u003C\u002F",[68,62744,54088],{"class":51501},[68,62746,51508],{"class":335},[68,62748,62749,62751,62753],{"class":70,"line":32901},[68,62750,52618],{"class":335},[68,62752,51812],{"class":51501},[68,62754,51508],{"class":335},[68,62756,62757,62759,62761,62763,62765,62767],{"class":70,"line":32912},[68,62758,52345],{"class":335},[68,62760,51812],{"class":51501},[68,62762,53687],{"class":74},[68,62764,381],{"class":335},[68,62766,62672],{"class":78},[68,62768,51508],{"class":335},[68,62770,62771,62773,62775,62777,62779,62782,62785,62787],{"class":70,"line":32918},[68,62772,51542],{"class":335},[68,62774,68],{"class":51501},[68,62776,53687],{"class":74},[68,62778,381],{"class":335},[68,62780,62781],{"class":78},"\"total\"",[68,62783,62784],{"class":335},">0\u002F200字\u003C\u002F",[68,62786,68],{"class":51501},[68,62788,51508],{"class":335},[68,62790,62791,62793,62795],{"class":70,"line":32924},[68,62792,52618],{"class":335},[68,62794,51812],{"class":51501},[68,62796,51508],{"class":335},[68,62798,62799,62801,62803,62805,62807,62810],{"class":70,"line":32930},[68,62800,52345],{"class":335},[68,62802,51812],{"class":51501},[68,62804,53687],{"class":74},[68,62806,381],{"class":335},[68,62808,62809],{"class":78},"\"list\"",[68,62811,51508],{"class":335},[68,62813,62814,62816,62818,62820,62822,62825,62828,62830,62833],{"class":70,"line":32936},[68,62815,51542],{"class":335},[68,62817,51812],{"class":51501},[68,62819,53687],{"class":74},[68,62821,381],{"class":335},[68,62823,62824],{"class":78},"\"item\"",[68,62826,62827],{"class":74}," style",[68,62829,381],{"class":335},[68,62831,62832],{"class":78},"\"display: none;\"",[68,62834,51508],{"class":335},[68,62836,62837,62839,62841,62843,62845,62847,62849,62851],{"class":70,"line":32942},[68,62838,55435],{"class":335},[68,62840,774],{"class":51501},[68,62842,53687],{"class":74},[68,62844,381],{"class":335},[68,62846,62687],{"class":78},[68,62848,55515],{"class":335},[68,62850,774],{"class":51501},[68,62852,51508],{"class":335},[68,62854,62855,62857,62859,62861,62863,62866],{"class":70,"line":32948},[68,62856,55435],{"class":335},[68,62858,51812],{"class":51501},[68,62860,53687],{"class":74},[68,62862,381],{"class":335},[68,62864,62865],{"class":78},"\"info\"",[68,62867,51508],{"class":335},[68,62869,62870,62872,62874,62876,62878,62881,62884,62886],{"class":70,"line":32954},[68,62871,55503],{"class":335},[68,62873,19],{"class":51501},[68,62875,53687],{"class":74},[68,62877,381],{"class":335},[68,62879,62880],{"class":78},"\"name\"",[68,62882,62883],{"class":335},">清风徐来\u003C\u002F",[68,62885,19],{"class":51501},[68,62887,51508],{"class":335},[68,62889,62890,62892,62894,62896,62898,62901,62904,62906],{"class":70,"line":32974},[68,62891,55503],{"class":335},[68,62893,19],{"class":51501},[68,62895,53687],{"class":74},[68,62897,381],{"class":335},[68,62899,62900],{"class":78},"\"text\"",[68,62902,62903],{"class":335},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[68,62905,19],{"class":51501},[68,62907,51508],{"class":335},[68,62909,62910,62912,62914,62916,62918,62921,62924,62926],{"class":70,"line":32980},[68,62911,55503],{"class":335},[68,62913,19],{"class":51501},[68,62915,53687],{"class":74},[68,62917,381],{"class":335},[68,62919,62920],{"class":78},"\"time\"",[68,62922,62923],{"class":335},">2022-10-10 20:29:21\u003C\u002F",[68,62925,19],{"class":51501},[68,62927,51508],{"class":335},[68,62929,62930,62932,62934],{"class":70,"line":32996},[68,62931,55608],{"class":335},[68,62933,51812],{"class":51501},[68,62935,51508],{"class":335},[68,62937,62938,62940,62942],{"class":70,"line":33002},[68,62939,51977],{"class":335},[68,62941,51812],{"class":51501},[68,62943,51508],{"class":335},[68,62945,62946,62948,62950],{"class":70,"line":33016},[68,62947,52618],{"class":335},[68,62949,51812],{"class":51501},[68,62951,51508],{"class":335},[68,62953,62954,62956,62958],{"class":70,"line":33022},[68,62955,52345],{"class":335},[68,62957,52014],{"class":51501},[68,62959,51508],{"class":335},[68,62961,62962,62964,62967,62969,62971,62973,62975,62978],{"class":70,"line":33037},[68,62963,11426],{"class":331},[68,62965,62966],{"class":82}," tx",[68,62968,13769],{"class":331},[68,62970,54597],{"class":335},[68,62972,54600],{"class":74},[68,62974,336],{"class":335},[68,62976,62977],{"class":78},"'#tx'",[68,62979,342],{"class":335},[68,62981,62982,62984,62987,62989,62991,62993,62995,62998],{"class":70,"line":33043},[68,62983,11426],{"class":331},[68,62985,62986],{"class":82}," total",[68,62988,13769],{"class":331},[68,62990,54597],{"class":335},[68,62992,54600],{"class":74},[68,62994,336],{"class":335},[68,62996,62997],{"class":78},"'.total'",[68,62999,342],{"class":335},[68,63001,63002],{"class":70,"line":33052},[68,63003,63004],{"class":393},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[68,63006,63007,63010,63012,63014,63016,63018,63020],{"class":70,"line":33058},[68,63008,63009],{"class":335},"    tx.",[68,63011,58014],{"class":74},[68,63013,336],{"class":335},[68,63015,61528],{"class":78},[68,63017,12640],{"class":335},[68,63019,54650],{"class":331},[68,63021,54653],{"class":335},[68,63023,63024,63027,63029],{"class":70,"line":33067},[68,63025,63026],{"class":335},"      total.style.opacity ",[68,63028,381],{"class":331},[68,63030,55900],{"class":82},[68,63032,63033],{"class":70,"line":33073},[68,63034,33662],{"class":335},[68,63036,63037],{"class":70,"line":33079},[68,63038,63039],{"class":393},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[68,63041,63042,63044,63046,63048,63050,63052,63054],{"class":70,"line":33088},[68,63043,63009],{"class":335},[68,63045,58014],{"class":74},[68,63047,336],{"class":335},[68,63049,61589],{"class":78},[68,63051,12640],{"class":335},[68,63053,54650],{"class":331},[68,63055,54653],{"class":335},[68,63057,63058,63060,63062],{"class":70,"line":33094},[68,63059,63026],{"class":335},[68,63061,381],{"class":331},[68,63063,47534],{"class":82},[68,63065,63066],{"class":70,"line":33105},[68,63067,33662],{"class":335},[68,63069,63070],{"class":70,"line":33111},[68,63071,63072],{"class":393},"    \u002F\u002F 3. 检测用户输入\n",[68,63074,63075,63077,63079,63081,63084,63086,63088],{"class":70,"line":33130},[68,63076,63009],{"class":335},[68,63078,58014],{"class":74},[68,63080,336],{"class":335},[68,63082,63083],{"class":78},"'input'",[68,63085,12640],{"class":335},[68,63087,54650],{"class":331},[68,63089,54653],{"class":335},[68,63091,63092],{"class":70,"line":33136},[68,63093,63094],{"class":393},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[68,63096,63097,63100,63102,63105,63108,63110,63113,63115,63117],{"class":70,"line":33147},[68,63098,63099],{"class":335},"      total.innerHTML ",[68,63101,381],{"class":331},[68,63103,63104],{"class":78}," `${",[68,63106,63107],{"class":335},"tx",[68,63109,891],{"class":78},[68,63111,63112],{"class":335},"value",[68,63114,891],{"class":78},[68,63116,52169],{"class":82},[68,63118,63119],{"class":78},"}\u002F200字`\n",[68,63121,63122],{"class":70,"line":33153},[68,63123,33662],{"class":335},[68,63125,63126],{"class":70,"line":33173},[68,63127,2606],{"emptyLinePlaceholder":260},[68,63129,63130],{"class":70,"line":33189},[68,63131,63132],{"class":393},"    \u002F\u002F const str = 'andy'\n",[68,63134,63135],{"class":70,"line":33195},[68,63136,63137],{"class":393},"    \u002F\u002F console.log(str.length)\n",[68,63139,63140,63142,63144],{"class":70,"line":33209},[68,63141,52618],{"class":335},[68,63143,52014],{"class":51501},[68,63145,51508],{"class":335},[68,63147,63148,63150,63152],{"class":70,"line":33215},[68,63149,51986],{"class":335},[68,63151,52001],{"class":51501},[68,63153,51508],{"class":335},[68,63155,63156],{"class":70,"line":33221},[68,63157,2606],{"emptyLinePlaceholder":260},[68,63159,63160,63162,63164],{"class":70,"line":33232},[68,63161,51986],{"class":335},[68,63163,50836],{"class":51501},[68,63165,51508],{"class":335},[22203,63167,63169],{"id":63168},"_3254-change事件","3.2.5.4 change事件",[19,63171,63172],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63174,63175],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63177,63178],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[58,63180,63182],{"className":50834,"code":63181,"language":50836,"meta":63,"style":63},"\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",[65,63183,63184,63194,63208,63212,63220,63234,63254,63266,63274,63278,63286,63300,63308,63326,63344,63356,63360,63368,63376,63380],{"__ignoreMap":63},[68,63185,63186,63188,63190,63192],{"class":70,"line":71},[68,63187,51498],{"class":335},[68,63189,51502],{"class":51501},[68,63191,51505],{"class":74},[68,63193,51508],{"class":335},[68,63195,63196,63198,63200,63202,63204,63206],{"class":70,"line":92},[68,63197,1243],{"class":335},[68,63199,50836],{"class":51501},[68,63201,51517],{"class":74},[68,63203,381],{"class":335},[68,63205,51522],{"class":78},[68,63207,51508],{"class":335},[68,63209,63210],{"class":70,"line":1387},[68,63211,2606],{"emptyLinePlaceholder":260},[68,63213,63214,63216,63218],{"class":70,"line":1402},[68,63215,1243],{"class":335},[68,63217,51535],{"class":51501},[68,63219,51508],{"class":335},[68,63221,63222,63224,63226,63228,63230,63232],{"class":70,"line":1408},[68,63223,52345],{"class":335},[68,63225,51545],{"class":51501},[68,63227,51548],{"class":74},[68,63229,381],{"class":335},[68,63231,51553],{"class":78},[68,63233,51508],{"class":335},[68,63235,63236,63238,63240,63242,63244,63246,63248,63250,63252],{"class":70,"line":1422},[68,63237,52345],{"class":335},[68,63239,51545],{"class":51501},[68,63241,15125],{"class":74},[68,63243,381],{"class":335},[68,63245,51592],{"class":78},[68,63247,51572],{"class":74},[68,63249,381],{"class":335},[68,63251,51599],{"class":78},[68,63253,51508],{"class":335},[68,63255,63256,63258,63260,63262,63264],{"class":70,"line":1428},[68,63257,52345],{"class":335},[68,63259,51608],{"class":51501},[68,63261,51611],{"class":335},[68,63263,51608],{"class":51501},[68,63265,51508],{"class":335},[68,63267,63268,63270,63272],{"class":70,"line":1519},[68,63269,51986],{"class":335},[68,63271,51535],{"class":51501},[68,63273,51508],{"class":335},[68,63275,63276],{"class":70,"line":1525},[68,63277,2606],{"emptyLinePlaceholder":260},[68,63279,63280,63282,63284],{"class":70,"line":1537},[68,63281,1243],{"class":335},[68,63283,52001],{"class":51501},[68,63285,51508],{"class":335},[68,63287,63288,63290,63292,63294,63296,63298],{"class":70,"line":1819},[68,63289,52345],{"class":335},[68,63291,54022],{"class":51501},[68,63293,54025],{"class":74},[68,63295,381],{"class":335},[68,63297,62900],{"class":78},[68,63299,51508],{"class":335},[68,63301,63302,63304,63306],{"class":70,"line":1824},[68,63303,52345],{"class":335},[68,63305,52014],{"class":51501},[68,63307,51508],{"class":335},[68,63309,63310,63312,63314,63316,63318,63320,63322,63324],{"class":70,"line":1830},[68,63311,11426],{"class":331},[68,63313,60806],{"class":82},[68,63315,13769],{"class":331},[68,63317,54597],{"class":335},[68,63319,54600],{"class":74},[68,63321,336],{"class":335},[68,63323,63083],{"class":78},[68,63325,342],{"class":335},[68,63327,63328,63331,63333,63335,63338,63340,63342],{"class":70,"line":1835},[68,63329,63330],{"class":335},"    input.",[68,63332,58014],{"class":74},[68,63334,336],{"class":335},[68,63336,63337],{"class":78},"'change'",[68,63339,12640],{"class":335},[68,63341,54650],{"class":331},[68,63343,54653],{"class":335},[68,63345,63346,63348,63350,63352,63354],{"class":70,"line":1849},[68,63347,58445],{"class":335},[68,63349,58448],{"class":74},[68,63351,336],{"class":335},[68,63353,926],{"class":82},[68,63355,342],{"class":335},[68,63357,63358],{"class":70,"line":1854},[68,63359,33662],{"class":335},[68,63361,63362,63364,63366],{"class":70,"line":1860},[68,63363,52618],{"class":335},[68,63365,52014],{"class":51501},[68,63367,51508],{"class":335},[68,63369,63370,63372,63374],{"class":70,"line":1881},[68,63371,51986],{"class":335},[68,63373,52001],{"class":51501},[68,63375,51508],{"class":335},[68,63377,63378],{"class":70,"line":1886},[68,63379,2606],{"emptyLinePlaceholder":260},[68,63381,63382,63384,63386],{"class":70,"line":1900},[68,63383,51986],{"class":335},[68,63385,50836],{"class":51501},[68,63387,51508],{"class":335},[19,63389,63390],{},"总结：内容发生改变才回去触发",[301,63392,63394],{"id":63393},"_326-事件对象","3.2.6 事件对象",[22203,63396,63398],{"id":63397},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63400,63401],{},[48,63402],{"alt":63,"src":63403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63405,63406],{},[48,63407],{"alt":63,"src":63408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63410,63411],{},"点击一次，就输出了事件对象，它是个对象",[19,63413,63414],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63416,63417],{},[48,63418],{"alt":63,"src":63419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22203,63421,63423],{"id":63422},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63425,63426],{},[48,63427],{"alt":63,"src":63428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63430,63431],{},"实现按特殊字符才是实现打印输出效果：",[58,63433,63435],{"className":53268,"code":63434,"language":53270,"meta":63,"style":63},"\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",[65,63436,63437,63445,63450,63464,63472,63477,63482,63487,63492,63497,63502,63507,63512,63517,63521,63525,63533],{"__ignoreMap":63},[68,63438,63439,63441,63443],{"class":70,"line":71},[68,63440,1243],{"class":335},[68,63442,52001],{"class":51501},[68,63444,51508],{"class":335},[68,63446,63447],{"class":70,"line":92},[68,63448,63449],{"class":393},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[68,63451,63452,63454,63456,63458,63460,63462],{"class":70,"line":1387},[68,63453,52345],{"class":335},[68,63455,54022],{"class":51501},[68,63457,54025],{"class":74},[68,63459,381],{"class":335},[68,63461,62900],{"class":78},[68,63463,51508],{"class":335},[68,63465,63466,63468,63470],{"class":70,"line":1402},[68,63467,52345],{"class":335},[68,63469,52014],{"class":51501},[68,63471,51508],{"class":335},[68,63473,63474],{"class":70,"line":1408},[68,63475,63476],{"class":335},"    \u002F\u002F const btn = document.querySelector('button')\n",[68,63478,63479],{"class":70,"line":1422},[68,63480,63481],{"class":335},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[68,63483,63484],{"class":70,"line":1428},[68,63485,63486],{"class":335},"    \u002F\u002F   console.log(e);\n",[68,63488,63489],{"class":70,"line":1519},[68,63490,63491],{"class":335},"    \u002F\u002F })\n",[68,63493,63494],{"class":70,"line":1525},[68,63495,63496],{"class":335},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[68,63498,63499],{"class":70,"line":1537},[68,63500,63501],{"class":335},"    const input = document.querySelector('input')\n",[68,63503,63504],{"class":70,"line":1819},[68,63505,63506],{"class":335},"    input.addEventListener('keyup', function (e) {\n",[68,63508,63509],{"class":70,"line":1824},[68,63510,63511],{"class":335},"      if (e.key === 'Enter') {\n",[68,63513,63514],{"class":70,"line":1830},[68,63515,63516],{"class":335},"        console.log('我按下了回车键')\n",[68,63518,63519],{"class":70,"line":1835},[68,63520,52599],{"class":335},[68,63522,63523],{"class":70,"line":1849},[68,63524,33662],{"class":335},[68,63526,63527,63529,63531],{"class":70,"line":1854},[68,63528,52618],{"class":335},[68,63530,52014],{"class":51501},[68,63532,51508],{"class":335},[68,63534,63535,63537,63539],{"class":70,"line":1860},[68,63536,51986],{"class":335},[68,63538,52001],{"class":51501},[68,63540,51508],{"class":335},[22203,63542,63544],{"id":63543},"_3263-trim方法","3.2.6.3 trim方法",[19,63546,63547],{},[48,63548],{"alt":63,"src":63549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63551,63552],{},[48,63553],{"alt":63,"src":63554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63556,63557],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63559,63560],{},"str.trim()",[301,63562,63564],{"id":63563},"_327-环境对象","3.2.7 环境对象",[19,63566,63567],{},[48,63568],{"alt":63,"src":63569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63571,63572],{},[48,63573],{"alt":63,"src":63574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63576,63577],{},[48,63578],{"alt":63,"src":63579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63581,63582],{},"实际函数调用是window.fn()",[19,63584,63585],{},"普通函数里面this指向的是window",[42,63587,63588,63591,63594],{},[26,63589,63590],{},"在普通函数下，this指向的是window",[26,63592,63593],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[26,63595,63596],{},"箭头函数没有this",[19,63598,63599],{},"粗略记法就是：谁调用，this就指向谁",[19,63601,63602],{},[48,63603],{"alt":63,"src":63604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63606,63607],{},[48,63608],{"alt":63,"src":63609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63611,63612],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63614,63615],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[58,63617,63619],{"className":53268,"code":63618,"language":53270,"meta":63,"style":63},"\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",[65,63620,63621,63629,63641,63649,63654,63659,63664,63669,63673,63681],{"__ignoreMap":63},[68,63622,63623,63625,63627],{"class":70,"line":71},[68,63624,1243],{"class":335},[68,63626,52001],{"class":51501},[68,63628,51508],{"class":335},[68,63630,63631,63633,63635,63637,63639],{"class":70,"line":92},[68,63632,52345],{"class":335},[68,63634,54088],{"class":51501},[68,63636,54094],{"class":335},[68,63638,54088],{"class":51501},[68,63640,51508],{"class":335},[68,63642,63643,63645,63647],{"class":70,"line":1387},[68,63644,52345],{"class":335},[68,63646,52014],{"class":51501},[68,63648,51508],{"class":335},[68,63650,63651],{"class":70,"line":1402},[68,63652,63653],{"class":335},"    const button = document.querySelector('button')\n",[68,63655,63656],{"class":70,"line":1408},[68,63657,63658],{"class":335},"    button.addEventListener('click', function () {\n",[68,63660,63661],{"class":70,"line":1422},[68,63662,63663],{"class":335},"      \u002F\u002F console.log(this);\n",[68,63665,63666],{"class":70,"line":1428},[68,63667,63668],{"class":335},"      this.style.color = 'pink'\n",[68,63670,63671],{"class":70,"line":1519},[68,63672,33662],{"class":335},[68,63674,63675,63677,63679],{"class":70,"line":1525},[68,63676,52618],{"class":335},[68,63678,52014],{"class":51501},[68,63680,51508],{"class":335},[68,63682,63683,63685,63687],{"class":70,"line":1537},[68,63684,51986],{"class":335},[68,63686,52001],{"class":51501},[68,63688,51508],{"class":335},[301,63690,63692],{"id":63691},"_328-回调函数","3.2.8 回调函数",[19,63694,63695],{},[48,63696],{"alt":63,"src":63697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63699,63700],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63702,11537],{},[42,63704,63705,63708,63711],{},[26,63706,63707],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[26,63709,63710],{},"回调函数本质还是函数，只不过把它当成参数使用",[26,63712,63713],{},"使用匿名函数做为回调函数比较常见",[301,63715,63717],{"id":63716},"_329-tab栏切换","3.2.9 tab栏切换",[19,63719,63720],{},[48,63721],{"alt":63,"src":63722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[58,63724,63726],{"className":50834,"code":63725,"language":50836,"meta":63,"style":63},"\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",[65,63727,63728,63738,63752,63756,63764,63778,63798,63818,63831,63839,63845,63855,63865,63869,63873,63880,63893,63906,63918,63934,63938,63942,63949,63961,63973,63985,63995,64005,64009,64013,64022,64034,64045,64057,64061,64065,64073,64083,64093,64103,64107,64111,64121,64135,64147,64151,64155,64167,64178,64195,64205,64209,64213,64228,64239,64249,64253,64257,64264,64279,64283,64287,64295,64305,64309,64313,64322,64332,64336,64344,64352,64356,64364,64379,64394,64407,64415,64449,64476,64503,64530,64557,64565,64573,64588,64625,64660,64695,64730,64765,64773,64781,64789,64794,64799,64819,64824,64853,64858,64863,64881,64886,64891,64896,64918,64923,64939,64943,64948,64953,64974,64979,65008,65012,65017,65021,65029,65037,65041],{"__ignoreMap":63},[68,63729,63730,63732,63734,63736],{"class":70,"line":71},[68,63731,51498],{"class":335},[68,63733,51502],{"class":51501},[68,63735,51505],{"class":74},[68,63737,51508],{"class":335},[68,63739,63740,63742,63744,63746,63748,63750],{"class":70,"line":92},[68,63741,1243],{"class":335},[68,63743,50836],{"class":51501},[68,63745,51517],{"class":74},[68,63747,381],{"class":335},[68,63749,51522],{"class":78},[68,63751,51508],{"class":335},[68,63753,63754],{"class":70,"line":1387},[68,63755,2606],{"emptyLinePlaceholder":260},[68,63757,63758,63760,63762],{"class":70,"line":1402},[68,63759,1243],{"class":335},[68,63761,51535],{"class":51501},[68,63763,51508],{"class":335},[68,63765,63766,63768,63770,63772,63774,63776],{"class":70,"line":1408},[68,63767,52345],{"class":335},[68,63769,51545],{"class":51501},[68,63771,51548],{"class":74},[68,63773,381],{"class":335},[68,63775,51553],{"class":78},[68,63777,59328],{"class":335},[68,63779,63780,63782,63784,63786,63788,63790,63792,63794,63796],{"class":70,"line":1422},[68,63781,52345],{"class":335},[68,63783,51545],{"class":51501},[68,63785,51564],{"class":74},[68,63787,381],{"class":335},[68,63789,51569],{"class":78},[68,63791,51572],{"class":74},[68,63793,381],{"class":335},[68,63795,51577],{"class":78},[68,63797,59328],{"class":335},[68,63799,63800,63802,63804,63806,63808,63810,63812,63814,63816],{"class":70,"line":1428},[68,63801,52345],{"class":335},[68,63803,51545],{"class":51501},[68,63805,15125],{"class":74},[68,63807,381],{"class":335},[68,63809,51592],{"class":78},[68,63811,51572],{"class":74},[68,63813,381],{"class":335},[68,63815,51599],{"class":78},[68,63817,59328],{"class":335},[68,63819,63820,63822,63824,63827,63829],{"class":70,"line":1519},[68,63821,52345],{"class":335},[68,63823,51608],{"class":51501},[68,63825,63826],{"class":335},">tab栏切换\u003C\u002F",[68,63828,51608],{"class":51501},[68,63830,51508],{"class":335},[68,63832,63833,63835,63837],{"class":70,"line":1525},[68,63834,52345],{"class":335},[68,63836,250],{"class":51501},[68,63838,51508],{"class":335},[68,63840,63841,63843],{"class":70,"line":1537},[68,63842,6608],{"class":51501},[68,63844,15777],{"class":335},[68,63846,63847,63849,63851,63853],{"class":70,"line":1819},[68,63848,54907],{"class":82},[68,63850,51638],{"class":335},[68,63852,525],{"class":82},[68,63854,1498],{"class":335},[68,63856,63857,63859,63861,63863],{"class":70,"line":1824},[68,63858,54896],{"class":82},[68,63860,51638],{"class":335},[68,63862,525],{"class":82},[68,63864,1498],{"class":335},[68,63866,63867],{"class":70,"line":1830},[68,63868,2393],{"class":335},[68,63870,63871],{"class":70,"line":1835},[68,63872,2606],{"emptyLinePlaceholder":260},[68,63874,63875,63878],{"class":70,"line":1849},[68,63876,63877],{"class":74},"    .tab",[68,63879,15777],{"class":335},[68,63881,63882,63884,63886,63889,63891],{"class":70,"line":1854},[68,63883,54972],{"class":82},[68,63885,51638],{"class":335},[68,63887,63888],{"class":82},"590",[68,63890,51693],{"class":331},[68,63892,1498],{"class":335},[68,63894,63895,63897,63899,63902,63904],{"class":70,"line":1860},[68,63896,54986],{"class":82},[68,63898,51638],{"class":335},[68,63900,63901],{"class":82},"340",[68,63903,51693],{"class":331},[68,63905,1498],{"class":335},[68,63907,63908,63910,63912,63914,63916],{"class":70,"line":1881},[68,63909,54907],{"class":82},[68,63911,51638],{"class":335},[68,63913,1033],{"class":82},[68,63915,51693],{"class":331},[68,63917,1498],{"class":335},[68,63919,63920,63922,63924,63926,63928,63930,63932],{"class":70,"line":1886},[68,63921,62178],{"class":82},[68,63923,51638],{"class":335},[68,63925,551],{"class":82},[68,63927,51693],{"class":331},[68,63929,51722],{"class":82},[68,63931,62445],{"class":82},[68,63933,1498],{"class":335},[68,63935,63936],{"class":70,"line":1900},[68,63937,2393],{"class":335},[68,63939,63940],{"class":70,"line":1905},[68,63941,2606],{"emptyLinePlaceholder":260},[68,63943,63944,63947],{"class":70,"line":1934},[68,63945,63946],{"class":74},"    .tab-nav",[68,63948,15777],{"class":335},[68,63950,63951,63953,63955,63957,63959],{"class":70,"line":1939},[68,63952,54972],{"class":82},[68,63954,51638],{"class":335},[68,63956,644],{"class":82},[68,63958,661],{"class":331},[68,63960,1498],{"class":335},[68,63962,63963,63965,63967,63969,63971],{"class":70,"line":1956},[68,63964,54986],{"class":82},[68,63966,51638],{"class":335},[68,63968,1240],{"class":82},[68,63970,51693],{"class":331},[68,63972,1498],{"class":335},[68,63974,63975,63977,63979,63981,63983],{"class":70,"line":1961},[68,63976,57560],{"class":82},[68,63978,51638],{"class":335},[68,63980,1240],{"class":82},[68,63982,51693],{"class":331},[68,63984,1498],{"class":335},[68,63986,63987,63989,63991,63993],{"class":70,"line":1966},[68,63988,55210],{"class":82},[68,63990,51638],{"class":335},[68,63992,51678],{"class":82},[68,63994,1498],{"class":335},[68,63996,63997,63999,64001,64003],{"class":70,"line":1971},[68,63998,55221],{"class":82},[68,64000,51638],{"class":335},[68,64002,51869],{"class":82},[68,64004,1498],{"class":335},[68,64006,64007],{"class":70,"line":1985},[68,64008,2393],{"class":335},[68,64010,64011],{"class":70,"line":1990},[68,64012,2606],{"emptyLinePlaceholder":260},[68,64014,64015,64017,64020],{"class":70,"line":2783},[68,64016,63946],{"class":74},[68,64018,64019],{"class":51501}," h3",[68,64021,15777],{"class":335},[68,64023,64024,64026,64028,64030,64032],{"class":70,"line":2797},[68,64025,55123],{"class":82},[68,64027,51638],{"class":335},[68,64029,1133],{"class":82},[68,64031,51693],{"class":331},[68,64033,1498],{"class":335},[68,64035,64036,64038,64040,64043],{"class":70,"line":2805},[68,64037,62535],{"class":82},[68,64039,51638],{"class":335},[68,64041,64042],{"class":82},"normal",[68,64044,1498],{"class":335},[68,64046,64047,64049,64051,64053,64055],{"class":70,"line":2810},[68,64048,62201],{"class":82},[68,64050,51638],{"class":335},[68,64052,1033],{"class":82},[68,64054,51693],{"class":331},[68,64056,1498],{"class":335},[68,64058,64059],{"class":70,"line":2816},[68,64060,2393],{"class":335},[68,64062,64063],{"class":70,"line":2822},[68,64064,2606],{"emptyLinePlaceholder":260},[68,64066,64067,64069,64071],{"class":70,"line":2827},[68,64068,63946],{"class":74},[68,64070,61493],{"class":51501},[68,64072,15777],{"class":335},[68,64074,64075,64077,64079,64081],{"class":70,"line":8153},[68,64076,54933],{"class":82},[68,64078,51638],{"class":335},[68,64080,54938],{"class":82},[68,64082,1498],{"class":335},[68,64084,64085,64087,64089,64091],{"class":70,"line":8177},[68,64086,55210],{"class":82},[68,64088,51638],{"class":335},[68,64090,51678],{"class":82},[68,64092,1498],{"class":335},[68,64094,64095,64097,64099,64101],{"class":70,"line":8182},[68,64096,55221],{"class":82},[68,64098,51638],{"class":335},[68,64100,51781],{"class":82},[68,64102,1498],{"class":335},[68,64104,64105],{"class":70,"line":8188},[68,64106,2393],{"class":335},[68,64108,64109],{"class":70,"line":8215},[68,64110,2606],{"emptyLinePlaceholder":260},[68,64112,64113,64115,64117,64119],{"class":70,"line":8220},[68,64114,63946],{"class":74},[68,64116,61493],{"class":51501},[68,64118,55276],{"class":51501},[68,64120,15777],{"class":335},[68,64122,64123,64125,64127,64129,64131,64133],{"class":70,"line":8226},[68,64124,54907],{"class":82},[68,64126,51638],{"class":335},[68,64128,525],{"class":82},[68,64130,9155],{"class":82},[68,64132,51693],{"class":331},[68,64134,1498],{"class":335},[68,64136,64137,64139,64141,64143,64145],{"class":70,"line":8238},[68,64138,55123],{"class":82},[68,64140,51638],{"class":335},[68,64142,882],{"class":82},[68,64144,51693],{"class":331},[68,64146,1498],{"class":335},[68,64148,64149],{"class":70,"line":8250},[68,64150,2393],{"class":335},[68,64152,64153],{"class":70,"line":8262},[68,64154,2606],{"emptyLinePlaceholder":260},[68,64156,64157,64159,64161,64163,64165],{"class":70,"line":9921},[68,64158,63946],{"class":74},[68,64160,61493],{"class":51501},[68,64162,55276],{"class":51501},[68,64164,1606],{"class":51501},[68,64166,15777],{"class":335},[68,64168,64169,64172,64174,64176],{"class":70,"line":9946},[68,64170,64171],{"class":82},"      text-decoration",[68,64173,51638],{"class":335},[68,64175,54938],{"class":82},[68,64177,1498],{"class":335},[68,64179,64180,64182,64184,64186,64188,64190,64193],{"class":70,"line":9969},[68,64181,62433],{"class":82},[68,64183,51638],{"class":335},[68,64185,412],{"class":82},[68,64187,51693],{"class":331},[68,64189,51722],{"class":82},[68,64191,64192],{"class":82}," transparent",[68,64194,1498],{"class":335},[68,64196,64197,64199,64201,64203],{"class":70,"line":9993},[68,64198,57617],{"class":82},[68,64200,51638],{"class":335},[68,64202,62570],{"class":82},[68,64204,1498],{"class":335},[68,64206,64207],{"class":70,"line":9998},[68,64208,2393],{"class":335},[68,64210,64211],{"class":70,"line":10003},[68,64212,2606],{"emptyLinePlaceholder":260},[68,64214,64215,64217,64219,64221,64223,64226],{"class":70,"line":10008},[68,64216,63946],{"class":74},[68,64218,61493],{"class":51501},[68,64220,55276],{"class":51501},[68,64222,1606],{"class":51501},[68,64224,64225],{"class":74},".active",[68,64227,15777],{"class":335},[68,64229,64230,64232,64234,64237],{"class":70,"line":10017},[68,64231,61992],{"class":82},[68,64233,51638],{"class":335},[68,64235,64236],{"class":82},"#e1251b",[68,64238,1498],{"class":335},[68,64240,64241,64243,64245,64247],{"class":70,"line":10022},[68,64242,57617],{"class":82},[68,64244,51638],{"class":335},[68,64246,64236],{"class":82},[68,64248,1498],{"class":335},[68,64250,64251],{"class":70,"line":10028},[68,64252,2393],{"class":335},[68,64254,64255],{"class":70,"line":10049},[68,64256,2606],{"emptyLinePlaceholder":260},[68,64258,64259,64262],{"class":70,"line":10055},[68,64260,64261],{"class":74},"    .tab-content",[68,64263,15777],{"class":335},[68,64265,64266,64268,64270,64272,64275,64277],{"class":70,"line":10069},[68,64267,54896],{"class":82},[68,64269,51638],{"class":335},[68,64271,525],{"class":82},[68,64273,64274],{"class":82}," 16",[68,64276,51693],{"class":331},[68,64278,1498],{"class":335},[68,64280,64281],{"class":70,"line":10075},[68,64282,2393],{"class":335},[68,64284,64285],{"class":70,"line":10102},[68,64286,2606],{"emptyLinePlaceholder":260},[68,64288,64289,64291,64293],{"class":70,"line":10111},[68,64290,64261],{"class":74},[68,64292,62375],{"class":74},[68,64294,15777],{"class":335},[68,64296,64297,64299,64301,64303],{"class":70,"line":10117},[68,64298,55210],{"class":82},[68,64300,51638],{"class":335},[68,64302,54938],{"class":82},[68,64304,1498],{"class":335},[68,64306,64307],{"class":70,"line":10125},[68,64308,2393],{"class":335},[68,64310,64311],{"class":70,"line":10130},[68,64312,2606],{"emptyLinePlaceholder":260},[68,64314,64315,64317,64320],{"class":70,"line":16809},[68,64316,64261],{"class":74},[68,64318,64319],{"class":74}," .item.active",[68,64321,15777],{"class":335},[68,64323,64324,64326,64328,64330],{"class":70,"line":16815},[68,64325,55210],{"class":82},[68,64327,51638],{"class":335},[68,64329,61070],{"class":82},[68,64331,1498],{"class":335},[68,64333,64334],{"class":70,"line":16838},[68,64335,2393],{"class":335},[68,64337,64338,64340,64342],{"class":70,"line":16844},[68,64339,52618],{"class":335},[68,64341,250],{"class":51501},[68,64343,51508],{"class":335},[68,64345,64346,64348,64350],{"class":70,"line":16867},[68,64347,51986],{"class":335},[68,64349,51535],{"class":51501},[68,64351,51508],{"class":335},[68,64353,64354],{"class":70,"line":16881},[68,64355,2606],{"emptyLinePlaceholder":260},[68,64357,64358,64360,64362],{"class":70,"line":16901},[68,64359,1243],{"class":335},[68,64361,52001],{"class":51501},[68,64363,51508],{"class":335},[68,64365,64366,64368,64370,64372,64374,64377],{"class":70,"line":16907},[68,64367,52345],{"class":335},[68,64369,51812],{"class":51501},[68,64371,53687],{"class":74},[68,64373,381],{"class":335},[68,64375,64376],{"class":78},"\"tab\"",[68,64378,51508],{"class":335},[68,64380,64381,64383,64385,64387,64389,64392],{"class":70,"line":16918},[68,64382,51542],{"class":335},[68,64384,51812],{"class":51501},[68,64386,53687],{"class":74},[68,64388,381],{"class":335},[68,64390,64391],{"class":78},"\"tab-nav\"",[68,64393,51508],{"class":335},[68,64395,64396,64398,64400,64403,64405],{"class":70,"line":16941},[68,64397,55435],{"class":335},[68,64399,301],{"class":51501},[68,64401,64402],{"class":335},">每日特价\u003C\u002F",[68,64404,301],{"class":51501},[68,64406,51508],{"class":335},[68,64408,64409,64411,64413],{"class":70,"line":16963},[68,64410,55435],{"class":335},[68,64412,42],{"class":51501},[68,64414,51508],{"class":335},[68,64416,64417,64419,64421,64423,64425,64427,64429,64431,64433,64435,64438,64441,64443,64445,64447],{"class":70,"line":16968},[68,64418,55503],{"class":335},[68,64420,26],{"class":51501},[68,64422,61253],{"class":335},[68,64424,30],{"class":51501},[68,64426,53687],{"class":74},[68,64428,381],{"class":335},[68,64430,59907],{"class":78},[68,64432,61258],{"class":74},[68,64434,381],{"class":335},[68,64436,64437],{"class":78},"\"javascript:;\"",[68,64439,64440],{"class":335},">精选\u003C\u002F",[68,64442,30],{"class":51501},[68,64444,55515],{"class":335},[68,64446,26],{"class":51501},[68,64448,51508],{"class":335},[68,64450,64451,64453,64455,64457,64459,64461,64463,64465,64468,64470,64472,64474],{"class":70,"line":16974},[68,64452,55503],{"class":335},[68,64454,26],{"class":51501},[68,64456,61253],{"class":335},[68,64458,30],{"class":51501},[68,64460,61258],{"class":74},[68,64462,381],{"class":335},[68,64464,64437],{"class":78},[68,64466,64467],{"class":335},">美食\u003C\u002F",[68,64469,30],{"class":51501},[68,64471,55515],{"class":335},[68,64473,26],{"class":51501},[68,64475,51508],{"class":335},[68,64477,64478,64480,64482,64484,64486,64488,64490,64492,64495,64497,64499,64501],{"class":70,"line":16988},[68,64479,55503],{"class":335},[68,64481,26],{"class":51501},[68,64483,61253],{"class":335},[68,64485,30],{"class":51501},[68,64487,61258],{"class":74},[68,64489,381],{"class":335},[68,64491,64437],{"class":78},[68,64493,64494],{"class":335},">百货\u003C\u002F",[68,64496,30],{"class":51501},[68,64498,55515],{"class":335},[68,64500,26],{"class":51501},[68,64502,51508],{"class":335},[68,64504,64505,64507,64509,64511,64513,64515,64517,64519,64522,64524,64526,64528],{"class":70,"line":17001},[68,64506,55503],{"class":335},[68,64508,26],{"class":51501},[68,64510,61253],{"class":335},[68,64512,30],{"class":51501},[68,64514,61258],{"class":74},[68,64516,381],{"class":335},[68,64518,64437],{"class":78},[68,64520,64521],{"class":335},">个护\u003C\u002F",[68,64523,30],{"class":51501},[68,64525,55515],{"class":335},[68,64527,26],{"class":51501},[68,64529,51508],{"class":335},[68,64531,64532,64534,64536,64538,64540,64542,64544,64546,64549,64551,64553,64555],{"class":70,"line":17006},[68,64533,55503],{"class":335},[68,64535,26],{"class":51501},[68,64537,61253],{"class":335},[68,64539,30],{"class":51501},[68,64541,61258],{"class":74},[68,64543,381],{"class":335},[68,64545,64437],{"class":78},[68,64547,64548],{"class":335},">预告\u003C\u002F",[68,64550,30],{"class":51501},[68,64552,55515],{"class":335},[68,64554,26],{"class":51501},[68,64556,51508],{"class":335},[68,64558,64559,64561,64563],{"class":70,"line":17020},[68,64560,55608],{"class":335},[68,64562,42],{"class":51501},[68,64564,51508],{"class":335},[68,64566,64567,64569,64571],{"class":70,"line":17025},[68,64568,51977],{"class":335},[68,64570,51812],{"class":51501},[68,64572,51508],{"class":335},[68,64574,64575,64577,64579,64581,64583,64586],{"class":70,"line":17031},[68,64576,51542],{"class":335},[68,64578,51812],{"class":51501},[68,64580,53687],{"class":74},[68,64582,381],{"class":335},[68,64584,64585],{"class":78},"\"tab-content\"",[68,64587,51508],{"class":335},[68,64589,64590,64592,64594,64596,64598,64601,64603,64605,64607,64609,64612,64614,64616,64618,64621,64623],{"class":70,"line":17036},[68,64591,55435],{"class":335},[68,64593,51812],{"class":51501},[68,64595,53687],{"class":74},[68,64597,381],{"class":335},[68,64599,64600],{"class":78},"\"item active\"",[68,64602,61253],{"class":335},[68,64604,48],{"class":51501},[68,64606,55440],{"class":74},[68,64608,381],{"class":335},[68,64610,64611],{"class":78},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[68,64613,55448],{"class":74},[68,64615,381],{"class":335},[68,64617,7857],{"class":78},[68,64619,64620],{"class":335}," \u002F>\u003C\u002F",[68,64622,51812],{"class":51501},[68,64624,51508],{"class":335},[68,64626,64627,64629,64631,64633,64635,64637,64639,64641,64643,64645,64648,64650,64652,64654,64656,64658],{"class":70,"line":17050},[68,64628,55435],{"class":335},[68,64630,51812],{"class":51501},[68,64632,53687],{"class":74},[68,64634,381],{"class":335},[68,64636,62824],{"class":78},[68,64638,61253],{"class":335},[68,64640,48],{"class":51501},[68,64642,55440],{"class":74},[68,64644,381],{"class":335},[68,64646,64647],{"class":78},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[68,64649,55448],{"class":74},[68,64651,381],{"class":335},[68,64653,7857],{"class":78},[68,64655,64620],{"class":335},[68,64657,51812],{"class":51501},[68,64659,51508],{"class":335},[68,64661,64662,64664,64666,64668,64670,64672,64674,64676,64678,64680,64683,64685,64687,64689,64691,64693],{"class":70,"line":17055},[68,64663,55435],{"class":335},[68,64665,51812],{"class":51501},[68,64667,53687],{"class":74},[68,64669,381],{"class":335},[68,64671,62824],{"class":78},[68,64673,61253],{"class":335},[68,64675,48],{"class":51501},[68,64677,55440],{"class":74},[68,64679,381],{"class":335},[68,64681,64682],{"class":78},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[68,64684,55448],{"class":74},[68,64686,381],{"class":335},[68,64688,7857],{"class":78},[68,64690,64620],{"class":335},[68,64692,51812],{"class":51501},[68,64694,51508],{"class":335},[68,64696,64697,64699,64701,64703,64705,64707,64709,64711,64713,64715,64718,64720,64722,64724,64726,64728],{"class":70,"line":17060},[68,64698,55435],{"class":335},[68,64700,51812],{"class":51501},[68,64702,53687],{"class":74},[68,64704,381],{"class":335},[68,64706,62824],{"class":78},[68,64708,61253],{"class":335},[68,64710,48],{"class":51501},[68,64712,55440],{"class":74},[68,64714,381],{"class":335},[68,64716,64717],{"class":78},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[68,64719,55448],{"class":74},[68,64721,381],{"class":335},[68,64723,7857],{"class":78},[68,64725,64620],{"class":335},[68,64727,51812],{"class":51501},[68,64729,51508],{"class":335},[68,64731,64732,64734,64736,64738,64740,64742,64744,64746,64748,64750,64753,64755,64757,64759,64761,64763],{"class":70,"line":17074},[68,64733,55435],{"class":335},[68,64735,51812],{"class":51501},[68,64737,53687],{"class":74},[68,64739,381],{"class":335},[68,64741,62824],{"class":78},[68,64743,61253],{"class":335},[68,64745,48],{"class":51501},[68,64747,55440],{"class":74},[68,64749,381],{"class":335},[68,64751,64752],{"class":78},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[68,64754,55448],{"class":74},[68,64756,381],{"class":335},[68,64758,7857],{"class":78},[68,64760,64620],{"class":335},[68,64762,51812],{"class":51501},[68,64764,51508],{"class":335},[68,64766,64767,64769,64771],{"class":70,"line":17086},[68,64768,51977],{"class":335},[68,64770,51812],{"class":51501},[68,64772,51508],{"class":335},[68,64774,64775,64777,64779],{"class":70,"line":17091},[68,64776,52618],{"class":335},[68,64778,51812],{"class":51501},[68,64780,51508],{"class":335},[68,64782,64783,64785,64787],{"class":70,"line":17104},[68,64784,52345],{"class":335},[68,64786,52014],{"class":51501},[68,64788,51508],{"class":335},[68,64790,64791],{"class":70,"line":17109},[68,64792,64793],{"class":393},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[68,64795,64796],{"class":70,"line":17114},[68,64797,64798],{"class":393},"    \u002F\u002F 1.1 获取 a 元素 \n",[68,64800,64801,64803,64806,64808,64810,64812,64814,64817],{"class":70,"line":17119},[68,64802,11426],{"class":331},[68,64804,64805],{"class":82}," as",[68,64807,13769],{"class":331},[68,64809,54597],{"class":335},[68,64811,55882],{"class":74},[68,64813,336],{"class":335},[68,64815,64816],{"class":78},"'.tab-nav a'",[68,64818,342],{"class":335},[68,64820,64821],{"class":70,"line":17132},[68,64822,64823],{"class":393},"    \u002F\u002F console.log(as) \n",[68,64825,64826,64828,64830,64832,64834,64836,64838,64840,64842,64845,64847,64849,64851],{"class":70,"line":17137},[68,64827,3407],{"class":331},[68,64829,1865],{"class":335},[68,64831,52048],{"class":331},[68,64833,9643],{"class":335},[68,64835,381],{"class":331},[68,64837,4299],{"class":82},[68,64839,9650],{"class":335},[68,64841,1243],{"class":331},[68,64843,64844],{"class":335}," as.",[68,64846,52169],{"class":82},[68,64848,3420],{"class":335},[68,64850,2498],{"class":331},[68,64852,12647],{"class":335},[68,64854,64855],{"class":70,"line":32834},[68,64856,64857],{"class":393},"      \u002F\u002F console.log(as[i])\n",[68,64859,64860],{"class":70,"line":32840},[68,64861,64862],{"class":393},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[68,64864,64865,64868,64870,64872,64875,64877,64879],{"class":70,"line":32846},[68,64866,64867],{"class":335},"      as[i].",[68,64869,58014],{"class":74},[68,64871,336],{"class":335},[68,64873,64874],{"class":78},"'mouseenter'",[68,64876,12640],{"class":335},[68,64878,54650],{"class":331},[68,64880,54653],{"class":335},[68,64882,64883],{"class":70,"line":32852},[68,64884,64885],{"class":393},"        \u002F\u002F console.log('鼠标经过')\n",[68,64887,64888],{"class":70,"line":32858},[68,64889,64890],{"class":393},"        \u002F\u002F 排他思想  \n",[68,64892,64893],{"class":70,"line":32869},[68,64894,64895],{"class":393},"        \u002F\u002F 干掉别人 移除类active\n",[68,64897,64898,64900,64902,64904,64907,64909,64911,64913,64916],{"class":70,"line":32875},[68,64899,52126],{"class":335},[68,64901,54600],{"class":74},[68,64903,336],{"class":335},[68,64905,64906],{"class":78},"'.tab-nav .active'",[68,64908,57204],{"class":335},[68,64910,57207],{"class":74},[68,64912,336],{"class":335},[68,64914,64915],{"class":78},"'active'",[68,64917,342],{"class":335},[68,64919,64920],{"class":70,"line":32895},[68,64921,64922],{"class":393},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[68,64924,64925,64928,64931,64933,64935,64937],{"class":70,"line":32901},[68,64926,64927],{"class":82},"        this",[68,64929,64930],{"class":335},".classList.",[68,64932,5539],{"class":74},[68,64934,336],{"class":335},[68,64936,64915],{"class":78},[68,64938,342],{"class":335},[68,64940,64941],{"class":70,"line":32912},[68,64942,2606],{"emptyLinePlaceholder":260},[68,64944,64945],{"class":70,"line":32918},[68,64946,64947],{"class":393},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[68,64949,64950],{"class":70,"line":32924},[68,64951,64952],{"class":393},"        \u002F\u002F 干掉别人\n",[68,64954,64955,64957,64959,64961,64964,64966,64968,64970,64972],{"class":70,"line":32930},[68,64956,52126],{"class":335},[68,64958,54600],{"class":74},[68,64960,336],{"class":335},[68,64962,64963],{"class":78},"'.tab-content .active'",[68,64965,57204],{"class":335},[68,64967,57207],{"class":74},[68,64969,336],{"class":335},[68,64971,64915],{"class":78},[68,64973,342],{"class":335},[68,64975,64976],{"class":70,"line":32936},[68,64977,64978],{"class":393},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[68,64980,64981,64983,64985,64987,64990,64992,64994,64996,64998,65000,65002,65004,65006],{"class":70,"line":32942},[68,64982,52126],{"class":335},[68,64984,54600],{"class":74},[68,64986,336],{"class":335},[68,64988,64989],{"class":78},"`.tab-content .item:nth-child(${",[68,64991,774],{"class":335},[68,64993,45767],{"class":331},[68,64995,25322],{"class":82},[68,64997,57233],{"class":78},[68,64999,57204],{"class":335},[68,65001,5539],{"class":74},[68,65003,336],{"class":335},[68,65005,64915],{"class":78},[68,65007,342],{"class":335},[68,65009,65010],{"class":70,"line":32948},[68,65011,2606],{"emptyLinePlaceholder":260},[68,65013,65014],{"class":70,"line":32954},[68,65015,65016],{"class":335},"      })\n",[68,65018,65019],{"class":70,"line":32974},[68,65020,2393],{"class":335},[68,65022,65023,65025,65027],{"class":70,"line":32980},[68,65024,52618],{"class":335},[68,65026,52014],{"class":51501},[68,65028,51508],{"class":335},[68,65030,65031,65033,65035],{"class":70,"line":32996},[68,65032,51986],{"class":335},[68,65034,52001],{"class":51501},[68,65036,51508],{"class":335},[68,65038,65039],{"class":70,"line":33002},[68,65040,2606],{"emptyLinePlaceholder":260},[68,65042,65043,65045,65047],{"class":70,"line":33016},[68,65044,51986],{"class":335},[68,65046,50836],{"class":51501},[68,65048,51508],{"class":335},[19,65050,65051],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65053,65054],{},"在监听事件中，this指向的就是他的调用者",[19,65056,65057],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65059,53921],{},[19,65061,65062],{},"(function () {",[19,65064,65065],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65067,65068],{},"list.addEventListener('click', function (e) {",[19,65070,65071],{},"if (e.target.tagName === 'A') {",[19,65073,65074],{},"\u002F\u002F 排他思想",[19,65076,65077],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65079,65080],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65082,65083],{},"\u002F\u002F console.log(old);",[19,65085,65086],{},"\u002F\u002F 判断",[19,65088,65089],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65091,65092],{},"if (old) old.classList.remove('active')",[19,65094,65095],{},"e.target.classList.add('active')",[19,65097,1279],{},[19,65099,52665],{},[19,65101,65102],{},"})();",[301,65104,65106],{"id":65105},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[58,65108,65110],{"className":50834,"code":65109,"language":50836,"meta":63,"style":63},"\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",[65,65111,65112,65122,65126,65134,65138,65152,65166,65178,65186,65192,65202,65212,65216,65220,65227,65239,65250,65267,65280,65294,65304,65308,65312,65319,65330,65348,65358,65370,65374,65378,65385,65402,65413,65425,65429,65433,65440,65452,65456,65464,65472,65476,65484,65492,65500,65515,65559,65567,65580,65593,65606,65614,65622,65630,65658,65666,65678,65691,65704,65712,65720,65728,65754,65762,65775,65787,65800,65808,65816,65824,65850,65858,65871,65883,65896,65904,65912,65920,65925,65945,65950,65970,65975,65992,65997,66005,66010,66039,66052,66056,66060,66065,66069,66097,66102,66119,66124,66129,66134,66139,66165,66169,66173,66181,66189,66193],{"__ignoreMap":63},[68,65113,65114,65116,65118,65120],{"class":70,"line":71},[68,65115,51498],{"class":335},[68,65117,51502],{"class":51501},[68,65119,51505],{"class":74},[68,65121,51508],{"class":335},[68,65123,65124],{"class":70,"line":92},[68,65125,2606],{"emptyLinePlaceholder":260},[68,65127,65128,65130,65132],{"class":70,"line":1387},[68,65129,1243],{"class":335},[68,65131,50836],{"class":51501},[68,65133,51508],{"class":335},[68,65135,65136],{"class":70,"line":1402},[68,65137,2606],{"emptyLinePlaceholder":260},[68,65139,65140,65142,65144,65146,65148,65150],{"class":70,"line":1408},[68,65141,1243],{"class":335},[68,65143,51535],{"class":51501},[68,65145,51517],{"class":74},[68,65147,381],{"class":335},[68,65149,51522],{"class":78},[68,65151,51508],{"class":335},[68,65153,65154,65156,65158,65160,65162,65164],{"class":70,"line":1422},[68,65155,52345],{"class":335},[68,65157,51545],{"class":51501},[68,65159,51548],{"class":74},[68,65161,381],{"class":335},[68,65163,51553],{"class":78},[68,65165,51508],{"class":335},[68,65167,65168,65170,65172,65174,65176],{"class":70,"line":1428},[68,65169,52345],{"class":335},[68,65171,51608],{"class":51501},[68,65173,55515],{"class":335},[68,65175,51608],{"class":51501},[68,65177,51508],{"class":335},[68,65179,65180,65182,65184],{"class":70,"line":1519},[68,65181,52345],{"class":335},[68,65183,250],{"class":51501},[68,65185,51508],{"class":335},[68,65187,65188,65190],{"class":70,"line":1525},[68,65189,6608],{"class":51501},[68,65191,15777],{"class":335},[68,65193,65194,65196,65198,65200],{"class":70,"line":1537},[68,65195,54907],{"class":82},[68,65197,51638],{"class":335},[68,65199,525],{"class":82},[68,65201,1498],{"class":335},[68,65203,65204,65206,65208,65210],{"class":70,"line":1819},[68,65205,54896],{"class":82},[68,65207,51638],{"class":335},[68,65209,525],{"class":82},[68,65211,1498],{"class":335},[68,65213,65214],{"class":70,"line":1824},[68,65215,2393],{"class":335},[68,65217,65218],{"class":70,"line":1830},[68,65219,2606],{"emptyLinePlaceholder":260},[68,65221,65222,65225],{"class":70,"line":1835},[68,65223,65224],{"class":51501},"    table",[68,65226,15777],{"class":335},[68,65228,65229,65232,65234,65237],{"class":70,"line":1849},[68,65230,65231],{"class":82},"      border-collapse",[68,65233,51638],{"class":335},[68,65235,65236],{"class":82},"collapse",[68,65238,1498],{"class":335},[68,65240,65241,65244,65246,65248],{"class":70,"line":1854},[68,65242,65243],{"class":82},"      border-spacing",[68,65245,51638],{"class":335},[68,65247,525],{"class":82},[68,65249,1498],{"class":335},[68,65251,65252,65254,65256,65258,65260,65262,65265],{"class":70,"line":1860},[68,65253,62178],{"class":82},[68,65255,51638],{"class":335},[68,65257,551],{"class":82},[68,65259,51693],{"class":331},[68,65261,51722],{"class":82},[68,65263,65264],{"class":82}," #c0c0c0",[68,65266,1498],{"class":335},[68,65268,65269,65271,65273,65276,65278],{"class":70,"line":1881},[68,65270,54972],{"class":82},[68,65272,51638],{"class":335},[68,65274,65275],{"class":82},"500",[68,65277,51693],{"class":331},[68,65279,1498],{"class":335},[68,65281,65282,65284,65286,65288,65290,65292],{"class":70,"line":1886},[68,65283,54907],{"class":82},[68,65285,51638],{"class":335},[68,65287,644],{"class":82},[68,65289,51693],{"class":331},[68,65291,51757],{"class":82},[68,65293,1498],{"class":335},[68,65295,65296,65298,65300,65302],{"class":70,"line":1900},[68,65297,57487],{"class":82},[68,65299,51638],{"class":335},[68,65301,51793],{"class":82},[68,65303,1498],{"class":335},[68,65305,65306],{"class":70,"line":1905},[68,65307,2393],{"class":335},[68,65309,65310],{"class":70,"line":1934},[68,65311,2606],{"emptyLinePlaceholder":260},[68,65313,65314,65317],{"class":70,"line":1939},[68,65315,65316],{"class":51501},"    th",[68,65318,15777],{"class":335},[68,65320,65321,65323,65325,65328],{"class":70,"line":1956},[68,65322,55085],{"class":82},[68,65324,51638],{"class":335},[68,65326,65327],{"class":82},"#09c",[68,65329,1498],{"class":335},[68,65331,65332,65335,65337,65339,65341,65343,65346],{"class":70,"line":1961},[68,65333,65334],{"class":82},"      font",[68,65336,51638],{"class":335},[68,65338,62540],{"class":82},[68,65340,64274],{"class":82},[68,65342,51693],{"class":331},[68,65344,65345],{"class":78}," \"微软雅黑\"",[68,65347,1498],{"class":335},[68,65349,65350,65352,65354,65356],{"class":70,"line":1966},[68,65351,57617],{"class":82},[68,65353,51638],{"class":335},[68,65355,61043],{"class":82},[68,65357,1498],{"class":335},[68,65359,65360,65362,65364,65366,65368],{"class":70,"line":1971},[68,65361,54986],{"class":82},[68,65363,51638],{"class":335},[68,65365,1133],{"class":82},[68,65367,51693],{"class":331},[68,65369,1498],{"class":335},[68,65371,65372],{"class":70,"line":1985},[68,65373,2393],{"class":335},[68,65375,65376],{"class":70,"line":1990},[68,65377,2606],{"emptyLinePlaceholder":260},[68,65379,65380,65383],{"class":70,"line":2783},[68,65381,65382],{"class":51501},"    td",[68,65384,15777],{"class":335},[68,65386,65387,65389,65391,65393,65395,65397,65400],{"class":70,"line":2797},[68,65388,62178],{"class":82},[68,65390,51638],{"class":335},[68,65392,551],{"class":82},[68,65394,51693],{"class":331},[68,65396,51722],{"class":82},[68,65398,65399],{"class":82}," #d0d0d0",[68,65401,1498],{"class":335},[68,65403,65404,65406,65408,65411],{"class":70,"line":2805},[68,65405,57617],{"class":82},[68,65407,51638],{"class":335},[68,65409,65410],{"class":82},"#404060",[68,65412,1498],{"class":335},[68,65414,65415,65417,65419,65421,65423],{"class":70,"line":2810},[68,65416,54896],{"class":82},[68,65418,51638],{"class":335},[68,65420,779],{"class":82},[68,65422,51693],{"class":331},[68,65424,1498],{"class":335},[68,65426,65427],{"class":70,"line":2816},[68,65428,2393],{"class":335},[68,65430,65431],{"class":70,"line":2822},[68,65432,2606],{"emptyLinePlaceholder":260},[68,65434,65435,65438],{"class":70,"line":2827},[68,65436,65437],{"class":74},"    .allCheck",[68,65439,15777],{"class":335},[68,65441,65442,65444,65446,65448,65450],{"class":70,"line":8153},[68,65443,54972],{"class":82},[68,65445,51638],{"class":335},[68,65447,945],{"class":82},[68,65449,51693],{"class":331},[68,65451,1498],{"class":335},[68,65453,65454],{"class":70,"line":8177},[68,65455,2393],{"class":335},[68,65457,65458,65460,65462],{"class":70,"line":8182},[68,65459,52618],{"class":335},[68,65461,250],{"class":51501},[68,65463,51508],{"class":335},[68,65465,65466,65468,65470],{"class":70,"line":8188},[68,65467,51986],{"class":335},[68,65469,51535],{"class":51501},[68,65471,51508],{"class":335},[68,65473,65474],{"class":70,"line":8215},[68,65475,2606],{"emptyLinePlaceholder":260},[68,65477,65478,65480,65482],{"class":70,"line":8220},[68,65479,1243],{"class":335},[68,65481,52001],{"class":51501},[68,65483,51508],{"class":335},[68,65485,65486,65488,65490],{"class":70,"line":8226},[68,65487,52345],{"class":335},[68,65489,471],{"class":51501},[68,65491,51508],{"class":335},[68,65493,65494,65496,65498],{"class":70,"line":8238},[68,65495,51542],{"class":335},[68,65497,477],{"class":51501},[68,65499,51508],{"class":335},[68,65501,65502,65504,65506,65508,65510,65513],{"class":70,"line":8250},[68,65503,55435],{"class":335},[68,65505,480],{"class":51501},[68,65507,53687],{"class":74},[68,65509,381],{"class":335},[68,65511,65512],{"class":78},"\"allCheck\"",[68,65514,51508],{"class":335},[68,65516,65517,65519,65521,65523,65525,65527,65529,65531,65533,65535,65537,65540,65543,65545,65547,65549,65552,65555,65557],{"class":70,"line":8262},[68,65518,55503],{"class":335},[68,65520,54022],{"class":51501},[68,65522,54025],{"class":74},[68,65524,381],{"class":335},[68,65526,54030],{"class":78},[68,65528,15125],{"class":74},[68,65530,381],{"class":335},[68,65532,7857],{"class":78},[68,65534,15164],{"class":74},[68,65536,381],{"class":335},[68,65538,65539],{"class":78},"\"checkAll\"",[68,65541,65542],{"class":335},"> \u003C",[68,65544,68],{"class":51501},[68,65546,53687],{"class":74},[68,65548,381],{"class":335},[68,65550,65551],{"class":78},"\"all\"",[68,65553,65554],{"class":335},">全选\u003C\u002F",[68,65556,68],{"class":51501},[68,65558,51508],{"class":335},[68,65560,65561,65563,65565],{"class":70,"line":9921},[68,65562,55608],{"class":335},[68,65564,480],{"class":51501},[68,65566,51508],{"class":335},[68,65568,65569,65571,65573,65576,65578],{"class":70,"line":9946},[68,65570,55435],{"class":335},[68,65572,480],{"class":51501},[68,65574,65575],{"class":335},">商品\u003C\u002F",[68,65577,480],{"class":51501},[68,65579,51508],{"class":335},[68,65581,65582,65584,65586,65589,65591],{"class":70,"line":9969},[68,65583,55435],{"class":335},[68,65585,480],{"class":51501},[68,65587,65588],{"class":335},">商家\u003C\u002F",[68,65590,480],{"class":51501},[68,65592,51508],{"class":335},[68,65594,65595,65597,65599,65602,65604],{"class":70,"line":9993},[68,65596,55435],{"class":335},[68,65598,480],{"class":51501},[68,65600,65601],{"class":335},">价格\u003C\u002F",[68,65603,480],{"class":51501},[68,65605,51508],{"class":335},[68,65607,65608,65610,65612],{"class":70,"line":9998},[68,65609,51977],{"class":335},[68,65611,477],{"class":51501},[68,65613,51508],{"class":335},[68,65615,65616,65618,65620],{"class":70,"line":10003},[68,65617,51542],{"class":335},[68,65619,477],{"class":51501},[68,65621,51508],{"class":335},[68,65623,65624,65626,65628],{"class":70,"line":10008},[68,65625,55435],{"class":335},[68,65627,523],{"class":51501},[68,65629,51508],{"class":335},[68,65631,65632,65634,65636,65638,65640,65642,65644,65646,65649,65651,65653,65656],{"class":70,"line":10017},[68,65633,55503],{"class":335},[68,65635,54022],{"class":51501},[68,65637,54025],{"class":74},[68,65639,381],{"class":335},[68,65641,54030],{"class":78},[68,65643,15125],{"class":74},[68,65645,381],{"class":335},[68,65647,65648],{"class":78},"\"check\"",[68,65650,53687],{"class":74},[68,65652,381],{"class":335},[68,65654,65655],{"class":78},"\"ck\"",[68,65657,51508],{"class":335},[68,65659,65660,65662,65664],{"class":70,"line":10022},[68,65661,55608],{"class":335},[68,65663,523],{"class":51501},[68,65665,51508],{"class":335},[68,65667,65668,65670,65672,65674,65676],{"class":70,"line":10028},[68,65669,55435],{"class":335},[68,65671,523],{"class":51501},[68,65673,61374],{"class":335},[68,65675,523],{"class":51501},[68,65677,51508],{"class":335},[68,65679,65680,65682,65684,65687,65689],{"class":70,"line":10049},[68,65681,55435],{"class":335},[68,65683,523],{"class":51501},[68,65685,65686],{"class":335},">小米\u003C\u002F",[68,65688,523],{"class":51501},[68,65690,51508],{"class":335},[68,65692,65693,65695,65697,65700,65702],{"class":70,"line":10055},[68,65694,55435],{"class":335},[68,65696,523],{"class":51501},[68,65698,65699],{"class":335},">￥1999\u003C\u002F",[68,65701,523],{"class":51501},[68,65703,51508],{"class":335},[68,65705,65706,65708,65710],{"class":70,"line":10069},[68,65707,51977],{"class":335},[68,65709,477],{"class":51501},[68,65711,51508],{"class":335},[68,65713,65714,65716,65718],{"class":70,"line":10075},[68,65715,51542],{"class":335},[68,65717,477],{"class":51501},[68,65719,51508],{"class":335},[68,65721,65722,65724,65726],{"class":70,"line":10102},[68,65723,55435],{"class":335},[68,65725,523],{"class":51501},[68,65727,51508],{"class":335},[68,65729,65730,65732,65734,65736,65738,65740,65742,65744,65746,65748,65750,65752],{"class":70,"line":10111},[68,65731,55503],{"class":335},[68,65733,54022],{"class":51501},[68,65735,54025],{"class":74},[68,65737,381],{"class":335},[68,65739,54030],{"class":78},[68,65741,15125],{"class":74},[68,65743,381],{"class":335},[68,65745,65648],{"class":78},[68,65747,53687],{"class":74},[68,65749,381],{"class":335},[68,65751,65655],{"class":78},[68,65753,51508],{"class":335},[68,65755,65756,65758,65760],{"class":70,"line":10117},[68,65757,55608],{"class":335},[68,65759,523],{"class":51501},[68,65761,51508],{"class":335},[68,65763,65764,65766,65768,65771,65773],{"class":70,"line":10125},[68,65765,55435],{"class":335},[68,65767,523],{"class":51501},[68,65769,65770],{"class":335},">小米净水器\u003C\u002F",[68,65772,523],{"class":51501},[68,65774,51508],{"class":335},[68,65776,65777,65779,65781,65783,65785],{"class":70,"line":10130},[68,65778,55435],{"class":335},[68,65780,523],{"class":51501},[68,65782,65686],{"class":335},[68,65784,523],{"class":51501},[68,65786,51508],{"class":335},[68,65788,65789,65791,65793,65796,65798],{"class":70,"line":16809},[68,65790,55435],{"class":335},[68,65792,523],{"class":51501},[68,65794,65795],{"class":335},">￥4999\u003C\u002F",[68,65797,523],{"class":51501},[68,65799,51508],{"class":335},[68,65801,65802,65804,65806],{"class":70,"line":16815},[68,65803,51977],{"class":335},[68,65805,477],{"class":51501},[68,65807,51508],{"class":335},[68,65809,65810,65812,65814],{"class":70,"line":16838},[68,65811,51542],{"class":335},[68,65813,477],{"class":51501},[68,65815,51508],{"class":335},[68,65817,65818,65820,65822],{"class":70,"line":16844},[68,65819,55435],{"class":335},[68,65821,523],{"class":51501},[68,65823,51508],{"class":335},[68,65825,65826,65828,65830,65832,65834,65836,65838,65840,65842,65844,65846,65848],{"class":70,"line":16867},[68,65827,55503],{"class":335},[68,65829,54022],{"class":51501},[68,65831,54025],{"class":74},[68,65833,381],{"class":335},[68,65835,54030],{"class":78},[68,65837,15125],{"class":74},[68,65839,381],{"class":335},[68,65841,65648],{"class":78},[68,65843,53687],{"class":74},[68,65845,381],{"class":335},[68,65847,65655],{"class":78},[68,65849,51508],{"class":335},[68,65851,65852,65854,65856],{"class":70,"line":16881},[68,65853,55608],{"class":335},[68,65855,523],{"class":51501},[68,65857,51508],{"class":335},[68,65859,65860,65862,65864,65867,65869],{"class":70,"line":16901},[68,65861,55435],{"class":335},[68,65863,523],{"class":51501},[68,65865,65866],{"class":335},">小米电视\u003C\u002F",[68,65868,523],{"class":51501},[68,65870,51508],{"class":335},[68,65872,65873,65875,65877,65879,65881],{"class":70,"line":16907},[68,65874,55435],{"class":335},[68,65876,523],{"class":51501},[68,65878,65686],{"class":335},[68,65880,523],{"class":51501},[68,65882,51508],{"class":335},[68,65884,65885,65887,65889,65892,65894],{"class":70,"line":16918},[68,65886,55435],{"class":335},[68,65888,523],{"class":51501},[68,65890,65891],{"class":335},">￥5999\u003C\u002F",[68,65893,523],{"class":51501},[68,65895,51508],{"class":335},[68,65897,65898,65900,65902],{"class":70,"line":16941},[68,65899,51977],{"class":335},[68,65901,477],{"class":51501},[68,65903,51508],{"class":335},[68,65905,65906,65908,65910],{"class":70,"line":16963},[68,65907,52618],{"class":335},[68,65909,471],{"class":51501},[68,65911,51508],{"class":335},[68,65913,65914,65916,65918],{"class":70,"line":16968},[68,65915,52345],{"class":335},[68,65917,52014],{"class":51501},[68,65919,51508],{"class":335},[68,65921,65922],{"class":70,"line":16974},[68,65923,65924],{"class":393},"    \u002F\u002F 1. 获取大复选框\n",[68,65926,65927,65929,65932,65934,65936,65938,65940,65943],{"class":70,"line":16988},[68,65928,11426],{"class":331},[68,65930,65931],{"class":82}," checkAll",[68,65933,13769],{"class":331},[68,65935,54597],{"class":335},[68,65937,54600],{"class":74},[68,65939,336],{"class":335},[68,65941,65942],{"class":78},"'#checkAll'",[68,65944,342],{"class":335},[68,65946,65947],{"class":70,"line":17001},[68,65948,65949],{"class":393},"    \u002F\u002F 2. 获取所有的小复选框\n",[68,65951,65952,65954,65957,65959,65961,65963,65965,65968],{"class":70,"line":17006},[68,65953,11426],{"class":331},[68,65955,65956],{"class":82}," cks",[68,65958,13769],{"class":331},[68,65960,54597],{"class":335},[68,65962,55882],{"class":74},[68,65964,336],{"class":335},[68,65966,65967],{"class":78},"'.ck'",[68,65969,342],{"class":335},[68,65971,65972],{"class":70,"line":17020},[68,65973,65974],{"class":393},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[68,65976,65977,65980,65982,65984,65986,65988,65990],{"class":70,"line":17025},[68,65978,65979],{"class":335},"    checkAll.",[68,65981,58014],{"class":74},[68,65983,336],{"class":335},[68,65985,58019],{"class":78},[68,65987,12640],{"class":335},[68,65989,54650],{"class":331},[68,65991,54653],{"class":335},[68,65993,65994],{"class":70,"line":17031},[68,65995,65996],{"class":393},"      \u002F\u002F 得到当前大复选框的选中状态\n",[68,65998,65999,66002],{"class":70,"line":17036},[68,66000,66001],{"class":393},"      \u002F\u002F console.log(checkAll.checked)",[68,66003,66004],{"class":393},"  \u002F\u002F 得到 是 true 或者是 false\n",[68,66006,66007],{"class":70,"line":17050},[68,66008,66009],{"class":393},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[68,66011,66012,66014,66016,66018,66020,66022,66024,66026,66028,66031,66033,66035,66037],{"class":70,"line":17055},[68,66013,52485],{"class":331},[68,66015,1865],{"class":335},[68,66017,52048],{"class":331},[68,66019,9643],{"class":335},[68,66021,381],{"class":331},[68,66023,4299],{"class":82},[68,66025,9650],{"class":335},[68,66027,1243],{"class":331},[68,66029,66030],{"class":335}," cks.",[68,66032,52169],{"class":82},[68,66034,3420],{"class":335},[68,66036,2498],{"class":331},[68,66038,12647],{"class":335},[68,66040,66041,66044,66046,66049],{"class":70,"line":17060},[68,66042,66043],{"class":335},"        cks[i].checked ",[68,66045,381],{"class":331},[68,66047,66048],{"class":82}," this",[68,66050,66051],{"class":335},".checked\n",[68,66053,66054],{"class":70,"line":17074},[68,66055,52599],{"class":335},[68,66057,66058],{"class":70,"line":17086},[68,66059,33662],{"class":335},[68,66061,66062],{"class":70,"line":17091},[68,66063,66064],{"class":393},"    \u002F\u002F 5. 小复选框控制大复选框\n",[68,66066,66067],{"class":70,"line":17104},[68,66068,2606],{"emptyLinePlaceholder":260},[68,66070,66071,66073,66075,66077,66079,66081,66083,66085,66087,66089,66091,66093,66095],{"class":70,"line":17109},[68,66072,3407],{"class":331},[68,66074,1865],{"class":335},[68,66076,52048],{"class":331},[68,66078,9643],{"class":335},[68,66080,381],{"class":331},[68,66082,4299],{"class":82},[68,66084,9650],{"class":335},[68,66086,1243],{"class":331},[68,66088,66030],{"class":335},[68,66090,52169],{"class":82},[68,66092,3420],{"class":335},[68,66094,2498],{"class":331},[68,66096,12647],{"class":335},[68,66098,66099],{"class":70,"line":17114},[68,66100,66101],{"class":393},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[68,66103,66104,66107,66109,66111,66113,66115,66117],{"class":70,"line":17119},[68,66105,66106],{"class":335},"      cks[i].",[68,66108,58014],{"class":74},[68,66110,336],{"class":335},[68,66112,58019],{"class":78},[68,66114,12640],{"class":335},[68,66116,54650],{"class":331},[68,66118,54653],{"class":335},[68,66120,66121],{"class":70,"line":17132},[68,66122,66123],{"class":393},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[68,66125,66126],{"class":70,"line":17137},[68,66127,66128],{"class":393},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[68,66130,66131],{"class":70,"line":32834},[68,66132,66133],{"class":393},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[68,66135,66136],{"class":70,"line":32840},[68,66137,66138],{"class":393},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[68,66140,66141,66144,66146,66148,66150,66152,66155,66157,66159,66161,66163],{"class":70,"line":32846},[68,66142,66143],{"class":335},"        checkAll.checked ",[68,66145,381],{"class":331},[68,66147,54597],{"class":335},[68,66149,55882],{"class":74},[68,66151,336],{"class":335},[68,66153,66154],{"class":78},"'.ck:checked'",[68,66156,31027],{"class":335},[68,66158,52169],{"class":82},[68,66160,58107],{"class":331},[68,66162,66030],{"class":335},[68,66164,56032],{"class":82},[68,66166,66167],{"class":70,"line":32852},[68,66168,65016],{"class":335},[68,66170,66171],{"class":70,"line":32858},[68,66172,2393],{"class":335},[68,66174,66175,66177,66179],{"class":70,"line":32869},[68,66176,52618],{"class":335},[68,66178,52014],{"class":51501},[68,66180,51508],{"class":335},[68,66182,66183,66185,66187],{"class":70,"line":32875},[68,66184,51986],{"class":335},[68,66186,52001],{"class":51501},[68,66188,51508],{"class":335},[68,66190,66191],{"class":70,"line":32895},[68,66192,2606],{"emptyLinePlaceholder":260},[68,66194,66195,66197,66199],{"class":70,"line":32901},[68,66196,51986],{"class":335},[68,66198,50836],{"class":51501},[68,66200,51508],{"class":335},[19,66202,66203],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66205,66206],{},"用好之间比较得到的布尔值！！！",[19,66208,66209,66210,66213,66214,1865,66217,917,66219,66222],{},"在 JS 里访问的时候，",[65,66211,66212],{},"checkbox.checked"," 是一个 ",[483,66215,66216],{},"布尔值",[65,66218,1570],{},[65,66220,66221],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66224,66225,66226,66229,66230],{},"HTML 的 ",[65,66227,66228],{},"checked=\"checked\""," 只是 ",[483,66231,66232,66233,66236],{},"初始值；JS 的 ",[65,66234,66235],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66238,66239],{},"：checked是一个伪类选择器",[19,66241,66242],{},[48,66243],{"alt":63,"src":66244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66246,66247,66250],{},[66248,66249],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66252,66253],{},[48,66254],{"alt":63,"src":66255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66257,66259],{"id":66258},"_33-dom事件进阶","3.3 DOM事件进阶",[301,66261,66263],{"id":66262},"_331-事件流","3.3.1 事件流",[19,66265,66266],{},[48,66267],{"alt":63,"src":66268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22203,66270,66272],{"id":66271},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66274,66275],{},[48,66276],{"alt":63,"src":66277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[58,66279,66281],{"className":50834,"code":66280,"language":50836,"meta":63,"style":63},"\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",[65,66282,66283,66293,66307,66311,66319,66333,66353,66365,66373,66380,66392,66404,66414,66418,66422,66429,66441,66453,66463,66467,66475,66483,66487,66495,66510,66529,66537,66545,66565,66585,66601,66612,66620,66637,66648,66656,66673,66684,66692,66700,66708,66712],{"__ignoreMap":63},[68,66284,66285,66287,66289,66291],{"class":70,"line":71},[68,66286,51498],{"class":335},[68,66288,51502],{"class":51501},[68,66290,51505],{"class":74},[68,66292,51508],{"class":335},[68,66294,66295,66297,66299,66301,66303,66305],{"class":70,"line":92},[68,66296,1243],{"class":335},[68,66298,50836],{"class":51501},[68,66300,51517],{"class":74},[68,66302,381],{"class":335},[68,66304,51522],{"class":78},[68,66306,51508],{"class":335},[68,66308,66309],{"class":70,"line":1387},[68,66310,2606],{"emptyLinePlaceholder":260},[68,66312,66313,66315,66317],{"class":70,"line":1402},[68,66314,1243],{"class":335},[68,66316,51535],{"class":51501},[68,66318,51508],{"class":335},[68,66320,66321,66323,66325,66327,66329,66331],{"class":70,"line":1408},[68,66322,52345],{"class":335},[68,66324,51545],{"class":51501},[68,66326,51548],{"class":74},[68,66328,381],{"class":335},[68,66330,51553],{"class":78},[68,66332,51508],{"class":335},[68,66334,66335,66337,66339,66341,66343,66345,66347,66349,66351],{"class":70,"line":1422},[68,66336,52345],{"class":335},[68,66338,51545],{"class":51501},[68,66340,15125],{"class":74},[68,66342,381],{"class":335},[68,66344,51592],{"class":78},[68,66346,51572],{"class":74},[68,66348,381],{"class":335},[68,66350,51599],{"class":78},[68,66352,51508],{"class":335},[68,66354,66355,66357,66359,66361,66363],{"class":70,"line":1428},[68,66356,52345],{"class":335},[68,66358,51608],{"class":51501},[68,66360,51611],{"class":335},[68,66362,51608],{"class":51501},[68,66364,51508],{"class":335},[68,66366,66367,66369,66371],{"class":70,"line":1519},[68,66368,52345],{"class":335},[68,66370,250],{"class":51501},[68,66372,51508],{"class":335},[68,66374,66375,66378],{"class":70,"line":1525},[68,66376,66377],{"class":74},"    .father",[68,66379,15777],{"class":335},[68,66381,66382,66384,66386,66388,66390],{"class":70,"line":1537},[68,66383,54972],{"class":82},[68,66385,51638],{"class":335},[68,66387,65275],{"class":82},[68,66389,51693],{"class":331},[68,66391,1498],{"class":335},[68,66393,66394,66396,66398,66400,66402],{"class":70,"line":1819},[68,66395,54986],{"class":82},[68,66397,51638],{"class":335},[68,66399,65275],{"class":82},[68,66401,51693],{"class":331},[68,66403,1498],{"class":335},[68,66405,66406,66408,66410,66412],{"class":70,"line":1824},[68,66407,55085],{"class":82},[68,66409,51638],{"class":335},[68,66411,51846],{"class":82},[68,66413,1498],{"class":335},[68,66415,66416],{"class":70,"line":1830},[68,66417,2393],{"class":335},[68,66419,66420],{"class":70,"line":1835},[68,66421,2606],{"emptyLinePlaceholder":260},[68,66423,66424,66427],{"class":70,"line":1849},[68,66425,66426],{"class":74},"    .son",[68,66428,15777],{"class":335},[68,66430,66431,66433,66435,66437,66439],{"class":70,"line":1854},[68,66432,54972],{"class":82},[68,66434,51638],{"class":335},[68,66436,1929],{"class":82},[68,66438,51693],{"class":331},[68,66440,1498],{"class":335},[68,66442,66443,66445,66447,66449,66451],{"class":70,"line":1860},[68,66444,54986],{"class":82},[68,66446,51638],{"class":335},[68,66448,1929],{"class":82},[68,66450,51693],{"class":331},[68,66452,1498],{"class":335},[68,66454,66455,66457,66459,66461],{"class":70,"line":1881},[68,66456,55085],{"class":82},[68,66458,51638],{"class":335},[68,66460,55090],{"class":82},[68,66462,1498],{"class":335},[68,66464,66465],{"class":70,"line":1886},[68,66466,2393],{"class":335},[68,66468,66469,66471,66473],{"class":70,"line":1900},[68,66470,52618],{"class":335},[68,66472,250],{"class":51501},[68,66474,51508],{"class":335},[68,66476,66477,66479,66481],{"class":70,"line":1905},[68,66478,51986],{"class":335},[68,66480,51535],{"class":51501},[68,66482,51508],{"class":335},[68,66484,66485],{"class":70,"line":1934},[68,66486,2606],{"emptyLinePlaceholder":260},[68,66488,66489,66491,66493],{"class":70,"line":1939},[68,66490,1243],{"class":335},[68,66492,52001],{"class":51501},[68,66494,51508],{"class":335},[68,66496,66497,66499,66501,66503,66505,66508],{"class":70,"line":1956},[68,66498,52345],{"class":335},[68,66500,51812],{"class":51501},[68,66502,53687],{"class":74},[68,66504,381],{"class":335},[68,66506,66507],{"class":78},"\"father\"",[68,66509,51508],{"class":335},[68,66511,66512,66514,66516,66518,66520,66523,66525,66527],{"class":70,"line":1961},[68,66513,51542],{"class":335},[68,66515,51812],{"class":51501},[68,66517,53687],{"class":74},[68,66519,381],{"class":335},[68,66521,66522],{"class":78},"\"son\"",[68,66524,55515],{"class":335},[68,66526,51812],{"class":51501},[68,66528,51508],{"class":335},[68,66530,66531,66533,66535],{"class":70,"line":1966},[68,66532,52618],{"class":335},[68,66534,51812],{"class":51501},[68,66536,51508],{"class":335},[68,66538,66539,66541,66543],{"class":70,"line":1971},[68,66540,52345],{"class":335},[68,66542,52014],{"class":51501},[68,66544,51508],{"class":335},[68,66546,66547,66549,66552,66554,66556,66558,66560,66563],{"class":70,"line":1985},[68,66548,11426],{"class":331},[68,66550,66551],{"class":82}," fa",[68,66553,13769],{"class":331},[68,66555,54597],{"class":335},[68,66557,54600],{"class":74},[68,66559,336],{"class":335},[68,66561,66562],{"class":78},"'.father'",[68,66564,342],{"class":335},[68,66566,66567,66569,66572,66574,66576,66578,66580,66583],{"class":70,"line":1990},[68,66568,11426],{"class":331},[68,66570,66571],{"class":82}," son",[68,66573,13769],{"class":331},[68,66575,54597],{"class":335},[68,66577,54600],{"class":74},[68,66579,336],{"class":335},[68,66581,66582],{"class":78},"'.son'",[68,66584,342],{"class":335},[68,66586,66587,66589,66591,66593,66595,66597,66599],{"class":70,"line":2783},[68,66588,52608],{"class":335},[68,66590,58014],{"class":74},[68,66592,336],{"class":335},[68,66594,58019],{"class":78},[68,66596,12640],{"class":335},[68,66598,54650],{"class":331},[68,66600,54653],{"class":335},[68,66602,66603,66605,66607,66610],{"class":70,"line":2797},[68,66604,59126],{"class":74},[68,66606,336],{"class":335},[68,66608,66609],{"class":78},"'woshiu1'",[68,66611,342],{"class":335},[68,66613,66614,66616,66618],{"class":70,"line":2805},[68,66615,54736],{"class":335},[68,66617,1570],{"class":82},[68,66619,342],{"class":335},[68,66621,66622,66625,66627,66629,66631,66633,66635],{"class":70,"line":2810},[68,66623,66624],{"class":335},"    fa.",[68,66626,58014],{"class":74},[68,66628,336],{"class":335},[68,66630,58019],{"class":78},[68,66632,12640],{"class":335},[68,66634,54650],{"class":331},[68,66636,54653],{"class":335},[68,66638,66639,66641,66643,66646],{"class":70,"line":2816},[68,66640,59126],{"class":74},[68,66642,336],{"class":335},[68,66644,66645],{"class":78},"'1'",[68,66647,342],{"class":335},[68,66649,66650,66652,66654],{"class":70,"line":2822},[68,66651,54736],{"class":335},[68,66653,1570],{"class":82},[68,66655,342],{"class":335},[68,66657,66658,66661,66663,66665,66667,66669,66671],{"class":70,"line":2827},[68,66659,66660],{"class":335},"    son.",[68,66662,58014],{"class":74},[68,66664,336],{"class":335},[68,66666,58019],{"class":78},[68,66668,12640],{"class":335},[68,66670,54650],{"class":331},[68,66672,54653],{"class":335},[68,66674,66675,66677,66679,66682],{"class":70,"line":8153},[68,66676,59126],{"class":74},[68,66678,336],{"class":335},[68,66680,66681],{"class":78},"'2'",[68,66683,342],{"class":335},[68,66685,66686,66688,66690],{"class":70,"line":8177},[68,66687,54736],{"class":335},[68,66689,1570],{"class":82},[68,66691,342],{"class":335},[68,66693,66694,66696,66698],{"class":70,"line":8182},[68,66695,52618],{"class":335},[68,66697,52014],{"class":51501},[68,66699,51508],{"class":335},[68,66701,66702,66704,66706],{"class":70,"line":8188},[68,66703,51986],{"class":335},[68,66705,52001],{"class":51501},[68,66707,51508],{"class":335},[68,66709,66710],{"class":70,"line":8215},[68,66711,2606],{"emptyLinePlaceholder":260},[68,66713,66714,66716,66718],{"class":70,"line":8220},[68,66715,51986],{"class":335},[68,66717,50836],{"class":51501},[68,66719,51508],{"class":335},[19,66721,66722],{},[48,66723],{"alt":63,"src":66724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66726,66727],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22203,66729,66731],{"id":66730},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66733,66734],{},[48,66735],{"alt":63,"src":66736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66738,66739],{},"反着来",[19,66741,66742],{},"注意是同名事件，比如都是‘click’",[22203,66744,66746],{"id":66745},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66748,66749],{},[48,66750],{"alt":63,"src":66751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22203,66753,66755],{"id":66754},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66757,66758],{},[48,66759],{"alt":63,"src":66760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66762,66763],{},[48,66764],{"alt":63,"src":66765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22203,66767,66769],{"id":66768},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[23,66771,66772],{},[26,66773,66774],{},"事件类型的区别",[19,66776,66777],{},[48,66778],{"alt":63,"src":66779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66781,66782],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[23,66784,66785],{"start":92},[26,66786,66787],{},"注册事件的区别",[19,66789,66790],{},[48,66791],{"alt":63,"src":66792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22203,66794,66796],{"id":66795},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66798,66799],{},[48,66800],{"alt":63,"src":66801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66803,66804],{},[48,66805],{"alt":63,"src":66806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[58,66808,66810],{"className":53268,"code":66809,"language":53270,"meta":63,"style":63},"\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",[65,66811,66812,66820,66837,66860,66868,66873,66878,66883,66887,66895,66903],{"__ignoreMap":63},[68,66813,66814,66816,66818],{"class":70,"line":71},[68,66815,1243],{"class":335},[68,66817,52001],{"class":51501},[68,66819,51508],{"class":335},[68,66821,66822,66824,66827,66830,66832,66835],{"class":70,"line":92},[68,66823,52345],{"class":335},[68,66825,66826],{"class":51501},"form",[68,66828,66829],{"class":74}," action",[68,66831,381],{"class":335},[68,66833,66834],{"class":78},"\"http:\u002F\u002Fwww.itcast.cn\"",[68,66836,51508],{"class":335},[68,66838,66839,66841,66843,66845,66847,66850,66853,66855,66858],{"class":70,"line":1387},[68,66840,51542],{"class":335},[68,66842,54022],{"class":51501},[68,66844,54025],{"class":74},[68,66846,381],{"class":335},[68,66848,66849],{"class":78},"\"submit\"",[68,66851,66852],{"class":74}," value",[68,66854,381],{"class":335},[68,66856,66857],{"class":78},"\"免费注册\"",[68,66859,51508],{"class":335},[68,66861,66862,66864,66866],{"class":70,"line":1402},[68,66863,51542],{"class":335},[68,66865,52014],{"class":51501},[68,66867,51508],{"class":335},[68,66869,66870],{"class":70,"line":1408},[68,66871,66872],{"class":335},"      const form = document.querySelector('form')\n",[68,66874,66875],{"class":70,"line":1422},[68,66876,66877],{"class":335},"      form.addEventListener('submit', function (e) {\n",[68,66879,66880],{"class":70,"line":1428},[68,66881,66882],{"class":335},"        e.preventDefault()\n",[68,66884,66885],{"class":70,"line":1519},[68,66886,65016],{"class":335},[68,66888,66889,66891,66893],{"class":70,"line":1525},[68,66890,51977],{"class":335},[68,66892,52014],{"class":51501},[68,66894,51508],{"class":335},[68,66896,66897,66899,66901],{"class":70,"line":1537},[68,66898,52618],{"class":335},[68,66900,66826],{"class":51501},[68,66902,51508],{"class":335},[68,66904,66905,66907,66909],{"class":70,"line":1819},[68,66906,51986],{"class":335},[68,66908,52001],{"class":51501},[68,66910,51508],{"class":335},[19,66912,66913],{},"点击不在跳转！！！",[301,66915,66917],{"id":66916},"_332-事件委托","3.3.2 事件委托",[19,66919,66920],{},[48,66921],{"alt":63,"src":66922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[58,66924,66926],{"className":50834,"code":66925,"language":50836,"meta":63,"style":63},"\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",[65,66927,66928,66938,66952,66956,66964,66978,66998,67010,67018,67022,67030,67038,67050,67062,67074,67086,67098,67111,67119,67127,67132,67151,67172,67177,67182,67187,67192,67201,67205,67215,67219,67224,67229,67243,67253,67257,67261,67269,67277,67281],{"__ignoreMap":63},[68,66929,66930,66932,66934,66936],{"class":70,"line":71},[68,66931,51498],{"class":335},[68,66933,51502],{"class":51501},[68,66935,51505],{"class":74},[68,66937,51508],{"class":335},[68,66939,66940,66942,66944,66946,66948,66950],{"class":70,"line":92},[68,66941,1243],{"class":335},[68,66943,50836],{"class":51501},[68,66945,51517],{"class":74},[68,66947,381],{"class":335},[68,66949,51522],{"class":78},[68,66951,51508],{"class":335},[68,66953,66954],{"class":70,"line":1387},[68,66955,2606],{"emptyLinePlaceholder":260},[68,66957,66958,66960,66962],{"class":70,"line":1402},[68,66959,1243],{"class":335},[68,66961,51535],{"class":51501},[68,66963,51508],{"class":335},[68,66965,66966,66968,66970,66972,66974,66976],{"class":70,"line":1408},[68,66967,52345],{"class":335},[68,66969,51545],{"class":51501},[68,66971,51548],{"class":74},[68,66973,381],{"class":335},[68,66975,51553],{"class":78},[68,66977,51508],{"class":335},[68,66979,66980,66982,66984,66986,66988,66990,66992,66994,66996],{"class":70,"line":1422},[68,66981,52345],{"class":335},[68,66983,51545],{"class":51501},[68,66985,15125],{"class":74},[68,66987,381],{"class":335},[68,66989,51592],{"class":78},[68,66991,51572],{"class":74},[68,66993,381],{"class":335},[68,66995,51599],{"class":78},[68,66997,51508],{"class":335},[68,66999,67000,67002,67004,67006,67008],{"class":70,"line":1428},[68,67001,52345],{"class":335},[68,67003,51608],{"class":51501},[68,67005,51611],{"class":335},[68,67007,51608],{"class":51501},[68,67009,51508],{"class":335},[68,67011,67012,67014,67016],{"class":70,"line":1519},[68,67013,51986],{"class":335},[68,67015,51535],{"class":51501},[68,67017,51508],{"class":335},[68,67019,67020],{"class":70,"line":1525},[68,67021,2606],{"emptyLinePlaceholder":260},[68,67023,67024,67026,67028],{"class":70,"line":1537},[68,67025,1243],{"class":335},[68,67027,52001],{"class":51501},[68,67029,51508],{"class":335},[68,67031,67032,67034,67036],{"class":70,"line":1819},[68,67033,52345],{"class":335},[68,67035,42],{"class":51501},[68,67037,51508],{"class":335},[68,67039,67040,67042,67044,67046,67048],{"class":70,"line":1824},[68,67041,51542],{"class":335},[68,67043,26],{"class":51501},[68,67045,54167],{"class":335},[68,67047,26],{"class":51501},[68,67049,51508],{"class":335},[68,67051,67052,67054,67056,67058,67060],{"class":70,"line":1830},[68,67053,51542],{"class":335},[68,67055,26],{"class":51501},[68,67057,54186],{"class":335},[68,67059,26],{"class":51501},[68,67061,51508],{"class":335},[68,67063,67064,67066,67068,67070,67072],{"class":70,"line":1835},[68,67065,51542],{"class":335},[68,67067,26],{"class":51501},[68,67069,54205],{"class":335},[68,67071,26],{"class":51501},[68,67073,51508],{"class":335},[68,67075,67076,67078,67080,67082,67084],{"class":70,"line":1849},[68,67077,51542],{"class":335},[68,67079,26],{"class":51501},[68,67081,54224],{"class":335},[68,67083,26],{"class":51501},[68,67085,51508],{"class":335},[68,67087,67088,67090,67092,67094,67096],{"class":70,"line":1854},[68,67089,51542],{"class":335},[68,67091,26],{"class":51501},[68,67093,54243],{"class":335},[68,67095,26],{"class":51501},[68,67097,51508],{"class":335},[68,67099,67100,67102,67104,67107,67109],{"class":70,"line":1860},[68,67101,51542],{"class":335},[68,67103,19],{"class":51501},[68,67105,67106],{"class":335},">我不需要变色\u003C\u002F",[68,67108,19],{"class":51501},[68,67110,51508],{"class":335},[68,67112,67113,67115,67117],{"class":70,"line":1881},[68,67114,52618],{"class":335},[68,67116,42],{"class":51501},[68,67118,51508],{"class":335},[68,67120,67121,67123,67125],{"class":70,"line":1886},[68,67122,52345],{"class":335},[68,67124,52014],{"class":51501},[68,67126,51508],{"class":335},[68,67128,67129],{"class":70,"line":1900},[68,67130,67131],{"class":393},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[68,67133,67134,67136,67138,67140,67142,67144,67146,67149],{"class":70,"line":1905},[68,67135,11426],{"class":331},[68,67137,61493],{"class":82},[68,67139,13769],{"class":331},[68,67141,54597],{"class":335},[68,67143,54600],{"class":74},[68,67145,336],{"class":335},[68,67147,67148],{"class":78},"'ul'",[68,67150,342],{"class":335},[68,67152,67153,67156,67158,67160,67162,67164,67166,67168,67170],{"class":70,"line":1934},[68,67154,67155],{"class":335},"    ul.",[68,67157,58014],{"class":74},[68,67159,336],{"class":335},[68,67161,58019],{"class":78},[68,67163,12640],{"class":335},[68,67165,54650],{"class":331},[68,67167,1865],{"class":335},[68,67169,409],{"class":5421},[68,67171,12647],{"class":335},[68,67173,67174],{"class":70,"line":1939},[68,67175,67176],{"class":393},"      \u002F\u002F alert(1)\n",[68,67178,67179],{"class":70,"line":1956},[68,67180,67181],{"class":393},"      \u002F\u002F e.target就是我们点击的对象\n",[68,67183,67184],{"class":70,"line":1961},[68,67185,67186],{"class":393},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[68,67188,67189],{"class":70,"line":1966},[68,67190,67191],{"class":393},"      \u002F\u002F e.target.style.color = 'red'\n",[68,67193,67194,67196,67198],{"class":70,"line":1971},[68,67195,58445],{"class":335},[68,67197,58448],{"class":74},[68,67199,67200],{"class":335},"(e)\n",[68,67202,67203],{"class":70,"line":1985},[68,67204,2606],{"emptyLinePlaceholder":260},[68,67206,67207,67209,67212],{"class":70,"line":1990},[68,67208,58445],{"class":335},[68,67210,67211],{"class":74},"dir",[68,67213,67214],{"class":335},"(e.target)\n",[68,67216,67217],{"class":70,"line":2783},[68,67218,2606],{"emptyLinePlaceholder":260},[68,67220,67221],{"class":70,"line":2797},[68,67222,67223],{"class":393},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[68,67225,67226],{"class":70,"line":2805},[68,67227,67228],{"class":393},"      \u002F\u002F 通过tagName来进行判断\n",[68,67230,67231,67233,67236,67238,67241],{"class":70,"line":2810},[68,67232,54681],{"class":331},[68,67234,67235],{"class":335}," (e.target.tagName ",[68,67237,54687],{"class":331},[68,67239,67240],{"class":78}," 'LI'",[68,67242,12647],{"class":335},[68,67244,67245,67248,67250],{"class":70,"line":2816},[68,67246,67247],{"class":335},"        e.target.style.color ",[68,67249,381],{"class":331},[68,67251,67252],{"class":78}," 'red'\n",[68,67254,67255],{"class":70,"line":2822},[68,67256,52599],{"class":335},[68,67258,67259],{"class":70,"line":2827},[68,67260,33662],{"class":335},[68,67262,67263,67265,67267],{"class":70,"line":8153},[68,67264,52618],{"class":335},[68,67266,52014],{"class":51501},[68,67268,51508],{"class":335},[68,67270,67271,67273,67275],{"class":70,"line":8177},[68,67272,51986],{"class":335},[68,67274,52001],{"class":51501},[68,67276,51508],{"class":335},[68,67278,67279],{"class":70,"line":8182},[68,67280,2606],{"emptyLinePlaceholder":260},[68,67282,67283,67285,67287],{"class":70,"line":8188},[68,67284,51986],{"class":335},[68,67286,50836],{"class":51501},[68,67288,51508],{"class":335},[19,67290,67291],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67293,67294],{},"if(e.target.ragName==='P') {}",[19,67296,67297],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67299,67300],{},"通过事件委托的方式实现tab栏切换改造：",[19,67302,67303],{},"一定要记住自定义属性！！！！！！",[19,67305,67306],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67308,67309],{},"id是自定义的属性名",[19,67311,67312],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[58,67314,67316],{"className":50834,"code":67315,"language":50836,"meta":63,"style":63},"\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",[65,67317,67318,67328,67342,67346,67354,67368,67388,67408,67420,67428,67434,67444,67454,67458,67462,67468,67480,67492,67504,67520,67524,67528,67534,67546,67558,67570,67580,67590,67594,67598,67606,67618,67628,67640,67644,67648,67656,67666,67676,67686,67690,67694,67704,67718,67730,67734,67738,67750,67760,67776,67786,67790,67794,67808,67818,67828,67832,67836,67842,67856,67860,67864,67872,67882,67886,67890,67899,67909,67913,67921,67929,67933,67941,67955,67969,67981,67989,68028,68060,68092,68124,68156,68164,68172,68186,68220,68254,68288,68322,68356,68364,68372,68380,68385,68390,68409,68414,68434,68442,68447,68460,68481,68494,68498,68503,68508,68521,68541,68569,68573,68577,68581,68589,68597,68601],{"__ignoreMap":63},[68,67319,67320,67322,67324,67326],{"class":70,"line":71},[68,67321,51498],{"class":335},[68,67323,51502],{"class":51501},[68,67325,51505],{"class":74},[68,67327,51508],{"class":335},[68,67329,67330,67332,67334,67336,67338,67340],{"class":70,"line":92},[68,67331,1243],{"class":335},[68,67333,50836],{"class":51501},[68,67335,51517],{"class":74},[68,67337,381],{"class":335},[68,67339,51522],{"class":78},[68,67341,51508],{"class":335},[68,67343,67344],{"class":70,"line":1387},[68,67345,2606],{"emptyLinePlaceholder":260},[68,67347,67348,67350,67352],{"class":70,"line":1402},[68,67349,1243],{"class":335},[68,67351,51535],{"class":51501},[68,67353,51508],{"class":335},[68,67355,67356,67358,67360,67362,67364,67366],{"class":70,"line":1408},[68,67357,52345],{"class":335},[68,67359,51545],{"class":51501},[68,67361,51548],{"class":74},[68,67363,381],{"class":335},[68,67365,51553],{"class":78},[68,67367,59328],{"class":335},[68,67369,67370,67372,67374,67376,67378,67380,67382,67384,67386],{"class":70,"line":1422},[68,67371,52345],{"class":335},[68,67373,51545],{"class":51501},[68,67375,51564],{"class":74},[68,67377,381],{"class":335},[68,67379,51569],{"class":78},[68,67381,51572],{"class":74},[68,67383,381],{"class":335},[68,67385,51577],{"class":78},[68,67387,59328],{"class":335},[68,67389,67390,67392,67394,67396,67398,67400,67402,67404,67406],{"class":70,"line":1428},[68,67391,52345],{"class":335},[68,67393,51545],{"class":51501},[68,67395,15125],{"class":74},[68,67397,381],{"class":335},[68,67399,51592],{"class":78},[68,67401,51572],{"class":74},[68,67403,381],{"class":335},[68,67405,51599],{"class":78},[68,67407,59328],{"class":335},[68,67409,67410,67412,67414,67416,67418],{"class":70,"line":1519},[68,67411,52345],{"class":335},[68,67413,51608],{"class":51501},[68,67415,63826],{"class":335},[68,67417,51608],{"class":51501},[68,67419,51508],{"class":335},[68,67421,67422,67424,67426],{"class":70,"line":1525},[68,67423,52345],{"class":335},[68,67425,250],{"class":51501},[68,67427,51508],{"class":335},[68,67429,67430,67432],{"class":70,"line":1537},[68,67431,6608],{"class":51501},[68,67433,15777],{"class":335},[68,67435,67436,67438,67440,67442],{"class":70,"line":1819},[68,67437,54907],{"class":82},[68,67439,51638],{"class":335},[68,67441,525],{"class":82},[68,67443,1498],{"class":335},[68,67445,67446,67448,67450,67452],{"class":70,"line":1824},[68,67447,54896],{"class":82},[68,67449,51638],{"class":335},[68,67451,525],{"class":82},[68,67453,1498],{"class":335},[68,67455,67456],{"class":70,"line":1830},[68,67457,2393],{"class":335},[68,67459,67460],{"class":70,"line":1835},[68,67461,2606],{"emptyLinePlaceholder":260},[68,67463,67464,67466],{"class":70,"line":1849},[68,67465,63877],{"class":74},[68,67467,15777],{"class":335},[68,67469,67470,67472,67474,67476,67478],{"class":70,"line":1854},[68,67471,54972],{"class":82},[68,67473,51638],{"class":335},[68,67475,63888],{"class":82},[68,67477,51693],{"class":331},[68,67479,1498],{"class":335},[68,67481,67482,67484,67486,67488,67490],{"class":70,"line":1860},[68,67483,54986],{"class":82},[68,67485,51638],{"class":335},[68,67487,63901],{"class":82},[68,67489,51693],{"class":331},[68,67491,1498],{"class":335},[68,67493,67494,67496,67498,67500,67502],{"class":70,"line":1881},[68,67495,54907],{"class":82},[68,67497,51638],{"class":335},[68,67499,1033],{"class":82},[68,67501,51693],{"class":331},[68,67503,1498],{"class":335},[68,67505,67506,67508,67510,67512,67514,67516,67518],{"class":70,"line":1886},[68,67507,62178],{"class":82},[68,67509,51638],{"class":335},[68,67511,551],{"class":82},[68,67513,51693],{"class":331},[68,67515,51722],{"class":82},[68,67517,62445],{"class":82},[68,67519,1498],{"class":335},[68,67521,67522],{"class":70,"line":1900},[68,67523,2393],{"class":335},[68,67525,67526],{"class":70,"line":1905},[68,67527,2606],{"emptyLinePlaceholder":260},[68,67529,67530,67532],{"class":70,"line":1934},[68,67531,63946],{"class":74},[68,67533,15777],{"class":335},[68,67535,67536,67538,67540,67542,67544],{"class":70,"line":1939},[68,67537,54972],{"class":82},[68,67539,51638],{"class":335},[68,67541,644],{"class":82},[68,67543,661],{"class":331},[68,67545,1498],{"class":335},[68,67547,67548,67550,67552,67554,67556],{"class":70,"line":1956},[68,67549,54986],{"class":82},[68,67551,51638],{"class":335},[68,67553,1240],{"class":82},[68,67555,51693],{"class":331},[68,67557,1498],{"class":335},[68,67559,67560,67562,67564,67566,67568],{"class":70,"line":1961},[68,67561,57560],{"class":82},[68,67563,51638],{"class":335},[68,67565,1240],{"class":82},[68,67567,51693],{"class":331},[68,67569,1498],{"class":335},[68,67571,67572,67574,67576,67578],{"class":70,"line":1966},[68,67573,55210],{"class":82},[68,67575,51638],{"class":335},[68,67577,51678],{"class":82},[68,67579,1498],{"class":335},[68,67581,67582,67584,67586,67588],{"class":70,"line":1971},[68,67583,55221],{"class":82},[68,67585,51638],{"class":335},[68,67587,51869],{"class":82},[68,67589,1498],{"class":335},[68,67591,67592],{"class":70,"line":1985},[68,67593,2393],{"class":335},[68,67595,67596],{"class":70,"line":1990},[68,67597,2606],{"emptyLinePlaceholder":260},[68,67599,67600,67602,67604],{"class":70,"line":2783},[68,67601,63946],{"class":74},[68,67603,64019],{"class":51501},[68,67605,15777],{"class":335},[68,67607,67608,67610,67612,67614,67616],{"class":70,"line":2797},[68,67609,55123],{"class":82},[68,67611,51638],{"class":335},[68,67613,1133],{"class":82},[68,67615,51693],{"class":331},[68,67617,1498],{"class":335},[68,67619,67620,67622,67624,67626],{"class":70,"line":2805},[68,67621,62535],{"class":82},[68,67623,51638],{"class":335},[68,67625,64042],{"class":82},[68,67627,1498],{"class":335},[68,67629,67630,67632,67634,67636,67638],{"class":70,"line":2810},[68,67631,62201],{"class":82},[68,67633,51638],{"class":335},[68,67635,1033],{"class":82},[68,67637,51693],{"class":331},[68,67639,1498],{"class":335},[68,67641,67642],{"class":70,"line":2816},[68,67643,2393],{"class":335},[68,67645,67646],{"class":70,"line":2822},[68,67647,2606],{"emptyLinePlaceholder":260},[68,67649,67650,67652,67654],{"class":70,"line":2827},[68,67651,63946],{"class":74},[68,67653,61493],{"class":51501},[68,67655,15777],{"class":335},[68,67657,67658,67660,67662,67664],{"class":70,"line":8153},[68,67659,54933],{"class":82},[68,67661,51638],{"class":335},[68,67663,54938],{"class":82},[68,67665,1498],{"class":335},[68,67667,67668,67670,67672,67674],{"class":70,"line":8177},[68,67669,55210],{"class":82},[68,67671,51638],{"class":335},[68,67673,51678],{"class":82},[68,67675,1498],{"class":335},[68,67677,67678,67680,67682,67684],{"class":70,"line":8182},[68,67679,55221],{"class":82},[68,67681,51638],{"class":335},[68,67683,51781],{"class":82},[68,67685,1498],{"class":335},[68,67687,67688],{"class":70,"line":8188},[68,67689,2393],{"class":335},[68,67691,67692],{"class":70,"line":8215},[68,67693,2606],{"emptyLinePlaceholder":260},[68,67695,67696,67698,67700,67702],{"class":70,"line":8220},[68,67697,63946],{"class":74},[68,67699,61493],{"class":51501},[68,67701,55276],{"class":51501},[68,67703,15777],{"class":335},[68,67705,67706,67708,67710,67712,67714,67716],{"class":70,"line":8226},[68,67707,54907],{"class":82},[68,67709,51638],{"class":335},[68,67711,525],{"class":82},[68,67713,9155],{"class":82},[68,67715,51693],{"class":331},[68,67717,1498],{"class":335},[68,67719,67720,67722,67724,67726,67728],{"class":70,"line":8238},[68,67721,55123],{"class":82},[68,67723,51638],{"class":335},[68,67725,882],{"class":82},[68,67727,51693],{"class":331},[68,67729,1498],{"class":335},[68,67731,67732],{"class":70,"line":8250},[68,67733,2393],{"class":335},[68,67735,67736],{"class":70,"line":8262},[68,67737,2606],{"emptyLinePlaceholder":260},[68,67739,67740,67742,67744,67746,67748],{"class":70,"line":9921},[68,67741,63946],{"class":74},[68,67743,61493],{"class":51501},[68,67745,55276],{"class":51501},[68,67747,1606],{"class":51501},[68,67749,15777],{"class":335},[68,67751,67752,67754,67756,67758],{"class":70,"line":9946},[68,67753,64171],{"class":82},[68,67755,51638],{"class":335},[68,67757,54938],{"class":82},[68,67759,1498],{"class":335},[68,67761,67762,67764,67766,67768,67770,67772,67774],{"class":70,"line":9969},[68,67763,62433],{"class":82},[68,67765,51638],{"class":335},[68,67767,412],{"class":82},[68,67769,51693],{"class":331},[68,67771,51722],{"class":82},[68,67773,64192],{"class":82},[68,67775,1498],{"class":335},[68,67777,67778,67780,67782,67784],{"class":70,"line":9993},[68,67779,57617],{"class":82},[68,67781,51638],{"class":335},[68,67783,62570],{"class":82},[68,67785,1498],{"class":335},[68,67787,67788],{"class":70,"line":9998},[68,67789,2393],{"class":335},[68,67791,67792],{"class":70,"line":10003},[68,67793,2606],{"emptyLinePlaceholder":260},[68,67795,67796,67798,67800,67802,67804,67806],{"class":70,"line":10008},[68,67797,63946],{"class":74},[68,67799,61493],{"class":51501},[68,67801,55276],{"class":51501},[68,67803,1606],{"class":51501},[68,67805,64225],{"class":74},[68,67807,15777],{"class":335},[68,67809,67810,67812,67814,67816],{"class":70,"line":10017},[68,67811,61992],{"class":82},[68,67813,51638],{"class":335},[68,67815,64236],{"class":82},[68,67817,1498],{"class":335},[68,67819,67820,67822,67824,67826],{"class":70,"line":10022},[68,67821,57617],{"class":82},[68,67823,51638],{"class":335},[68,67825,64236],{"class":82},[68,67827,1498],{"class":335},[68,67829,67830],{"class":70,"line":10028},[68,67831,2393],{"class":335},[68,67833,67834],{"class":70,"line":10049},[68,67835,2606],{"emptyLinePlaceholder":260},[68,67837,67838,67840],{"class":70,"line":10055},[68,67839,64261],{"class":74},[68,67841,15777],{"class":335},[68,67843,67844,67846,67848,67850,67852,67854],{"class":70,"line":10069},[68,67845,54896],{"class":82},[68,67847,51638],{"class":335},[68,67849,525],{"class":82},[68,67851,64274],{"class":82},[68,67853,51693],{"class":331},[68,67855,1498],{"class":335},[68,67857,67858],{"class":70,"line":10075},[68,67859,2393],{"class":335},[68,67861,67862],{"class":70,"line":10102},[68,67863,2606],{"emptyLinePlaceholder":260},[68,67865,67866,67868,67870],{"class":70,"line":10111},[68,67867,64261],{"class":74},[68,67869,62375],{"class":74},[68,67871,15777],{"class":335},[68,67873,67874,67876,67878,67880],{"class":70,"line":10117},[68,67875,55210],{"class":82},[68,67877,51638],{"class":335},[68,67879,54938],{"class":82},[68,67881,1498],{"class":335},[68,67883,67884],{"class":70,"line":10125},[68,67885,2393],{"class":335},[68,67887,67888],{"class":70,"line":10130},[68,67889,2606],{"emptyLinePlaceholder":260},[68,67891,67892,67894,67897],{"class":70,"line":16809},[68,67893,64261],{"class":74},[68,67895,67896],{"class":74}," .active",[68,67898,15777],{"class":335},[68,67900,67901,67903,67905,67907],{"class":70,"line":16815},[68,67902,55210],{"class":82},[68,67904,51638],{"class":335},[68,67906,61070],{"class":82},[68,67908,1498],{"class":335},[68,67910,67911],{"class":70,"line":16838},[68,67912,2393],{"class":335},[68,67914,67915,67917,67919],{"class":70,"line":16844},[68,67916,52618],{"class":335},[68,67918,250],{"class":51501},[68,67920,51508],{"class":335},[68,67922,67923,67925,67927],{"class":70,"line":16867},[68,67924,51986],{"class":335},[68,67926,51535],{"class":51501},[68,67928,51508],{"class":335},[68,67930,67931],{"class":70,"line":16881},[68,67932,2606],{"emptyLinePlaceholder":260},[68,67934,67935,67937,67939],{"class":70,"line":16901},[68,67936,1243],{"class":335},[68,67938,52001],{"class":51501},[68,67940,51508],{"class":335},[68,67942,67943,67945,67947,67949,67951,67953],{"class":70,"line":16907},[68,67944,52345],{"class":335},[68,67946,51812],{"class":51501},[68,67948,53687],{"class":74},[68,67950,381],{"class":335},[68,67952,64376],{"class":78},[68,67954,51508],{"class":335},[68,67956,67957,67959,67961,67963,67965,67967],{"class":70,"line":16918},[68,67958,51542],{"class":335},[68,67960,51812],{"class":51501},[68,67962,53687],{"class":74},[68,67964,381],{"class":335},[68,67966,64391],{"class":78},[68,67968,51508],{"class":335},[68,67970,67971,67973,67975,67977,67979],{"class":70,"line":16941},[68,67972,55435],{"class":335},[68,67974,301],{"class":51501},[68,67976,64402],{"class":335},[68,67978,301],{"class":51501},[68,67980,51508],{"class":335},[68,67982,67983,67985,67987],{"class":70,"line":16963},[68,67984,55435],{"class":335},[68,67986,42],{"class":51501},[68,67988,51508],{"class":335},[68,67990,67991,67993,67995,67997,67999,68001,68003,68005,68007,68009,68011,68013,68015,68018,68020,68022,68024,68026],{"class":70,"line":16968},[68,67992,55503],{"class":335},[68,67994,26],{"class":51501},[68,67996,61253],{"class":335},[68,67998,30],{"class":51501},[68,68000,53687],{"class":74},[68,68002,381],{"class":335},[68,68004,59907],{"class":78},[68,68006,61258],{"class":74},[68,68008,381],{"class":335},[68,68010,64437],{"class":78},[68,68012,54152],{"class":74},[68,68014,381],{"class":335},[68,68016,68017],{"class":78},"\"0\"",[68,68019,64440],{"class":335},[68,68021,30],{"class":51501},[68,68023,55515],{"class":335},[68,68025,26],{"class":51501},[68,68027,51508],{"class":335},[68,68029,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058],{"class":70,"line":16974},[68,68031,55503],{"class":335},[68,68033,26],{"class":51501},[68,68035,61253],{"class":335},[68,68037,30],{"class":51501},[68,68039,61258],{"class":74},[68,68041,381],{"class":335},[68,68043,64437],{"class":78},[68,68045,54152],{"class":74},[68,68047,381],{"class":335},[68,68049,3884],{"class":78},[68,68051,64467],{"class":335},[68,68053,30],{"class":51501},[68,68055,55515],{"class":335},[68,68057,26],{"class":51501},[68,68059,51508],{"class":335},[68,68061,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090],{"class":70,"line":16988},[68,68063,55503],{"class":335},[68,68065,26],{"class":51501},[68,68067,61253],{"class":335},[68,68069,30],{"class":51501},[68,68071,61258],{"class":74},[68,68073,381],{"class":335},[68,68075,64437],{"class":78},[68,68077,54152],{"class":74},[68,68079,381],{"class":335},[68,68081,3907],{"class":78},[68,68083,64494],{"class":335},[68,68085,30],{"class":51501},[68,68087,55515],{"class":335},[68,68089,26],{"class":51501},[68,68091,51508],{"class":335},[68,68093,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122],{"class":70,"line":17001},[68,68095,55503],{"class":335},[68,68097,26],{"class":51501},[68,68099,61253],{"class":335},[68,68101,30],{"class":51501},[68,68103,61258],{"class":74},[68,68105,381],{"class":335},[68,68107,64437],{"class":78},[68,68109,54152],{"class":74},[68,68111,381],{"class":335},[68,68113,3920],{"class":78},[68,68115,64521],{"class":335},[68,68117,30],{"class":51501},[68,68119,55515],{"class":335},[68,68121,26],{"class":51501},[68,68123,51508],{"class":335},[68,68125,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154],{"class":70,"line":17006},[68,68127,55503],{"class":335},[68,68129,26],{"class":51501},[68,68131,61253],{"class":335},[68,68133,30],{"class":51501},[68,68135,61258],{"class":74},[68,68137,381],{"class":335},[68,68139,64437],{"class":78},[68,68141,54152],{"class":74},[68,68143,381],{"class":335},[68,68145,3933],{"class":78},[68,68147,64548],{"class":335},[68,68149,30],{"class":51501},[68,68151,55515],{"class":335},[68,68153,26],{"class":51501},[68,68155,51508],{"class":335},[68,68157,68158,68160,68162],{"class":70,"line":17020},[68,68159,55608],{"class":335},[68,68161,42],{"class":51501},[68,68163,51508],{"class":335},[68,68165,68166,68168,68170],{"class":70,"line":17025},[68,68167,51977],{"class":335},[68,68169,51812],{"class":51501},[68,68171,51508],{"class":335},[68,68173,68174,68176,68178,68180,68182,68184],{"class":70,"line":17031},[68,68175,51542],{"class":335},[68,68177,51812],{"class":51501},[68,68179,53687],{"class":74},[68,68181,381],{"class":335},[68,68183,64585],{"class":78},[68,68185,51508],{"class":335},[68,68187,68188,68190,68192,68194,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218],{"class":70,"line":17036},[68,68189,55435],{"class":335},[68,68191,51812],{"class":51501},[68,68193,53687],{"class":74},[68,68195,381],{"class":335},[68,68197,64600],{"class":78},[68,68199,61253],{"class":335},[68,68201,48],{"class":51501},[68,68203,55440],{"class":74},[68,68205,381],{"class":335},[68,68207,64611],{"class":78},[68,68209,55448],{"class":74},[68,68211,381],{"class":335},[68,68213,7857],{"class":78},[68,68215,64620],{"class":335},[68,68217,51812],{"class":51501},[68,68219,51508],{"class":335},[68,68221,68222,68224,68226,68228,68230,68232,68234,68236,68238,68240,68242,68244,68246,68248,68250,68252],{"class":70,"line":17050},[68,68223,55435],{"class":335},[68,68225,51812],{"class":51501},[68,68227,53687],{"class":74},[68,68229,381],{"class":335},[68,68231,62824],{"class":78},[68,68233,61253],{"class":335},[68,68235,48],{"class":51501},[68,68237,55440],{"class":74},[68,68239,381],{"class":335},[68,68241,64647],{"class":78},[68,68243,55448],{"class":74},[68,68245,381],{"class":335},[68,68247,7857],{"class":78},[68,68249,64620],{"class":335},[68,68251,51812],{"class":51501},[68,68253,51508],{"class":335},[68,68255,68256,68258,68260,68262,68264,68266,68268,68270,68272,68274,68276,68278,68280,68282,68284,68286],{"class":70,"line":17055},[68,68257,55435],{"class":335},[68,68259,51812],{"class":51501},[68,68261,53687],{"class":74},[68,68263,381],{"class":335},[68,68265,62824],{"class":78},[68,68267,61253],{"class":335},[68,68269,48],{"class":51501},[68,68271,55440],{"class":74},[68,68273,381],{"class":335},[68,68275,64682],{"class":78},[68,68277,55448],{"class":74},[68,68279,381],{"class":335},[68,68281,7857],{"class":78},[68,68283,64620],{"class":335},[68,68285,51812],{"class":51501},[68,68287,51508],{"class":335},[68,68289,68290,68292,68294,68296,68298,68300,68302,68304,68306,68308,68310,68312,68314,68316,68318,68320],{"class":70,"line":17060},[68,68291,55435],{"class":335},[68,68293,51812],{"class":51501},[68,68295,53687],{"class":74},[68,68297,381],{"class":335},[68,68299,62824],{"class":78},[68,68301,61253],{"class":335},[68,68303,48],{"class":51501},[68,68305,55440],{"class":74},[68,68307,381],{"class":335},[68,68309,64717],{"class":78},[68,68311,55448],{"class":74},[68,68313,381],{"class":335},[68,68315,7857],{"class":78},[68,68317,64620],{"class":335},[68,68319,51812],{"class":51501},[68,68321,51508],{"class":335},[68,68323,68324,68326,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346,68348,68350,68352,68354],{"class":70,"line":17074},[68,68325,55435],{"class":335},[68,68327,51812],{"class":51501},[68,68329,53687],{"class":74},[68,68331,381],{"class":335},[68,68333,62824],{"class":78},[68,68335,61253],{"class":335},[68,68337,48],{"class":51501},[68,68339,55440],{"class":74},[68,68341,381],{"class":335},[68,68343,64752],{"class":78},[68,68345,55448],{"class":74},[68,68347,381],{"class":335},[68,68349,7857],{"class":78},[68,68351,64620],{"class":335},[68,68353,51812],{"class":51501},[68,68355,51508],{"class":335},[68,68357,68358,68360,68362],{"class":70,"line":17086},[68,68359,51977],{"class":335},[68,68361,51812],{"class":51501},[68,68363,51508],{"class":335},[68,68365,68366,68368,68370],{"class":70,"line":17091},[68,68367,52618],{"class":335},[68,68369,51812],{"class":51501},[68,68371,51508],{"class":335},[68,68373,68374,68376,68378],{"class":70,"line":17104},[68,68375,52345],{"class":335},[68,68377,52014],{"class":51501},[68,68379,51508],{"class":335},[68,68381,68382],{"class":70,"line":17109},[68,68383,68384],{"class":393},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[68,68386,68387],{"class":70,"line":17114},[68,68388,68389],{"class":393},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[68,68391,68392,68394,68396,68398,68400,68402,68404,68407],{"class":70,"line":17119},[68,68393,11426],{"class":331},[68,68395,61493],{"class":82},[68,68397,13769],{"class":331},[68,68399,54597],{"class":335},[68,68401,54600],{"class":74},[68,68403,336],{"class":335},[68,68405,68406],{"class":78},"'.tab-nav ul'",[68,68408,342],{"class":335},[68,68410,68411],{"class":70,"line":17132},[68,68412,68413],{"class":393},"    \u002F\u002F 2.添加事件\n",[68,68415,68416,68418,68420,68422,68424,68426,68428,68430,68432],{"class":70,"line":17137},[68,68417,67155],{"class":335},[68,68419,58014],{"class":74},[68,68421,336],{"class":335},[68,68423,58019],{"class":78},[68,68425,12640],{"class":335},[68,68427,54650],{"class":331},[68,68429,1865],{"class":335},[68,68431,409],{"class":5421},[68,68433,12647],{"class":335},[68,68435,68436,68438,68440],{"class":70,"line":32834},[68,68437,58445],{"class":335},[68,68439,67211],{"class":74},[68,68441,67214],{"class":335},[68,68443,68444],{"class":70,"line":32840},[68,68445,68446],{"class":393},"      \u002F\u002Fe.targer是我们点击的对象\n",[68,68448,68449,68451,68453,68455,68458],{"class":70,"line":32846},[68,68450,54681],{"class":331},[68,68452,67235],{"class":335},[68,68454,54687],{"class":331},[68,68456,68457],{"class":78}," 'A'",[68,68459,12647],{"class":335},[68,68461,68462,68464,68466,68468,68471,68473,68475,68477,68479],{"class":70,"line":32852},[68,68463,52126],{"class":335},[68,68465,54600],{"class":74},[68,68467,336],{"class":335},[68,68469,68470],{"class":78},"'.active'",[68,68472,57204],{"class":335},[68,68474,57207],{"class":74},[68,68476,336],{"class":335},[68,68478,64915],{"class":78},[68,68480,342],{"class":335},[68,68482,68483,68486,68488,68490,68492],{"class":70,"line":32858},[68,68484,68485],{"class":335},"        e.target.classList.",[68,68487,5539],{"class":74},[68,68489,336],{"class":335},[68,68491,64915],{"class":78},[68,68493,342],{"class":335},[68,68495,68496],{"class":70,"line":32869},[68,68497,2606],{"emptyLinePlaceholder":260},[68,68499,68500],{"class":70,"line":32875},[68,68501,68502],{"class":393},"        \u002F\u002F 下面大盒子模块\n",[68,68504,68505],{"class":70,"line":32895},[68,68506,68507],{"class":393},"        \u002F\u002F console.log(e.target.dataset.id)\n",[68,68509,68510,68512,68514,68516,68518],{"class":70,"line":32901},[68,68511,61471],{"class":331},[68,68513,3238],{"class":82},[68,68515,13769],{"class":331},[68,68517,45767],{"class":331},[68,68519,68520],{"class":335},"e.target.dataset.id\n",[68,68522,68523,68525,68527,68529,68531,68533,68535,68537,68539],{"class":70,"line":32912},[68,68524,52126],{"class":335},[68,68526,54600],{"class":74},[68,68528,336],{"class":335},[68,68530,64963],{"class":78},[68,68532,57204],{"class":335},[68,68534,57207],{"class":74},[68,68536,336],{"class":335},[68,68538,64915],{"class":78},[68,68540,342],{"class":335},[68,68542,68543,68545,68547,68549,68551,68553,68555,68557,68559,68561,68563,68565,68567],{"class":70,"line":32918},[68,68544,52126],{"class":335},[68,68546,54600],{"class":74},[68,68548,336],{"class":335},[68,68550,64989],{"class":78},[68,68552,774],{"class":335},[68,68554,45767],{"class":331},[68,68556,25322],{"class":82},[68,68558,57233],{"class":78},[68,68560,57204],{"class":335},[68,68562,5539],{"class":74},[68,68564,336],{"class":335},[68,68566,64915],{"class":78},[68,68568,342],{"class":335},[68,68570,68571],{"class":70,"line":32924},[68,68572,2606],{"emptyLinePlaceholder":260},[68,68574,68575],{"class":70,"line":32930},[68,68576,52599],{"class":335},[68,68578,68579],{"class":70,"line":32936},[68,68580,33662],{"class":335},[68,68582,68583,68585,68587],{"class":70,"line":32942},[68,68584,52618],{"class":335},[68,68586,52014],{"class":51501},[68,68588,51508],{"class":335},[68,68590,68591,68593,68595],{"class":70,"line":32948},[68,68592,51986],{"class":335},[68,68594,52001],{"class":51501},[68,68596,51508],{"class":335},[68,68598,68599],{"class":70,"line":32954},[68,68600,2606],{"emptyLinePlaceholder":260},[68,68602,68603,68605,68607],{"class":70,"line":32974},[68,68604,51986],{"class":335},[68,68606,50836],{"class":51501},[68,68608,51508],{"class":335},[301,68610,68612],{"id":68611},"_333-页面加载事件","3.3.3 页面加载事件",[23,68614,68615],{},[26,68616,68617],{},"load",[19,68619,68620],{},[48,68621],{"alt":63,"src":68622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68624,68625],{},"window代表整个窗口，比document还要大",[19,68627,68628],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68630,68631],{},"img.addEventListener('load', function () {",[19,68633,68634],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68636,52665],{},[23,68638,68639],{"start":92},[26,68640,68641],{},"DOMContentLoaded",[19,68643,68644],{},[48,68645],{"alt":63,"src":68646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68648,68649],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[301,68651,68653],{"id":68652},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68655,68656],{},[48,68657],{"alt":63,"src":68658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68660,68661],{},[48,68662],{"alt":63,"src":68663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68665,68666],{},[48,68667],{"alt":63,"src":68668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68670,68671],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68673,68674],{},"获得的是数字型数据，不带单位",[19,68676,68677],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68679,68680],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68682,68683],{},"它是通过document.documentElement来获取",[19,68685,68686],{},[48,68687],{"alt":63,"src":68688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68690,68691],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[301,68693,68695],{"id":68694},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68697,68698],{},[48,68699],{"alt":63,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68702,68703],{},[48,68704],{"alt":63,"src":68705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[301,68707,68709],{"id":68708},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68711,68712],{},[48,68713],{"alt":63,"src":68714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68716,68717],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68719,68720],{},[48,68721],{"alt":63,"src":68722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68724,68725],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68727,68728],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68730,68731],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68733,68734],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68736,68737],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68739,68740],{},[48,68741],{"alt":63,"src":68742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68744,68745],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68747,68748],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68750,68751],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68753,68754],{},"e.pageX-box.getBoundingClientRect()",[301,68756,68758],{"id":68757},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68760,68761],{},[48,68762],{"alt":63,"src":68763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68765,68766],{},"这个是相对于视口来说的，它是个方法，不是属性值",[301,68768,68770],{"id":68769},"_338-总结","3.3.8 总结",[19,68772,68773],{},[48,68774],{"alt":63,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68777,68778],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68780,68781],{},"修改盒子的宽高只能通过width和height来实现",[301,68783,68785],{"id":68784},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[58,68787,68789],{"className":50834,"code":68788,"language":50836,"meta":63,"style":63},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[65,68790,68791,68796,68801,68806,68811],{"__ignoreMap":63},[68,68792,68793],{"class":70,"line":71},[68,68794,68795],{"class":335},"\u002F* 页面滑动 *\u002F\n",[68,68797,68798],{"class":70,"line":92},[68,68799,68800],{"class":335},"html {\n",[68,68802,68803],{"class":70,"line":1387},[68,68804,68805],{"class":335},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[68,68807,68808],{"class":70,"line":1402},[68,68809,68810],{"class":335},"  scroll-behavior: smooth;\n",[68,68812,68813],{"class":70,"line":1408},[68,68814,1772],{"class":335},[19,68816,68817],{},"默认是auto",[301,68819,68821],{"id":68820},"_3310-日期对象","3.3.10 日期对象",[22203,68823,68825],{"id":68824},"_33101-实例化","3.3.10.1 实例化",[19,68827,68828],{},[48,68829],{"alt":63,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22203,68832,68834],{"id":68833},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68836,68837],{},[48,68838],{"alt":63,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68841,68842],{},"月份+1",[19,68844,68845],{},"老外认为第一天为0，星期天",[19,68847,68848],{},"方法使用的时候必须要跟括号",[19,68850,68851],{},"快速获得日期",[19,68853,68854],{},"\u002F\u002F 得到年月日",[19,68856,68857],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68859,68860],{},"\u002F\u002F 得到当地日期",[19,68862,68863],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68865,68866],{},"\u002F\u002F 得到当地时间",[19,68868,68869],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68871,68872],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68874,68875],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52014,68877,68878],{},"\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",[19,68880,68881],{},"学会去封装函数！",[22203,68883,68885],{"id":68884},"_33103-时间戳","3.3.10.3 时间戳",[19,68887,68888],{},[48,68889],{"alt":63,"src":68890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68892,68893],{},[48,68894],{"alt":63,"src":68895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68897,68898],{},"三种方法记住一个就可以",[301,68900,68902],{"id":68901},"_3311-节点操作","3.3.11 节点操作",[22203,68904,68906],{"id":68905},"_33111-dom节点","3.3.11.1 DOM节点",[19,68908,68909],{},[48,68910],{"alt":63,"src":68911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68913,68914],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22203,68916,68918],{"id":68917},"_33112-查找节点","3.3.11.2 查找节点",[19,68920,68921],{},"前边的document.querySelector()是获取的元素",[19,68923,68924],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68926,68927],{},[48,68928],{"alt":63,"src":68929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[23,68931,68932],{},[26,68933,68934],{},"父节点",[19,68936,68937],{},[48,68938],{"alt":63,"src":68939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[23,68941,68942],{"start":92},[26,68943,68944],{},"子节点",[19,68946,68947],{},[48,68948],{"alt":63,"src":68949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68951,68952],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68954,68955],{},"children获得的是伪数组，是亲儿子",[23,68957,68958],{"start":1387},[26,68959,68960],{},"兄弟节点",[19,68962,68963],{},[48,68964],{"alt":63,"src":68965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22203,68967,68969],{"id":68968},"_33113-增加节点","3.3.11.3 增加节点",[19,68971,68972],{},[48,68973],{"alt":63,"src":68974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68976,68977],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68979,68980],{},[48,68981],{"alt":63,"src":68982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68984,68985],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68987,68988],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68990,68991],{},"例：",[52014,68993,68994],{},"\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",[19,68996,68997],{},[48,68998],{"alt":63,"src":68999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69001,69002],{},"false只克隆标签，里边的内容不会克隆过来",[58,69004,69006],{"className":50834,"code":69005,"language":50836,"meta":63,"style":63},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[65,69007,69008],{"__ignoreMap":63},[68,69009,69010],{"class":70,"line":71},[68,69011,69005],{"class":335},[22203,69013,69015],{"id":69014},"_33114-删除节点","3.3.11.4 删除节点",[19,69017,69018],{},[48,69019],{"alt":63,"src":69020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69022,69023],{},"父亲删儿子",[19,69025,69026],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[301,69028,69030],{"id":69029},"_3312-m端事件","3.3.12 M端事件",[19,69032,69033],{},"M端就是移动端",[19,69035,69036],{},[48,69037],{"alt":63,"src":69038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[301,69040,69042],{"id":69041},"_3313-插件","3.3.13 插件",[19,69044,69045],{},"要熟悉官网！！！",[19,69047,69048],{},[30,69049,69050],{"href":69050,"rel":69051},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[34],[19,69053,69054],{},[30,69055,69056],{"href":69056,"rel":69057},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[34],[301,69059,69061],{"id":69060},"_3314-学生信息表","3.3.14 学生信息表",[23,69063,69064,69067,69070,69073,69076,69079,69082,69085],{},[26,69065,69066],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[26,69068,69069],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[26,69071,69072],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[26,69074,69075],{},"用好表单元素自带的属性，value,name等",[26,69077,69078],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[26,69080,69081],{},"不要忘记事件对象",[26,69083,69084],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[26,69086,69087],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69089,69090],{},"结构：",[58,69092,69094],{"className":50834,"code":69093,"language":50836,"meta":63,"style":63},"\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",[65,69095,69096,69106,69120,69124,69132,69146,69166,69187,69200,69224,69232,69236,69244,69257,69278,69306,69334,69339,69361,69381,69400,69408,69436,69458,69478,69498,69518,69538,69558,69566,69586,69594,69598,69611,69619,69627,69635,69648,69661,69674,69687,69700,69713,69726,69734,69742,69750,69755,69760,69765,69770,69775,69780,69785,69790,69795,69800,69805,69810,69815,69823,69831,69839,69843,69863,69882,69902,69922,69942,69962,69966,69971,69991,69996,70006,70011,70016,70036,70058,70063,70073,70077,70081,70086,70091,70120,70134,70149,70153,70157,70161,70166,70177,70190,70195,70200,70205,70210,70215,70219,70224,70229,70238,70243,70248,70260,70265,70272,70276,70281,70291,70296,70306,70311,70339,70360,70370,70390,70408,70425,70442,70459,70476,70480,70490,70495,70500,70505,70516,70520,70524,70528,70533,70538,70559,70571,70576,70581,70586,70600,70605,70612,70616,70620,70628,70632,70640,70644],{"__ignoreMap":63},[68,69097,69098,69100,69102,69104],{"class":70,"line":71},[68,69099,51498],{"class":335},[68,69101,51502],{"class":51501},[68,69103,51505],{"class":74},[68,69105,51508],{"class":335},[68,69107,69108,69110,69112,69114,69116,69118],{"class":70,"line":92},[68,69109,1243],{"class":335},[68,69111,50836],{"class":51501},[68,69113,51517],{"class":74},[68,69115,381],{"class":335},[68,69117,51522],{"class":78},[68,69119,51508],{"class":335},[68,69121,69122],{"class":70,"line":1387},[68,69123,2606],{"emptyLinePlaceholder":260},[68,69125,69126,69128,69130],{"class":70,"line":1402},[68,69127,1243],{"class":335},[68,69129,51535],{"class":51501},[68,69131,51508],{"class":335},[68,69133,69134,69136,69138,69140,69142,69144],{"class":70,"line":1408},[68,69135,52345],{"class":335},[68,69137,51545],{"class":51501},[68,69139,51548],{"class":74},[68,69141,381],{"class":335},[68,69143,51553],{"class":78},[68,69145,59328],{"class":335},[68,69147,69148,69150,69152,69154,69156,69158,69160,69162,69164],{"class":70,"line":1422},[68,69149,52345],{"class":335},[68,69151,51545],{"class":51501},[68,69153,15125],{"class":74},[68,69155,381],{"class":335},[68,69157,51592],{"class":78},[68,69159,51572],{"class":74},[68,69161,381],{"class":335},[68,69163,51599],{"class":78},[68,69165,59328],{"class":335},[68,69167,69168,69170,69172,69174,69176,69178,69180,69182,69185],{"class":70,"line":1428},[68,69169,52345],{"class":335},[68,69171,51545],{"class":51501},[68,69173,51564],{"class":74},[68,69175,381],{"class":335},[68,69177,51569],{"class":78},[68,69179,51572],{"class":74},[68,69181,381],{"class":335},[68,69183,69184],{"class":78},"\"ie=edge\"",[68,69186,59328],{"class":335},[68,69188,69189,69191,69193,69196,69198],{"class":70,"line":1519},[68,69190,52345],{"class":335},[68,69192,51608],{"class":51501},[68,69194,69195],{"class":335},">学生信息管理\u003C\u002F",[68,69197,51608],{"class":51501},[68,69199,51508],{"class":335},[68,69201,69202,69204,69207,69210,69212,69215,69217,69219,69222],{"class":70,"line":1525},[68,69203,52345],{"class":335},[68,69205,69206],{"class":51501},"link",[68,69208,69209],{"class":74}," rel",[68,69211,381],{"class":335},[68,69213,69214],{"class":78},"\"stylesheet\"",[68,69216,61258],{"class":74},[68,69218,381],{"class":335},[68,69220,69221],{"class":78},"\"css\u002Findex.css\"",[68,69223,59328],{"class":335},[68,69225,69226,69228,69230],{"class":70,"line":1537},[68,69227,51986],{"class":335},[68,69229,51535],{"class":51501},[68,69231,51508],{"class":335},[68,69233,69234],{"class":70,"line":1819},[68,69235,2606],{"emptyLinePlaceholder":260},[68,69237,69238,69240,69242],{"class":70,"line":1824},[68,69239,1243],{"class":335},[68,69241,52001],{"class":51501},[68,69243,51508],{"class":335},[68,69245,69246,69248,69250,69253,69255],{"class":70,"line":1830},[68,69247,52345],{"class":335},[68,69249,10],{"class":51501},[68,69251,69252],{"class":335},">新增学员\u003C\u002F",[68,69254,10],{"class":51501},[68,69256,51508],{"class":335},[68,69258,69259,69261,69263,69265,69267,69269,69272,69274,69276],{"class":70,"line":1835},[68,69260,52345],{"class":335},[68,69262,66826],{"class":51501},[68,69264,53687],{"class":74},[68,69266,381],{"class":335},[68,69268,62865],{"class":78},[68,69270,69271],{"class":74}," autocomplete",[68,69273,381],{"class":335},[68,69275,31977],{"class":78},[68,69277,51508],{"class":335},[68,69279,69280,69283,69285,69287,69289,69291,69293,69295,69298,69300,69302,69304],{"class":70,"line":1849},[68,69281,69282],{"class":335},"    姓名：\u003C",[68,69284,54022],{"class":51501},[68,69286,54025],{"class":74},[68,69288,381],{"class":335},[68,69290,62900],{"class":78},[68,69292,53687],{"class":74},[68,69294,381],{"class":335},[68,69296,69297],{"class":78},"\"uname\"",[68,69299,15125],{"class":74},[68,69301,381],{"class":335},[68,69303,69297],{"class":78},[68,69305,59328],{"class":335},[68,69307,69308,69311,69313,69315,69317,69319,69321,69323,69326,69328,69330,69332],{"class":70,"line":1854},[68,69309,69310],{"class":335},"    年龄：\u003C",[68,69312,54022],{"class":51501},[68,69314,54025],{"class":74},[68,69316,381],{"class":335},[68,69318,62900],{"class":78},[68,69320,53687],{"class":74},[68,69322,381],{"class":335},[68,69324,69325],{"class":78},"\"age\"",[68,69327,15125],{"class":74},[68,69329,381],{"class":335},[68,69331,69325],{"class":78},[68,69333,59328],{"class":335},[68,69335,69336],{"class":70,"line":1860},[68,69337,69338],{"class":335},"    性别:\n",[68,69340,69341,69343,69346,69348,69350,69353,69355,69357,69359],{"class":70,"line":1881},[68,69342,51542],{"class":335},[68,69344,69345],{"class":51501},"select",[68,69347,15125],{"class":74},[68,69349,381],{"class":335},[68,69351,69352],{"class":78},"\"gender\"",[68,69354,53687],{"class":74},[68,69356,381],{"class":335},[68,69358,69352],{"class":78},[68,69360,51508],{"class":335},[68,69362,69363,69365,69368,69370,69372,69374,69377,69379],{"class":70,"line":1886},[68,69364,55435],{"class":335},[68,69366,69367],{"class":51501},"option",[68,69369,66852],{"class":74},[68,69371,381],{"class":335},[68,69373,10166],{"class":78},[68,69375,69376],{"class":335},">男\u003C\u002F",[68,69378,69367],{"class":51501},[68,69380,51508],{"class":335},[68,69382,69383,69385,69387,69389,69391,69393,69396,69398],{"class":70,"line":1900},[68,69384,55435],{"class":335},[68,69386,69367],{"class":51501},[68,69388,66852],{"class":74},[68,69390,381],{"class":335},[68,69392,10235],{"class":78},[68,69394,69395],{"class":335},">女\u003C\u002F",[68,69397,69367],{"class":51501},[68,69399,51508],{"class":335},[68,69401,69402,69404,69406],{"class":70,"line":1905},[68,69403,51977],{"class":335},[68,69405,69345],{"class":51501},[68,69407,51508],{"class":335},[68,69409,69410,69413,69415,69417,69419,69421,69423,69425,69428,69430,69432,69434],{"class":70,"line":1934},[68,69411,69412],{"class":335},"    薪资：\u003C",[68,69414,54022],{"class":51501},[68,69416,54025],{"class":74},[68,69418,381],{"class":335},[68,69420,62900],{"class":78},[68,69422,53687],{"class":74},[68,69424,381],{"class":335},[68,69426,69427],{"class":78},"\"salary\"",[68,69429,15125],{"class":74},[68,69431,381],{"class":335},[68,69433,69427],{"class":78},[68,69435,59328],{"class":335},[68,69437,69438,69441,69443,69445,69447,69450,69452,69454,69456],{"class":70,"line":1939},[68,69439,69440],{"class":335},"    就业城市：\u003C",[68,69442,69345],{"class":51501},[68,69444,15125],{"class":74},[68,69446,381],{"class":335},[68,69448,69449],{"class":78},"\"city\"",[68,69451,53687],{"class":74},[68,69453,381],{"class":335},[68,69455,69449],{"class":78},[68,69457,51508],{"class":335},[68,69459,69460,69462,69464,69466,69468,69471,69474,69476],{"class":70,"line":1956},[68,69461,55435],{"class":335},[68,69463,69367],{"class":51501},[68,69465,66852],{"class":74},[68,69467,381],{"class":335},[68,69469,69470],{"class":78},"\"北京\"",[68,69472,69473],{"class":335},">北京\u003C\u002F",[68,69475,69367],{"class":51501},[68,69477,51508],{"class":335},[68,69479,69480,69482,69484,69486,69488,69491,69494,69496],{"class":70,"line":1961},[68,69481,55435],{"class":335},[68,69483,69367],{"class":51501},[68,69485,66852],{"class":74},[68,69487,381],{"class":335},[68,69489,69490],{"class":78},"\"上海\"",[68,69492,69493],{"class":335},">上海\u003C\u002F",[68,69495,69367],{"class":51501},[68,69497,51508],{"class":335},[68,69499,69500,69502,69504,69506,69508,69511,69514,69516],{"class":70,"line":1966},[68,69501,55435],{"class":335},[68,69503,69367],{"class":51501},[68,69505,66852],{"class":74},[68,69507,381],{"class":335},[68,69509,69510],{"class":78},"\"广州\"",[68,69512,69513],{"class":335},">广州\u003C\u002F",[68,69515,69367],{"class":51501},[68,69517,51508],{"class":335},[68,69519,69520,69522,69524,69526,69528,69531,69534,69536],{"class":70,"line":1971},[68,69521,55435],{"class":335},[68,69523,69367],{"class":51501},[68,69525,66852],{"class":74},[68,69527,381],{"class":335},[68,69529,69530],{"class":78},"\"深圳\"",[68,69532,69533],{"class":335},">深圳\u003C\u002F",[68,69535,69367],{"class":51501},[68,69537,51508],{"class":335},[68,69539,69540,69542,69544,69546,69548,69551,69554,69556],{"class":70,"line":1985},[68,69541,55435],{"class":335},[68,69543,69367],{"class":51501},[68,69545,66852],{"class":74},[68,69547,381],{"class":335},[68,69549,69550],{"class":78},"\"曹县\"",[68,69552,69553],{"class":335},">曹县\u003C\u002F",[68,69555,69367],{"class":51501},[68,69557,51508],{"class":335},[68,69559,69560,69562,69564],{"class":70,"line":1990},[68,69561,51977],{"class":335},[68,69563,69345],{"class":51501},[68,69565,51508],{"class":335},[68,69567,69568,69570,69572,69574,69576,69579,69582,69584],{"class":70,"line":2783},[68,69569,51542],{"class":335},[68,69571,54088],{"class":51501},[68,69573,53687],{"class":74},[68,69575,381],{"class":335},[68,69577,69578],{"class":78},"\"add\"",[68,69580,69581],{"class":335},">录入\u003C\u002F",[68,69583,54088],{"class":51501},[68,69585,51508],{"class":335},[68,69587,69588,69590,69592],{"class":70,"line":2797},[68,69589,52618],{"class":335},[68,69591,66826],{"class":51501},[68,69593,51508],{"class":335},[68,69595,69596],{"class":70,"line":2805},[68,69597,2606],{"emptyLinePlaceholder":260},[68,69599,69600,69602,69604,69607,69609],{"class":70,"line":2810},[68,69601,52345],{"class":335},[68,69603,10],{"class":51501},[68,69605,69606],{"class":335},">就业榜\u003C\u002F",[68,69608,10],{"class":51501},[68,69610,51508],{"class":335},[68,69612,69613,69615,69617],{"class":70,"line":2816},[68,69614,52345],{"class":335},[68,69616,471],{"class":51501},[68,69618,51508],{"class":335},[68,69620,69621,69623,69625],{"class":70,"line":2822},[68,69622,51542],{"class":335},[68,69624,474],{"class":51501},[68,69626,51508],{"class":335},[68,69628,69629,69631,69633],{"class":70,"line":2827},[68,69630,55435],{"class":335},[68,69632,477],{"class":51501},[68,69634,51508],{"class":335},[68,69636,69637,69639,69641,69644,69646],{"class":70,"line":8153},[68,69638,55503],{"class":335},[68,69640,480],{"class":51501},[68,69642,69643],{"class":335},">序号\u003C\u002F",[68,69645,480],{"class":51501},[68,69647,51508],{"class":335},[68,69649,69650,69652,69654,69657,69659],{"class":70,"line":8177},[68,69651,55503],{"class":335},[68,69653,480],{"class":51501},[68,69655,69656],{"class":335},">姓名\u003C\u002F",[68,69658,480],{"class":51501},[68,69660,51508],{"class":335},[68,69662,69663,69665,69667,69670,69672],{"class":70,"line":8182},[68,69664,55503],{"class":335},[68,69666,480],{"class":51501},[68,69668,69669],{"class":335},">年龄\u003C\u002F",[68,69671,480],{"class":51501},[68,69673,51508],{"class":335},[68,69675,69676,69678,69680,69683,69685],{"class":70,"line":8188},[68,69677,55503],{"class":335},[68,69679,480],{"class":51501},[68,69681,69682],{"class":335},">性别\u003C\u002F",[68,69684,480],{"class":51501},[68,69686,51508],{"class":335},[68,69688,69689,69691,69693,69696,69698],{"class":70,"line":8215},[68,69690,55503],{"class":335},[68,69692,480],{"class":51501},[68,69694,69695],{"class":335},">薪资\u003C\u002F",[68,69697,480],{"class":51501},[68,69699,51508],{"class":335},[68,69701,69702,69704,69706,69709,69711],{"class":70,"line":8220},[68,69703,55503],{"class":335},[68,69705,480],{"class":51501},[68,69707,69708],{"class":335},">就业城市\u003C\u002F",[68,69710,480],{"class":51501},[68,69712,51508],{"class":335},[68,69714,69715,69717,69719,69722,69724],{"class":70,"line":8226},[68,69716,55503],{"class":335},[68,69718,480],{"class":51501},[68,69720,69721],{"class":335},">操作\u003C\u002F",[68,69723,480],{"class":51501},[68,69725,51508],{"class":335},[68,69727,69728,69730,69732],{"class":70,"line":8238},[68,69729,55608],{"class":335},[68,69731,477],{"class":51501},[68,69733,51508],{"class":335},[68,69735,69736,69738,69740],{"class":70,"line":8250},[68,69737,51977],{"class":335},[68,69739,474],{"class":51501},[68,69741,51508],{"class":335},[68,69743,69744,69746,69748],{"class":70,"line":8262},[68,69745,51542],{"class":335},[68,69747,518],{"class":51501},[68,69749,51508],{"class":335},[68,69751,69752],{"class":70,"line":9921},[68,69753,69754],{"class":393},"      \u003C!-- \n",[68,69756,69757],{"class":70,"line":9946},[68,69758,69759],{"class":393},"        \u003Ctr>\n",[68,69761,69762],{"class":70,"line":9969},[68,69763,69764],{"class":393},"          \u003Ctd>1001\u003C\u002Ftd>\n",[68,69766,69767],{"class":70,"line":9993},[68,69768,69769],{"class":393},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[68,69771,69772],{"class":70,"line":9998},[68,69773,69774],{"class":393},"          \u003Ctd>19\u003C\u002Ftd>\n",[68,69776,69777],{"class":70,"line":10003},[68,69778,69779],{"class":393},"          \u003Ctd>男\u003C\u002Ftd>\n",[68,69781,69782],{"class":70,"line":10008},[68,69783,69784],{"class":393},"          \u003Ctd>15000\u003C\u002Ftd>\n",[68,69786,69787],{"class":70,"line":10017},[68,69788,69789],{"class":393},"          \u003Ctd>上海\u003C\u002Ftd>\n",[68,69791,69792],{"class":70,"line":10022},[68,69793,69794],{"class":393},"          \u003Ctd>\n",[68,69796,69797],{"class":70,"line":10028},[68,69798,69799],{"class":393},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[68,69801,69802],{"class":70,"line":10049},[68,69803,69804],{"class":393},"          \u003C\u002Ftd>\n",[68,69806,69807],{"class":70,"line":10055},[68,69808,69809],{"class":393},"        \u003C\u002Ftr> \n",[68,69811,69812],{"class":70,"line":10069},[68,69813,69814],{"class":393},"        -->\n",[68,69816,69817,69819,69821],{"class":70,"line":10075},[68,69818,51977],{"class":335},[68,69820,518],{"class":51501},[68,69822,51508],{"class":335},[68,69824,69825,69827,69829],{"class":70,"line":10102},[68,69826,52618],{"class":335},[68,69828,471],{"class":51501},[68,69830,51508],{"class":335},[68,69832,69833,69835,69837],{"class":70,"line":10111},[68,69834,52345],{"class":335},[68,69836,52014],{"class":51501},[68,69838,51508],{"class":335},[68,69840,69841],{"class":70,"line":10117},[68,69842,60159],{"class":393},[68,69844,69845,69847,69850,69852,69854,69856,69858,69861],{"class":70,"line":10125},[68,69846,11426],{"class":331},[68,69848,69849],{"class":82}," uname",[68,69851,13769],{"class":331},[68,69853,54597],{"class":335},[68,69855,54600],{"class":74},[68,69857,336],{"class":335},[68,69859,69860],{"class":78},"'.uname'",[68,69862,342],{"class":335},[68,69864,69865,69867,69869,69871,69873,69875,69877,69880],{"class":70,"line":10130},[68,69866,11426],{"class":331},[68,69868,15894],{"class":82},[68,69870,13769],{"class":331},[68,69872,54597],{"class":335},[68,69874,54600],{"class":74},[68,69876,336],{"class":335},[68,69878,69879],{"class":78},"'.age'",[68,69881,342],{"class":335},[68,69883,69884,69886,69889,69891,69893,69895,69897,69900],{"class":70,"line":16809},[68,69885,11426],{"class":331},[68,69887,69888],{"class":82}," gender",[68,69890,13769],{"class":331},[68,69892,54597],{"class":335},[68,69894,54600],{"class":74},[68,69896,336],{"class":335},[68,69898,69899],{"class":78},"'.gender'",[68,69901,342],{"class":335},[68,69903,69904,69906,69909,69911,69913,69915,69917,69920],{"class":70,"line":16815},[68,69905,11426],{"class":331},[68,69907,69908],{"class":82}," salary",[68,69910,13769],{"class":331},[68,69912,54597],{"class":335},[68,69914,54600],{"class":74},[68,69916,336],{"class":335},[68,69918,69919],{"class":78},"'.salary'",[68,69921,342],{"class":335},[68,69923,69924,69926,69929,69931,69933,69935,69937,69940],{"class":70,"line":16838},[68,69925,11426],{"class":331},[68,69927,69928],{"class":82}," city",[68,69930,13769],{"class":331},[68,69932,54597],{"class":335},[68,69934,54600],{"class":74},[68,69936,336],{"class":335},[68,69938,69939],{"class":78},"'.city'",[68,69941,342],{"class":335},[68,69943,69944,69946,69949,69951,69953,69955,69957,69960],{"class":70,"line":16844},[68,69945,11426],{"class":331},[68,69947,69948],{"class":82}," tbody",[68,69950,13769],{"class":331},[68,69952,54597],{"class":335},[68,69954,54600],{"class":74},[68,69956,336],{"class":335},[68,69958,69959],{"class":78},"'tbody'",[68,69961,342],{"class":335},[68,69963,69964],{"class":70,"line":16867},[68,69965,2606],{"emptyLinePlaceholder":260},[68,69967,69968],{"class":70,"line":16881},[68,69969,69970],{"class":393},"    \u002F\u002F 获取所有带有name属性的元素\n",[68,69972,69973,69975,69978,69980,69982,69984,69986,69989],{"class":70,"line":16901},[68,69974,11426],{"class":331},[68,69976,69977],{"class":82}," items",[68,69979,13769],{"class":331},[68,69981,54597],{"class":335},[68,69983,55882],{"class":74},[68,69985,336],{"class":335},[68,69987,69988],{"class":78},"'[name]'",[68,69990,342],{"class":335},[68,69992,69993],{"class":70,"line":16907},[68,69994,69995],{"class":393},"    \u002F\u002F 声明一个空的数组\n",[68,69997,69998,70000,70002,70004],{"class":70,"line":16918},[68,69999,11426],{"class":331},[68,70001,57896],{"class":82},[68,70003,13769],{"class":331},[68,70005,52039],{"class":335},[68,70007,70008],{"class":70,"line":16941},[68,70009,70010],{"class":393},"    \u002F\u002F 1.录入模块\n",[68,70012,70013],{"class":70,"line":16963},[68,70014,70015],{"class":393},"    \u002F\u002F 1.1这是一个表单提交事件\n",[68,70017,70018,70020,70023,70025,70027,70029,70031,70034],{"class":70,"line":16968},[68,70019,11426],{"class":331},[68,70021,70022],{"class":82}," info",[68,70024,13769],{"class":331},[68,70026,54597],{"class":335},[68,70028,54600],{"class":74},[68,70030,336],{"class":335},[68,70032,70033],{"class":78},"'.info'",[68,70035,342],{"class":335},[68,70037,70038,70041,70043,70045,70048,70050,70052,70054,70056],{"class":70,"line":16974},[68,70039,70040],{"class":335},"    info.",[68,70042,58014],{"class":74},[68,70044,336],{"class":335},[68,70046,70047],{"class":78},"'submit'",[68,70049,12640],{"class":335},[68,70051,54650],{"class":331},[68,70053,1865],{"class":335},[68,70055,409],{"class":5421},[68,70057,12647],{"class":335},[68,70059,70060],{"class":70,"line":16988},[68,70061,70062],{"class":393},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[68,70064,70065,70068,70071],{"class":70,"line":17001},[68,70066,70067],{"class":335},"      e.",[68,70069,70070],{"class":74},"preventDefault",[68,70072,2182],{"class":335},[68,70074,70075],{"class":70,"line":17006},[68,70076,60213],{"class":393},[68,70078,70079],{"class":70,"line":17020},[68,70080,2606],{"emptyLinePlaceholder":260},[68,70082,70083],{"class":70,"line":17025},[68,70084,70085],{"class":393},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[68,70087,70088],{"class":70,"line":17031},[68,70089,70090],{"class":393},"      \u002F\u002F 先遍历循环\n",[68,70092,70093,70095,70097,70099,70101,70103,70105,70107,70109,70112,70114,70116,70118],{"class":70,"line":17036},[68,70094,52485],{"class":331},[68,70096,1865],{"class":335},[68,70098,52048],{"class":331},[68,70100,9643],{"class":335},[68,70102,381],{"class":331},[68,70104,4299],{"class":82},[68,70106,9650],{"class":335},[68,70108,1243],{"class":331},[68,70110,70111],{"class":335}," items.",[68,70113,52169],{"class":82},[68,70115,3420],{"class":335},[68,70117,2498],{"class":331},[68,70119,12647],{"class":335},[68,70121,70122,70124,70127,70129,70132],{"class":70,"line":17050},[68,70123,2703],{"class":331},[68,70125,70126],{"class":335}," (items[i].value ",[68,70128,54687],{"class":331},[68,70130,70131],{"class":78}," ''",[68,70133,12647],{"class":335},[68,70135,70136,70139,70142,70144,70147],{"class":70,"line":17055},[68,70137,70138],{"class":331},"          return",[68,70140,70141],{"class":74}," alert",[68,70143,336],{"class":335},[68,70145,70146],{"class":78},"'输入内容不能为空'",[68,70148,342],{"class":335},[68,70150,70151],{"class":70,"line":17060},[68,70152,2735],{"class":335},[68,70154,70155],{"class":70,"line":17074},[68,70156,52599],{"class":335},[68,70158,70159],{"class":70,"line":17086},[68,70160,2606],{"emptyLinePlaceholder":260},[68,70162,70163],{"class":70,"line":17091},[68,70164,70165],{"class":393},"      \u002F\u002F 创建新的对象\n",[68,70167,70168,70170,70173,70175],{"class":70,"line":17104},[68,70169,58429],{"class":331},[68,70171,70172],{"class":82}," obj",[68,70174,13769],{"class":331},[68,70176,15777],{"class":335},[68,70178,70179,70182,70184,70186,70188],{"class":70,"line":17109},[68,70180,70181],{"class":335},"        stuID: arr.",[68,70183,52169],{"class":82},[68,70185,45767],{"class":331},[68,70187,25322],{"class":82},[68,70189,31667],{"class":335},[68,70191,70192],{"class":70,"line":17114},[68,70193,70194],{"class":335},"        uname: uname.value,\n",[68,70196,70197],{"class":70,"line":17119},[68,70198,70199],{"class":335},"        age: age.value,\n",[68,70201,70202],{"class":70,"line":17132},[68,70203,70204],{"class":335},"        gender: gender.value,\n",[68,70206,70207],{"class":70,"line":17137},[68,70208,70209],{"class":335},"        salary: salary.value,\n",[68,70211,70212],{"class":70,"line":32834},[68,70213,70214],{"class":335},"        city: city.value\n",[68,70216,70217],{"class":70,"line":32840},[68,70218,52599],{"class":335},[68,70220,70221],{"class":70,"line":32846},[68,70222,70223],{"class":393},"      \u002F\u002F console.log(obj);\n",[68,70225,70226],{"class":70,"line":32852},[68,70227,70228],{"class":393},"      \u002F\u002F 追加到数组里面\n",[68,70230,70231,70233,70235],{"class":70,"line":32858},[68,70232,58208],{"class":335},[68,70234,52085],{"class":74},[68,70236,70237],{"class":335},"(obj)\n",[68,70239,70240],{"class":70,"line":32869},[68,70241,70242],{"class":393},"      \u002F\u002F console.log(arr);\n",[68,70244,70245],{"class":70,"line":32875},[68,70246,70247],{"class":393},"      \u002F\u002F 清空表单  reset重置表单\n",[68,70249,70250,70253,70255,70258],{"class":70,"line":32895},[68,70251,70252],{"class":82},"      this",[68,70254,891],{"class":335},[68,70256,70257],{"class":74},"reset",[68,70259,2182],{"class":335},[68,70261,70262],{"class":70,"line":32901},[68,70263,70264],{"class":393},"      \u002F\u002F 调用渲染函数\n",[68,70266,70267,70270],{"class":70,"line":32912},[68,70268,70269],{"class":74},"      render",[68,70271,2182],{"class":335},[68,70273,70274],{"class":70,"line":32918},[68,70275,33662],{"class":335},[68,70277,70278],{"class":70,"line":32924},[68,70279,70280],{"class":393},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[68,70282,70283,70286,70289],{"class":70,"line":32930},[68,70284,70285],{"class":331},"    function",[68,70287,70288],{"class":74}," render",[68,70290,11058],{"class":335},[68,70292,70293],{"class":70,"line":32936},[68,70294,70295],{"class":393},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[68,70297,70298,70301,70303],{"class":70,"line":32942},[68,70299,70300],{"class":335},"      tbody.innerHTML ",[68,70302,381],{"class":331},[68,70304,70305],{"class":78}," ''\n",[68,70307,70308],{"class":70,"line":32948},[68,70309,70310],{"class":393},"      \u002F\u002F 遍历数组\n",[68,70312,70313,70315,70317,70319,70321,70323,70325,70327,70329,70331,70333,70335,70337],{"class":70,"line":32954},[68,70314,52485],{"class":331},[68,70316,1865],{"class":335},[68,70318,52048],{"class":331},[68,70320,9643],{"class":335},[68,70322,381],{"class":331},[68,70324,4299],{"class":82},[68,70326,9650],{"class":335},[68,70328,1243],{"class":331},[68,70330,52166],{"class":335},[68,70332,52169],{"class":82},[68,70334,3420],{"class":335},[68,70336,2498],{"class":331},[68,70338,12647],{"class":335},[68,70340,70341,70343,70346,70348,70350,70353,70355,70358],{"class":70,"line":32974},[68,70342,61471],{"class":331},[68,70344,70345],{"class":82}," tr",[68,70347,13769],{"class":331},[68,70349,54597],{"class":335},[68,70351,70352],{"class":74},"createElement",[68,70354,336],{"class":335},[68,70356,70357],{"class":78},"'tr'",[68,70359,342],{"class":335},[68,70361,70362,70365,70367],{"class":70,"line":32980},[68,70363,70364],{"class":335},"        tr.innerHTML ",[68,70366,381],{"class":331},[68,70368,70369],{"class":78}," `\n",[68,70371,70372,70375,70377,70379,70381,70384,70387],{"class":70,"line":32996},[68,70373,70374],{"class":78},"        \u003Ctd>${",[68,70376,4086],{"class":335},[68,70378,1223],{"class":78},[68,70380,774],{"class":335},[68,70382,70383],{"class":78},"].",[68,70385,70386],{"class":335},"stuID",[68,70388,70389],{"class":78},"}\u003C\u002Ftd>\n",[68,70391,70392,70395,70397,70399,70401,70403,70406],{"class":70,"line":33002},[68,70393,70394],{"class":78},"          \u003Ctd>${",[68,70396,4086],{"class":335},[68,70398,1223],{"class":78},[68,70400,774],{"class":335},[68,70402,70383],{"class":78},[68,70404,70405],{"class":335},"uname",[68,70407,70389],{"class":78},[68,70409,70410,70412,70414,70416,70418,70420,70423],{"class":70,"line":33016},[68,70411,70394],{"class":78},[68,70413,4086],{"class":335},[68,70415,1223],{"class":78},[68,70417,774],{"class":335},[68,70419,70383],{"class":78},[68,70421,70422],{"class":335},"age",[68,70424,70389],{"class":78},[68,70426,70427,70429,70431,70433,70435,70437,70440],{"class":70,"line":33022},[68,70428,70394],{"class":78},[68,70430,4086],{"class":335},[68,70432,1223],{"class":78},[68,70434,774],{"class":335},[68,70436,70383],{"class":78},[68,70438,70439],{"class":335},"gender",[68,70441,70389],{"class":78},[68,70443,70444,70446,70448,70450,70452,70454,70457],{"class":70,"line":33037},[68,70445,70394],{"class":78},[68,70447,4086],{"class":335},[68,70449,1223],{"class":78},[68,70451,774],{"class":335},[68,70453,70383],{"class":78},[68,70455,70456],{"class":335},"salary",[68,70458,70389],{"class":78},[68,70460,70461,70463,70465,70467,70469,70471,70474],{"class":70,"line":33043},[68,70462,70394],{"class":78},[68,70464,4086],{"class":335},[68,70466,1223],{"class":78},[68,70468,774],{"class":335},[68,70470,70383],{"class":78},[68,70472,70473],{"class":335},"city",[68,70475,70389],{"class":78},[68,70477,70478],{"class":70,"line":33052},[68,70479,69794],{"class":78},[68,70481,70482,70485,70487],{"class":70,"line":33058},[68,70483,70484],{"class":78},"            \u003Ca href=\"javascript:\" data-id=${",[68,70486,774],{"class":335},[68,70488,70489],{"class":78},"}>删除\u003C\u002Fa>\n",[68,70491,70492],{"class":70,"line":33067},[68,70493,70494],{"class":78},"          \u003C\u002Ftd> \n",[68,70496,70497],{"class":70,"line":33073},[68,70498,70499],{"class":78},"          `\n",[68,70501,70502],{"class":70,"line":33079},[68,70503,70504],{"class":393},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[68,70506,70507,70510,70513],{"class":70,"line":33088},[68,70508,70509],{"class":335},"        tbody.",[68,70511,70512],{"class":74},"appendChild",[68,70514,70515],{"class":335},"(tr)\n",[68,70517,70518],{"class":70,"line":33094},[68,70519,52599],{"class":335},[68,70521,70522],{"class":70,"line":33105},[68,70523,2393],{"class":335},[68,70525,70526],{"class":70,"line":33111},[68,70527,2606],{"emptyLinePlaceholder":260},[68,70529,70530],{"class":70,"line":33130},[68,70531,70532],{"class":393},"    \u002F\u002F 3.删除委托\n",[68,70534,70535],{"class":70,"line":33136},[68,70536,70537],{"class":393},"    \u002F\u002F 3.1 事件委托 tbody\n",[68,70539,70540,70543,70545,70547,70549,70551,70553,70555,70557],{"class":70,"line":33147},[68,70541,70542],{"class":335},"    tbody.",[68,70544,58014],{"class":74},[68,70546,336],{"class":335},[68,70548,58019],{"class":78},[68,70550,12640],{"class":335},[68,70552,54650],{"class":331},[68,70554,1865],{"class":335},[68,70556,409],{"class":5421},[68,70558,12647],{"class":335},[68,70560,70561,70563,70565,70567,70569],{"class":70,"line":33153},[68,70562,54681],{"class":331},[68,70564,67235],{"class":335},[68,70566,54687],{"class":331},[68,70568,68457],{"class":78},[68,70570,12647],{"class":335},[68,70572,70573],{"class":70,"line":33173},[68,70574,70575],{"class":393},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[68,70577,70578],{"class":70,"line":33189},[68,70579,70580],{"class":393},"        \u002F\u002F console.log(e.target.dataset.id);\n",[68,70582,70583],{"class":70,"line":33195},[68,70584,70585],{"class":393},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[68,70587,70588,70591,70593,70596,70598],{"class":70,"line":33209},[68,70589,70590],{"class":335},"        arr.",[68,70592,58211],{"class":74},[68,70594,70595],{"class":335},"(e.target.dataset.id, ",[68,70597,551],{"class":82},[68,70599,342],{"class":335},[68,70601,70602],{"class":70,"line":33215},[68,70603,70604],{"class":393},"        \u002F\u002F 重新渲染一次\n",[68,70606,70607,70610],{"class":70,"line":33221},[68,70608,70609],{"class":74},"        render",[68,70611,2182],{"class":335},[68,70613,70614],{"class":70,"line":33232},[68,70615,52599],{"class":335},[68,70617,70618],{"class":70,"line":33238},[68,70619,33662],{"class":335},[68,70621,70622,70624,70626],{"class":70,"line":33244},[68,70623,52618],{"class":335},[68,70625,52014],{"class":51501},[68,70627,51508],{"class":335},[68,70629,70630],{"class":70,"line":33254},[68,70631,2606],{"emptyLinePlaceholder":260},[68,70633,70634,70636,70638],{"class":70,"line":33260},[68,70635,51986],{"class":335},[68,70637,52001],{"class":51501},[68,70639,51508],{"class":335},[68,70641,70642],{"class":70,"line":33271},[68,70643,2606],{"emptyLinePlaceholder":260},[68,70645,70646,70648,70650],{"class":70,"line":33277},[68,70647,51986],{"class":335},[68,70649,50836],{"class":51501},[68,70651,51508],{"class":335},[19,70653,70654],{},"样式：",[58,70656,70660],{"className":70657,"code":70658,"language":70659,"meta":63,"style":63},"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",[65,70661,70662,70667,70677,70686,70690,70694,70699,70709,70714,70718,70723,70733,70738,70747,70751,70755,70760,70765,70775,70785,70790,70794,70799,70808,70818,70823,70833,70843,70847,70852,70860,70864,70869,70874,70879,70887,70896,70900,70905,70914,70918,70923,70932,70936,70941,70950,70959,70967,70971,70976,70985,70995,71004,71014,71020,71029,71039,71049,71053,71058,71067,71075,71085,71093,71102,71111,71121,71129,71133,71138,71147],{"__ignoreMap":63},[68,70663,70664],{"class":70,"line":71},[68,70665,70666],{"class":335},"* {\n",[68,70668,70669,70672,70674],{"class":70,"line":92},[68,70670,70671],{"class":51501},"  margin",[68,70673,51638],{"class":335},[68,70675,70676],{"class":78},"0;\n",[68,70678,70679,70682,70684],{"class":70,"line":1387},[68,70680,70681],{"class":78},"  padding",[68,70683,51638],{"class":335},[68,70685,70676],{"class":78},[68,70687,70688],{"class":70,"line":1402},[68,70689,1772],{"class":335},[68,70691,70692],{"class":70,"line":1408},[68,70693,2606],{"emptyLinePlaceholder":260},[68,70695,70696],{"class":70,"line":1422},[68,70697,70698],{"class":78},"a {\n",[68,70700,70701,70704,70706],{"class":70,"line":1428},[68,70702,70703],{"class":51501},"  text-decoration",[68,70705,51638],{"class":335},[68,70707,70708],{"class":78},"none;\n",[68,70710,70711],{"class":70,"line":1519},[68,70712,70713],{"class":78},"  color:#721c24;\n",[68,70715,70716],{"class":70,"line":1525},[68,70717,1772],{"class":335},[68,70719,70720],{"class":70,"line":1537},[68,70721,70722],{"class":78},"h1 {\n",[68,70724,70725,70728,70730],{"class":70,"line":1819},[68,70726,70727],{"class":51501},"  text-align",[68,70729,51638],{"class":335},[68,70731,70732],{"class":78},"center;\n",[68,70734,70735],{"class":70,"line":1824},[68,70736,70737],{"class":78},"  color:#333;\n",[68,70739,70740,70742,70744],{"class":70,"line":1830},[68,70741,70671],{"class":51501},[68,70743,51638],{"class":335},[68,70745,70746],{"class":78},"20px 0;\n",[68,70748,70749],{"class":70,"line":1835},[68,70750,2880],{"class":335},[68,70752,70753],{"class":70,"line":1849},[68,70754,1772],{"class":335},[68,70756,70757],{"class":70,"line":1854},[68,70758,70759],{"class":78},"table {\n",[68,70761,70762],{"class":70,"line":1860},[68,70763,70764],{"class":78},"  margin:0 auto;\n",[68,70766,70767,70770,70772],{"class":70,"line":1881},[68,70768,70769],{"class":51501},"  width",[68,70771,51638],{"class":335},[68,70773,70774],{"class":78},"800px;\n",[68,70776,70777,70780,70782],{"class":70,"line":1886},[68,70778,70779],{"class":51501},"  border-collapse",[68,70781,51638],{"class":335},[68,70783,70784],{"class":78},"collapse;\n",[68,70786,70787],{"class":70,"line":1900},[68,70788,70789],{"class":78},"  color:#004085;\n",[68,70791,70792],{"class":70,"line":1905},[68,70793,1772],{"class":335},[68,70795,70796],{"class":70,"line":1934},[68,70797,70798],{"class":78},"th {\n",[68,70800,70801,70803,70805],{"class":70,"line":1939},[68,70802,70681],{"class":51501},[68,70804,51638],{"class":335},[68,70806,70807],{"class":78},"10px;\n",[68,70809,70810,70813,70815],{"class":70,"line":1956},[68,70811,70812],{"class":51501},"  background",[68,70814,51638],{"class":335},[68,70816,70817],{"class":393},"#cfe5ff;\n",[68,70819,70820],{"class":70,"line":1961},[68,70821,70822],{"class":335},"  \n",[68,70824,70825,70828,70830],{"class":70,"line":1966},[68,70826,70827],{"class":51501},"  font-size",[68,70829,51638],{"class":335},[68,70831,70832],{"class":78},"20px;\n",[68,70834,70835,70838,70840],{"class":70,"line":1971},[68,70836,70837],{"class":51501},"  font-weight",[68,70839,51638],{"class":335},[68,70841,70842],{"class":78},"400;\n",[68,70844,70845],{"class":70,"line":1985},[68,70846,1772],{"class":335},[68,70848,70849],{"class":70,"line":1990},[68,70850,70851],{"class":78},"td,th {\n",[68,70853,70854,70857],{"class":70,"line":2783},[68,70855,70856],{"class":78},"  border:1px solid",[68,70858,70859],{"class":393}," #b8daff;\n",[68,70861,70862],{"class":70,"line":2797},[68,70863,1772],{"class":335},[68,70865,70866],{"class":70,"line":2805},[68,70867,70868],{"class":78},"td {\n",[68,70870,70871],{"class":70,"line":2810},[68,70872,70873],{"class":78},"  padding:10px;\n",[68,70875,70876],{"class":70,"line":2816},[68,70877,70878],{"class":78},"  color:#666;\n",[68,70880,70881,70883,70885],{"class":70,"line":2822},[68,70882,70727],{"class":51501},[68,70884,51638],{"class":335},[68,70886,70732],{"class":78},[68,70888,70889,70891,70893],{"class":70,"line":2827},[68,70890,70827],{"class":51501},[68,70892,51638],{"class":335},[68,70894,70895],{"class":78},"16px;\n",[68,70897,70898],{"class":70,"line":8153},[68,70899,1772],{"class":335},[68,70901,70902],{"class":70,"line":8177},[68,70903,70904],{"class":78},"tbody tr {\n",[68,70906,70907,70909,70911],{"class":70,"line":8182},[68,70908,70812],{"class":51501},[68,70910,51638],{"class":335},[68,70912,70913],{"class":393},"#fff;\n",[68,70915,70916],{"class":70,"line":8188},[68,70917,1772],{"class":335},[68,70919,70920],{"class":70,"line":8215},[68,70921,70922],{"class":78},"tbody tr:hover {\n",[68,70924,70925,70927,70929],{"class":70,"line":8220},[68,70926,70812],{"class":51501},[68,70928,51638],{"class":335},[68,70930,70931],{"class":393},"#e1ecf8;\n",[68,70933,70934],{"class":70,"line":8226},[68,70935,1772],{"class":335},[68,70937,70938],{"class":70,"line":8238},[68,70939,70940],{"class":78},".info {\n",[68,70942,70943,70945,70947],{"class":70,"line":8250},[68,70944,70769],{"class":51501},[68,70946,51638],{"class":335},[68,70948,70949],{"class":78},"900px;\n",[68,70951,70952,70954,70956],{"class":70,"line":8262},[68,70953,70671],{"class":51501},[68,70955,51638],{"class":335},[68,70957,70958],{"class":78},"50px auto;\n",[68,70960,70961,70963,70965],{"class":70,"line":9921},[68,70962,70727],{"class":51501},[68,70964,51638],{"class":335},[68,70966,70732],{"class":78},[68,70968,70969],{"class":70,"line":9946},[68,70970,1772],{"class":335},[68,70972,70973],{"class":70,"line":9969},[68,70974,70975],{"class":78},".info  input, .info select {\n",[68,70977,70978,70980,70982],{"class":70,"line":9993},[68,70979,70769],{"class":51501},[68,70981,51638],{"class":335},[68,70983,70984],{"class":78},"80px;\n",[68,70986,70987,70990,70992],{"class":70,"line":9998},[68,70988,70989],{"class":51501},"  height",[68,70991,51638],{"class":335},[68,70993,70994],{"class":78},"27px;\n",[68,70996,70997,71000,71002],{"class":70,"line":10003},[68,70998,70999],{"class":51501},"  outline",[68,71001,51638],{"class":335},[68,71003,70708],{"class":78},[68,71005,71006,71009,71011],{"class":70,"line":10008},[68,71007,71008],{"class":51501},"  border-radius",[68,71010,51638],{"class":335},[68,71012,71013],{"class":78},"5px;\n",[68,71015,71016,71018],{"class":70,"line":10017},[68,71017,70856],{"class":78},[68,71019,70859],{"class":393},[68,71021,71022,71025,71027],{"class":70,"line":10022},[68,71023,71024],{"class":51501},"  padding-left",[68,71026,51638],{"class":335},[68,71028,71013],{"class":78},[68,71030,71031,71034,71036],{"class":70,"line":10028},[68,71032,71033],{"class":51501},"  box-sizing",[68,71035,51638],{"class":335},[68,71037,71038],{"class":78},"border-box;\n",[68,71040,71041,71044,71046],{"class":70,"line":10049},[68,71042,71043],{"class":51501},"  margin-right",[68,71045,51638],{"class":335},[68,71047,71048],{"class":78},"15px;\n",[68,71050,71051],{"class":70,"line":10055},[68,71052,1772],{"class":335},[68,71054,71055],{"class":70,"line":10069},[68,71056,71057],{"class":78},".info button {\n",[68,71059,71060,71062,71064],{"class":70,"line":10075},[68,71061,70769],{"class":51501},[68,71063,51638],{"class":335},[68,71065,71066],{"class":78},"60px;\n",[68,71068,71069,71071,71073],{"class":70,"line":10102},[68,71070,70989],{"class":51501},[68,71072,51638],{"class":335},[68,71074,70994],{"class":78},[68,71076,71077,71080,71082],{"class":70,"line":10111},[68,71078,71079],{"class":51501},"  background-color",[68,71081,51638],{"class":335},[68,71083,71084],{"class":393},"#004085;\n",[68,71086,71087,71089,71091],{"class":70,"line":10117},[68,71088,70999],{"class":51501},[68,71090,51638],{"class":335},[68,71092,70708],{"class":78},[68,71094,71095,71098,71100],{"class":70,"line":10125},[68,71096,71097],{"class":51501},"  border",[68,71099,51638],{"class":335},[68,71101,70676],{"class":78},[68,71103,71104,71107,71109],{"class":70,"line":10130},[68,71105,71106],{"class":51501},"  color",[68,71108,51638],{"class":335},[68,71110,70913],{"class":393},[68,71112,71113,71116,71118],{"class":70,"line":16809},[68,71114,71115],{"class":51501},"  cursor",[68,71117,51638],{"class":335},[68,71119,71120],{"class":78},"pointer;\n",[68,71122,71123,71125,71127],{"class":70,"line":16815},[68,71124,71008],{"class":51501},[68,71126,51638],{"class":335},[68,71128,71013],{"class":78},[68,71130,71131],{"class":70,"line":16838},[68,71132,1772],{"class":335},[68,71134,71135],{"class":70,"line":16844},[68,71136,71137],{"class":78},".info .age {\n",[68,71139,71140,71142,71144],{"class":70,"line":16867},[68,71141,70769],{"class":51501},[68,71143,51638],{"class":335},[68,71145,71146],{"class":78},"50px;\n",[68,71148,71149],{"class":70,"line":16881},[68,71150,1772],{"class":335},[19,71152,71153],{},"思路：",[19,71155,71156],{},[48,71157],{"alt":63,"src":71158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71160,71161],{},[48,71162],{"alt":63,"src":71163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71165,71166],{},[48,71167],{"alt":63,"src":71168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[301,71170,71172],{"id":71171},"_3315-重绘回流","3.3.15 重绘回流",[19,71174,71175],{},[48,71176],{"alt":63,"src":71177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71179,71180],{},[48,71181],{"alt":63,"src":71182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71184,71185],{},[48,71186],{"alt":63,"src":71187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71189,71191],{"id":71190},"_34-bom","3.4 BOM",[19,71193,71194],{},[48,71195],{"alt":63,"src":71196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71198,71199],{},"平时写的document省略了window而已，实际上是window.document",[19,71201,71202],{},"函数也是这样，调用的时候实际为window.fn()",[19,71204,71205],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71207,71208],{},"window大部分情况下可以省略",[301,71210,71212],{"id":71211},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71214,71215],{},"只执行一次",[19,71217,71218],{},[48,71219],{"alt":63,"src":71220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71222,71223],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71225,71226],{},[48,71227],{"alt":63,"src":71228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[301,71230,71232],{"id":71231},"_342-js执行机制","3.4.2 JS执行机制",[19,71234,71235],{},[48,71236],{"alt":63,"src":71237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71239,71240],{},"两个的结果都是1111 3333 2222",[19,71242,71243],{},[48,71244],{"alt":63,"src":71245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71247,71248],{},[48,71249],{"alt":63,"src":71250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71252,71253],{},[48,71254],{"alt":63,"src":71255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71257,71258],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71260,71261],{},"工作流程：",[19,71263,71264],{},[48,71265],{"alt":63,"src":71266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71268,71269],{},[48,71270],{"alt":63,"src":71271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71273,71274],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71276,71277],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[301,71279,71281],{"id":71280},"_343-location对象","3.4.3 location对象",[19,71283,71284],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71286,71287],{},[48,71288],{"alt":63,"src":71289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71291,71292],{},"href可以跳转页面",[23,71294,71295],{},[26,71296,71297],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71299,71300],{},"search得到提交信息之后网站后边的地址",[19,71302,71303],{},[48,71304],{"alt":63,"src":71305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71307,71308],{},[48,71309],{"alt":63,"src":71310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[23,71312,71313],{"start":92},[26,71314,71315],{},"hash:这个获取单页面应用#后边的地址",[19,71317,71318],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71320,71321],{},[48,71322],{"alt":63,"src":71323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[58,71325,71327],{"className":53268,"code":71326,"language":53270,"meta":63,"style":63},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[65,71328,71329,71349,71369],{"__ignoreMap":63},[68,71330,71331,71333,71335,71337,71339,71342,71345,71347],{"class":70,"line":71},[68,71332,52345],{"class":335},[68,71334,30],{"class":51501},[68,71336,61258],{"class":74},[68,71338,381],{"class":335},[68,71340,71341],{"class":78},"\"#\u002Fmy\"",[68,71343,71344],{"class":335},">我的\u003C\u002F",[68,71346,30],{"class":51501},[68,71348,51508],{"class":335},[68,71350,71351,71353,71355,71357,71359,71362,71365,71367],{"class":70,"line":92},[68,71352,52345],{"class":335},[68,71354,30],{"class":51501},[68,71356,61258],{"class":74},[68,71358,381],{"class":335},[68,71360,71361],{"class":78},"\"#\u002Ffriend\"",[68,71363,71364],{"class":335},">关注\u003C\u002F",[68,71366,30],{"class":51501},[68,71368,51508],{"class":335},[68,71370,71371,71373,71375,71377,71379,71382,71385,71387],{"class":70,"line":1387},[68,71372,52345],{"class":335},[68,71374,30],{"class":51501},[68,71376,61258],{"class":74},[68,71378,381],{"class":335},[68,71380,71381],{"class":78},"\"#\u002Fdownload\"",[68,71383,71384],{"class":335},">下载\u003C\u002F",[68,71386,30],{"class":51501},[68,71388,51508],{"class":335},[19,71390,71391],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[23,71393,71394],{"start":1387},[26,71395,71396,71397,71399,71400,71402],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53917,71398],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53917,71401],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[301,71404,71406],{"id":71405},"_345-navigator对象","3.4.5 navigator对象",[19,71408,71409],{},[48,71410],{"alt":63,"src":71411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[58,71413,71417],{"className":71414,"code":71415,"language":71416,"meta":63,"style":63},"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",[65,71418,71419,71424,71435,71447,71452,71503,71544,71549,71562,71574,71579],{"__ignoreMap":63},[68,71420,71421],{"class":70,"line":71},[68,71422,71423],{"class":393},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[68,71425,71426,71428,71430,71432],{"class":70,"line":92},[68,71427,560],{"class":331},[68,71429,336],{"class":335},[68,71431,54650],{"class":331},[68,71433,71434],{"class":335}," () { \n",[68,71436,71437,71439,71442,71444],{"class":70,"line":1387},[68,71438,6997],{"class":331},[68,71440,71441],{"class":82}," userAgent",[68,71443,13769],{"class":331},[68,71445,71446],{"class":335}," navigator.userAgent \n",[68,71448,71449],{"class":70,"line":1402},[68,71450,71451],{"class":393},"\u002F\u002F 验证是否为Android或iPhone \n",[68,71453,71454,71456,71459,71461,71464,71467,71469,71471,71474,71476,71479,71483,71485,71487,71489,71492,71494,71496,71498,71500],{"class":70,"line":1408},[68,71455,6997],{"class":331},[68,71457,71458],{"class":82}," android",[68,71460,13769],{"class":331},[68,71462,71463],{"class":335}," userAgent.",[68,71465,71466],{"class":74},"match",[68,71468,336],{"class":335},[68,71470,917],{"class":78},[68,71472,71473],{"class":48178},"(Android);",[68,71475,1319],{"class":331},[68,71477,71478],{"class":82},"[\\s",[68,71480,71482],{"class":71481},"snhLl","\\\u002F",[68,71484,1273],{"class":82},[68,71486,814],{"class":331},[68,71488,336],{"class":48178},[68,71490,71491],{"class":82},"[\\d.]",[68,71493,814],{"class":331},[68,71495,762],{"class":48178},[68,71497,1319],{"class":331},[68,71499,917],{"class":78},[68,71501,71502],{"class":335},") \n",[68,71504,71505,71507,71510,71512,71514,71516,71518,71520,71523,71526,71529,71531,71533,71536,71538,71540,71542],{"class":70,"line":1422},[68,71506,6997],{"class":331},[68,71508,71509],{"class":82}," iphone",[68,71511,13769],{"class":331},[68,71513,71463],{"class":335},[68,71515,71466],{"class":74},[68,71517,336],{"class":335},[68,71519,917],{"class":78},[68,71521,71522],{"class":48178},"(iPhone",[68,71524,71525],{"class":82},"\\s",[68,71527,71528],{"class":48178},"OS)",[68,71530,71525],{"class":82},[68,71532,336],{"class":48178},[68,71534,71535],{"class":82},"[\\d_]",[68,71537,814],{"class":331},[68,71539,762],{"class":48178},[68,71541,917],{"class":78},[68,71543,71502],{"class":335},[68,71545,71546],{"class":70,"line":1428},[68,71547,71548],{"class":393},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[68,71550,71551,71553,71556,71559],{"class":70,"line":1519},[68,71552,1738],{"class":331},[68,71554,71555],{"class":335}," (android ",[68,71557,71558],{"class":331},"||",[68,71560,71561],{"class":335}," iphone) { \n",[68,71563,71564,71567,71569,71572],{"class":70,"line":1525},[68,71565,71566],{"class":335},"location.href ",[68,71568,381],{"class":331},[68,71570,71571],{"class":78}," 'http:\u002F\u002Fm.itcast.cn'",[68,71573,2880],{"class":335},[68,71575,71576],{"class":70,"line":1537},[68,71577,71578],{"class":335},"} \n",[68,71580,71581],{"class":70,"line":1819},[68,71582,71583],{"class":335},"})()\n",[301,71585,71587],{"id":71586},"_346-histroy对象","3.4.6 histroy对象",[19,71589,71590],{},[48,71591],{"alt":63,"src":71592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71594,71595],{},"浏览器地址的前进与后退!!!",[19,71597,71598],{},"history.back() 等效于 history.go(-1)",[19,71600,71601],{},"history.forward() 等效于 history.go(1)",[14,71603,71605],{"id":71604},"_35-本地存储","3.5 本地存储",[23,71607,71608,71611,71614],{},[26,71609,71610],{},"数据存储在用户浏览器中",[26,71612,71613],{},"设置、读取方便、甚至页面刷新不丢失数据",[26,71615,71616],{},"容量较大，sessionStorage和localStorage约 5M 左右",[301,71618,71620],{"id":71619},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71622,71623],{},"只能存储字符串",[19,71625,71626],{},[48,71627],{"alt":63,"src":71628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71630,71631],{},[48,71632],{"alt":63,"src":71633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71635,71636],{},"键值对要加引号,不然就会当变量来看了",[19,71638,71639],{},"localStorage.setItem('uname', 'pink')",[19,71641,71642],{},"刷新之后信息不再丢失",[19,71644,71645],{},"操作key,value会跟着变",[19,71647,71648],{},"删除只删除键就可以,即名字",[19,71650,71639],{},[19,71652,71653],{},"改:",[19,71655,71656],{},"localStorage.setItem('uname','red')",[19,71658,71659],{},"有这个键就是改,没有这个键就是改",[19,71661,71662],{},[48,71663],{"alt":63,"src":71664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71666,71667],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71669,71670],{},[48,71671],{"alt":63,"src":71672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71674,71675],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[301,71677,71679],{"id":71678},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71681,71682],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71684,71685],{},"特性:",[23,71687,71688,71691,71694,71697],{},[26,71689,71690],{},"生命周期为关闭浏览器窗口",[26,71692,71693],{},"在同一个窗口(页面)下数据可以共享",[26,71695,71696],{},"以键值对的形式存储使用",[26,71698,71699],{},"用法跟localStorage 基本相同",[301,71701,71703],{"id":71702},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71705,71706],{},"本地只能存储字符串,无法直接存储复杂数据类型",[58,71708,71710],{"className":53268,"code":71709,"language":53270,"meta":63,"style":63},"\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",[65,71711,71712,71720,71725,71730,71735,71740,71744,71749,71754],{"__ignoreMap":63},[68,71713,71714,71716,71718],{"class":70,"line":71},[68,71715,1243],{"class":335},[68,71717,52014],{"class":51501},[68,71719,51508],{"class":335},[68,71721,71722],{"class":70,"line":92},[68,71723,71724],{"class":335},"    const obj = {\n",[68,71726,71727],{"class":70,"line":1387},[68,71728,71729],{"class":335},"      uname: 'pink老师',\n",[68,71731,71732],{"class":70,"line":1402},[68,71733,71734],{"class":335},"      age: 18,\n",[68,71736,71737],{"class":70,"line":1408},[68,71738,71739],{"class":335},"      gender: '女'\n",[68,71741,71742],{"class":70,"line":1422},[68,71743,2393],{"class":335},[68,71745,71746],{"class":70,"line":1428},[68,71747,71748],{"class":335},"    \u002F\u002F 存储复杂数据类型\n",[68,71750,71751],{"class":70,"line":1519},[68,71752,71753],{"class":335},"    localStorage.setItem('obj', obj)\n",[68,71755,71756,71758,71760],{"class":70,"line":1525},[68,71757,52618],{"class":335},[68,71759,52014],{"class":51501},[68,71761,51508],{"class":335},[19,71763,71764],{},[48,71765],{"alt":63,"src":71766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71768,71769],{},"如果获取一下数据:",[19,71771,71772],{},"log(localStorage.getItem('obj'))",[19,71774,71775],{},[48,71776],{"alt":63,"src":71777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71779,71780],{},"发现直接存对象是使用不了的!!!",[22203,71782,71784],{"id":71783},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71786,71787],{},[48,71788],{"alt":63,"src":71789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[58,71791,71793],{"className":50834,"code":71792,"language":50836,"meta":63,"style":63},"\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",[65,71794,71795,71803,71813,71823,71832,71840,71844,71848,71874,71893,71901,71905,71910,71915],{"__ignoreMap":63},[68,71796,71797,71799,71801],{"class":70,"line":71},[68,71798,1243],{"class":335},[68,71800,52014],{"class":51501},[68,71802,51508],{"class":335},[68,71804,71805,71807,71809,71811],{"class":70,"line":92},[68,71806,11426],{"class":331},[68,71808,70172],{"class":82},[68,71810,13769],{"class":331},[68,71812,15777],{"class":335},[68,71814,71815,71818,71821],{"class":70,"line":1387},[68,71816,71817],{"class":335},"      uname: ",[68,71819,71820],{"class":78},"'pink老师'",[68,71822,31667],{"class":335},[68,71824,71825,71828,71830],{"class":70,"line":1402},[68,71826,71827],{"class":335},"      age: ",[68,71829,983],{"class":82},[68,71831,31667],{"class":335},[68,71833,71834,71837],{"class":70,"line":1408},[68,71835,71836],{"class":335},"      gender: ",[68,71838,71839],{"class":78},"'女'\n",[68,71841,71842],{"class":70,"line":1422},[68,71843,2393],{"class":335},[68,71845,71846],{"class":70,"line":1428},[68,71847,71748],{"class":393},[68,71849,71850,71853,71856,71858,71861,71863,71866,71868,71871],{"class":70,"line":1519},[68,71851,71852],{"class":335},"  localStorage.",[68,71854,71855],{"class":74},"setItem",[68,71857,336],{"class":335},[68,71859,71860],{"class":78},"'obj'",[68,71862,12640],{"class":335},[68,71864,71865],{"class":82},"JSON",[68,71867,891],{"class":335},[68,71869,71870],{"class":74},"stringify",[68,71872,71873],{"class":335},"(obj))\n",[68,71875,71876,71879,71881,71884,71887,71889,71891],{"class":70,"line":1525},[68,71877,71878],{"class":335},"  console.",[68,71880,58448],{"class":74},[68,71882,71883],{"class":335},"(localStorage.",[68,71885,71886],{"class":74},"getItem",[68,71888,336],{"class":335},[68,71890,71860],{"class":78},[68,71892,30698],{"class":335},[68,71894,71895,71897,71899],{"class":70,"line":1537},[68,71896,52618],{"class":335},[68,71898,52014],{"class":51501},[68,71900,51508],{"class":335},[68,71902,71903],{"class":70,"line":1819},[68,71904,70822],{"class":335},[68,71906,71907],{"class":70,"line":1824},[68,71908,71909],{"class":335},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[68,71911,71912],{"class":70,"line":1830},[68,71913,71914],{"class":335},"  类型是字符串的\n",[68,71916,71917],{"class":70,"line":1835},[68,71918,71919],{"class":335},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22203,71921,71923],{"id":71922},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71925,71926],{},[48,71927],{"alt":63,"src":71928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71930,71931],{},[48,71932],{"alt":63,"src":71933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[58,71935,71937],{"className":53268,"code":71936,"language":53270,"meta":63,"style":63},"  \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",[65,71938,71939,71947,71951,71955,71959,71963,71967,71972,71977,71982,71987,71992,71997,72002,72007],{"__ignoreMap":63},[68,71940,71941,71943,71945],{"class":70,"line":71},[68,71942,52345],{"class":335},[68,71944,52014],{"class":51501},[68,71946,51508],{"class":335},[68,71948,71949],{"class":70,"line":92},[68,71950,71724],{"class":335},[68,71952,71953],{"class":70,"line":1387},[68,71954,71729],{"class":335},[68,71956,71957],{"class":70,"line":1402},[68,71958,71734],{"class":335},[68,71960,71961],{"class":70,"line":1408},[68,71962,71739],{"class":335},[68,71964,71965],{"class":70,"line":1422},[68,71966,2393],{"class":335},[68,71968,71969],{"class":70,"line":1428},[68,71970,71971],{"class":335},"    \u002F\u002F 1.存储复杂数据类型\n",[68,71973,71974],{"class":70,"line":1519},[68,71975,71976],{"class":335},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[68,71978,71979],{"class":70,"line":1525},[68,71980,71981],{"class":335},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[68,71983,71984],{"class":70,"line":1537},[68,71985,71986],{"class":335},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[68,71988,71989],{"class":70,"line":1819},[68,71990,71991],{"class":335},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[68,71993,71994],{"class":70,"line":1824},[68,71995,71996],{"class":335},"    \u002F\u002F 取\n",[68,71998,71999],{"class":70,"line":1830},[68,72000,72001],{"class":335},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[68,72003,72004],{"class":70,"line":1835},[68,72005,72006],{"class":335},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[68,72008,72009,72011,72013],{"class":70,"line":1849},[68,72010,52618],{"class":335},[68,72012,52014],{"class":51501},[68,72014,51508],{"class":335},[19,72016,72017],{},[48,72018],{"alt":63,"src":72019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[301,72021,72023],{"id":72022},"_356-数组map方法","3.5.6 数组map方法",[19,72025,72026],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72028,72029],{},[48,72030],{"alt":63,"src":72031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72033,72034],{},[48,72035],{"alt":63,"src":72036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72038,72039,72042],{},[483,72040,72041],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72044,72045],{},"map有返回值，但是forEach没有返回值",[19,72047,72048],{},"map是个方法。用的时候要加 ()",[19,72050,72051],{},"map返回的是一个数组",[301,72053,72055],{"id":72054},"_357-数组中join方法","3.5.7 数组中join方法",[19,72057,72058],{},[48,72059],{"alt":63,"src":72060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72062,72063],{},"类似于python中拼接字符串一样！",[23,72065,72066,72069,72072],{},[26,72067,72068],{},"小括号为空则逗号分开",[26,72070,72071],{},"小括号为空字符串 ''，则元素之间没有分隔符",[26,72073,72074],{},"小括号用啥符号就用进行分割",[301,72076,72078],{"id":72077},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[23,72080,72081,72084,72087,72090,72093],{},[26,72082,72083],{},"记住本地时间获取快速方式：new Date().toDateString()",[26,72085,72086],{},"尽量减少DOM操作，用好map+join的渲染方式",[26,72088,72089],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[26,72091,72092],{},"return可以实现函数的结束",[26,72094,72095],{},"禁止跳转是 preventDefault() 不要忘记",[58,72097,72099],{"className":50834,"code":72098,"language":50836,"meta":63,"style":63},"\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",[65,72100,72101,72111,72125,72129,72137,72151,72171,72183,72191,72197,72207,72217,72221,72225,72231,72241,72253,72257,72261,72268,72280,72294,72304,72308,72312,72319,72326,72333,72345,72357,72367,72379,72383,72387,72394,72401,72413,72425,72435,72447,72477,72481,72485,72492,72504,72516,72540,72550,72560,72564,72568,72576,72587,72599,72611,72623,72640,72652,72664,72668,72672,72679,72691,72703,72715,72726,72744,72757,72769,72793,72804,72808,72812,72820,72830,72834,72838,72844,72856,72867,72877,72881,72885,72891,72913,72917,72921,72927,72933,72945,72955,72967,72997,73010,73027,73031,73035,73046,73068,73078,73082,73086,73099,73109,73121,73133,73145,73157,73167,73177,73187,73198,73211,73215,73223,73231,73235,73243,73256,73276,73309,73342,73375,73401,73419,73437,73445,73471,73489,73507,73525,73543,73561,73569,73577,73595,73603,73632,73640,73648,73656,73669,73681,73693,73705,73717,73729,73742,73754,73762,73770,73778,73783,73788,73792,73796,73800,73804,73808,73812,73817,73822,73827,73832,73840,73848,73856,73861,73866,73871,73876,73881,73886,73891,73896,73901,73906,73911,73916,73921,73926,73930,73935,73940,73950,73959,73963,73968,73977,73993,74035,74075,74114,74179,74187,74191,74196,74214,74222,74227,74232,74262,74268,74273,74286,74298,74310,74322,74334,74346,74358,74362,74372,74376,74381,74386,74390,74399,74403,74408,74413,74432,74437,74457,74461,74466,74470,74475,74493,74511,74529,74548,74567,74586,74591,74597,74618,74624,74633,74639,74645,74651,74678,74691,74696,74706,74712,74718,74724,74730,74735,74741,74747,74753,74759,74792,74797,74802,74807,74812,74818,74824,74830,74841,74846,74852,74859,74873,74879,74903,74908,74913,74919,74925,74946,74952,74965,74971,74977,74983,74989,74994,75000,75006,75012,75030,75044,75050,75058,75064,75086,75091,75096,75101,75106,75111,75120,75129,75134],{"__ignoreMap":63},[68,72102,72103,72105,72107,72109],{"class":70,"line":71},[68,72104,51498],{"class":335},[68,72106,51502],{"class":51501},[68,72108,51505],{"class":74},[68,72110,51508],{"class":335},[68,72112,72113,72115,72117,72119,72121,72123],{"class":70,"line":92},[68,72114,1243],{"class":335},[68,72116,50836],{"class":51501},[68,72118,51517],{"class":74},[68,72120,381],{"class":335},[68,72122,51522],{"class":78},[68,72124,51508],{"class":335},[68,72126,72127],{"class":70,"line":1387},[68,72128,2606],{"emptyLinePlaceholder":260},[68,72130,72131,72133,72135],{"class":70,"line":1402},[68,72132,1243],{"class":335},[68,72134,51535],{"class":51501},[68,72136,51508],{"class":335},[68,72138,72139,72141,72143,72145,72147,72149],{"class":70,"line":1408},[68,72140,52345],{"class":335},[68,72142,51545],{"class":51501},[68,72144,51548],{"class":74},[68,72146,381],{"class":335},[68,72148,51553],{"class":78},[68,72150,51508],{"class":335},[68,72152,72153,72155,72157,72159,72161,72163,72165,72167,72169],{"class":70,"line":1422},[68,72154,52345],{"class":335},[68,72156,51545],{"class":51501},[68,72158,15125],{"class":74},[68,72160,381],{"class":335},[68,72162,51592],{"class":78},[68,72164,51572],{"class":74},[68,72166,381],{"class":335},[68,72168,51599],{"class":78},[68,72170,51508],{"class":335},[68,72172,72173,72175,72177,72179,72181],{"class":70,"line":1428},[68,72174,52345],{"class":335},[68,72176,51608],{"class":51501},[68,72178,51611],{"class":335},[68,72180,51608],{"class":51501},[68,72182,51508],{"class":335},[68,72184,72185,72187,72189],{"class":70,"line":1519},[68,72186,52345],{"class":335},[68,72188,250],{"class":51501},[68,72190,51508],{"class":335},[68,72192,72193,72195],{"class":70,"line":1525},[68,72194,6608],{"class":51501},[68,72196,15777],{"class":335},[68,72198,72199,72201,72203,72205],{"class":70,"line":1537},[68,72200,54896],{"class":82},[68,72202,51638],{"class":335},[68,72204,525],{"class":82},[68,72206,1498],{"class":335},[68,72208,72209,72211,72213,72215],{"class":70,"line":1819},[68,72210,54907],{"class":82},[68,72212,51638],{"class":335},[68,72214,525],{"class":82},[68,72216,1498],{"class":335},[68,72218,72219],{"class":70,"line":1824},[68,72220,2393],{"class":335},[68,72222,72223],{"class":70,"line":1830},[68,72224,2606],{"emptyLinePlaceholder":260},[68,72226,72227,72229],{"class":70,"line":1835},[68,72228,57480],{"class":51501},[68,72230,15777],{"class":335},[68,72232,72233,72235,72237,72239],{"class":70,"line":1849},[68,72234,57487],{"class":82},[68,72236,51638],{"class":335},[68,72238,51793],{"class":82},[68,72240,1498],{"class":335},[68,72242,72243,72245,72247,72249,72251],{"class":70,"line":1854},[68,72244,62278],{"class":82},[68,72246,51638],{"class":335},[68,72248,1033],{"class":82},[68,72250,51693],{"class":331},[68,72252,1498],{"class":335},[68,72254,72255],{"class":70,"line":1860},[68,72256,2393],{"class":335},[68,72258,72259],{"class":70,"line":1881},[68,72260,2606],{"emptyLinePlaceholder":260},[68,72262,72263,72266],{"class":70,"line":1886},[68,72264,72265],{"class":74},"    .info",[68,72267,15777],{"class":335},[68,72269,72270,72272,72274,72276,72278],{"class":70,"line":1900},[68,72271,54972],{"class":82},[68,72273,51638],{"class":335},[68,72275,51690],{"class":82},[68,72277,51693],{"class":331},[68,72279,1498],{"class":335},[68,72281,72282,72284,72286,72288,72290,72292],{"class":70,"line":1905},[68,72283,54907],{"class":82},[68,72285,51638],{"class":335},[68,72287,779],{"class":82},[68,72289,51693],{"class":331},[68,72291,51757],{"class":82},[68,72293,1498],{"class":335},[68,72295,72296,72298,72300,72302],{"class":70,"line":1934},[68,72297,57487],{"class":82},[68,72299,51638],{"class":335},[68,72301,51793],{"class":82},[68,72303,1498],{"class":335},[68,72305,72306],{"class":70,"line":1939},[68,72307,2393],{"class":335},[68,72309,72310],{"class":70,"line":1956},[68,72311,2606],{"emptyLinePlaceholder":260},[68,72313,72314,72317],{"class":70,"line":1961},[68,72315,72316],{"class":74},"    .uname",[68,72318,31667],{"class":335},[68,72320,72321,72324],{"class":70,"line":1966},[68,72322,72323],{"class":74},"    .age",[68,72325,31667],{"class":335},[68,72327,72328,72331],{"class":70,"line":1971},[68,72329,72330],{"class":74},"    .salary",[68,72332,15777],{"class":335},[68,72334,72335,72337,72339,72341,72343],{"class":70,"line":1985},[68,72336,54972],{"class":82},[68,72338,51638],{"class":335},[68,72340,644],{"class":82},[68,72342,51693],{"class":331},[68,72344,1498],{"class":335},[68,72346,72347,72349,72351,72353,72355],{"class":70,"line":1990},[68,72348,54986],{"class":82},[68,72350,51638],{"class":335},[68,72352,1033],{"class":82},[68,72354,51693],{"class":331},[68,72356,1498],{"class":335},[68,72358,72359,72361,72363,72365],{"class":70,"line":2783},[68,72360,61981],{"class":82},[68,72362,51638],{"class":335},[68,72364,54938],{"class":82},[68,72366,1498],{"class":335},[68,72368,72369,72371,72373,72375,72377],{"class":70,"line":2797},[68,72370,61951],{"class":82},[68,72372,51638],{"class":335},[68,72374,908],{"class":82},[68,72376,51693],{"class":331},[68,72378,1498],{"class":335},[68,72380,72381],{"class":70,"line":2805},[68,72382,2393],{"class":335},[68,72384,72385],{"class":70,"line":2810},[68,72386,2606],{"emptyLinePlaceholder":260},[68,72388,72389,72392],{"class":70,"line":2816},[68,72390,72391],{"class":74},"    .gender",[68,72393,31667],{"class":335},[68,72395,72396,72399],{"class":70,"line":2822},[68,72397,72398],{"class":74},"    .city",[68,72400,15777],{"class":335},[68,72402,72403,72405,72407,72409,72411],{"class":70,"line":2827},[68,72404,54972],{"class":82},[68,72406,51638],{"class":335},[68,72408,644],{"class":82},[68,72410,51693],{"class":331},[68,72412,1498],{"class":335},[68,72414,72415,72417,72419,72421,72423],{"class":70,"line":8153},[68,72416,54986],{"class":82},[68,72418,51638],{"class":335},[68,72420,1158],{"class":82},[68,72422,51693],{"class":331},[68,72424,1498],{"class":335},[68,72426,72427,72429,72431,72433],{"class":70,"line":8177},[68,72428,61981],{"class":82},[68,72430,51638],{"class":335},[68,72432,54938],{"class":82},[68,72434,1498],{"class":335},[68,72436,72437,72439,72441,72443,72445],{"class":70,"line":8182},[68,72438,61951],{"class":82},[68,72440,51638],{"class":335},[68,72442,908],{"class":82},[68,72444,51693],{"class":331},[68,72446,1498],{"class":335},[68,72448,72449,72451,72453,72455,72457,72459,72462,72464,72466,72468,72471,72473,72475],{"class":70,"line":8188},[68,72450,62178],{"class":82},[68,72452,51638],{"class":335},[68,72454,551],{"class":82},[68,72456,51693],{"class":331},[68,72458,51722],{"class":82},[68,72460,72461],{"class":82}," rgb",[68,72463,336],{"class":335},[68,72465,1929],{"class":82},[68,72467,12640],{"class":335},[68,72469,72470],{"class":82},"197",[68,72472,12640],{"class":335},[68,72474,72470],{"class":82},[68,72476,2925],{"class":335},[68,72478,72479],{"class":70,"line":8215},[68,72480,2393],{"class":335},[68,72482,72483],{"class":70,"line":8220},[68,72484,2606],{"emptyLinePlaceholder":260},[68,72486,72487,72490],{"class":70,"line":8226},[68,72488,72489],{"class":51501},"    button",[68,72491,15777],{"class":335},[68,72493,72494,72496,72498,72500,72502],{"class":70,"line":8238},[68,72495,54986],{"class":82},[68,72497,51638],{"class":335},[68,72499,1158],{"class":82},[68,72501,51693],{"class":331},[68,72503,1498],{"class":335},[68,72505,72506,72508,72510,72512,72514],{"class":70,"line":8250},[68,72507,54972],{"class":82},[68,72509,51638],{"class":335},[68,72511,817],{"class":82},[68,72513,51693],{"class":331},[68,72515,1498],{"class":335},[68,72517,72518,72520,72522,72525,72527,72529,72531,72534,72536,72538],{"class":70,"line":8262},[68,72519,55085],{"class":82},[68,72521,51638],{"class":335},[68,72523,72524],{"class":82},"rgb",[68,72526,336],{"class":335},[68,72528,1302],{"class":82},[68,72530,12640],{"class":335},[68,72532,72533],{"class":82},"187",[68,72535,12640],{"class":335},[68,72537,632],{"class":82},[68,72539,2925],{"class":335},[68,72541,72542,72544,72546,72548],{"class":70,"line":9921},[68,72543,57617],{"class":82},[68,72545,51638],{"class":335},[68,72547,61043],{"class":82},[68,72549,1498],{"class":335},[68,72551,72552,72554,72556,72558],{"class":70,"line":9946},[68,72553,62178],{"class":82},[68,72555,51638],{"class":335},[68,72557,525],{"class":82},[68,72559,1498],{"class":335},[68,72561,72562],{"class":70,"line":9969},[68,72563,2393],{"class":335},[68,72565,72566],{"class":70,"line":9993},[68,72567,2606],{"emptyLinePlaceholder":260},[68,72569,72570,72572,72574],{"class":70,"line":9998},[68,72571,72489],{"class":51501},[68,72573,51889],{"class":51501},[68,72575,15777],{"class":335},[68,72577,72578,72580,72582,72585],{"class":70,"line":10003},[68,72579,55210],{"class":82},[68,72581,51638],{"class":335},[68,72583,72584],{"class":82},"inline-block",[68,72586,1498],{"class":335},[68,72588,72589,72591,72593,72595,72597],{"class":70,"line":10008},[68,72590,54972],{"class":82},[68,72592,51638],{"class":335},[68,72594,779],{"class":82},[68,72596,51693],{"class":331},[68,72598,1498],{"class":335},[68,72600,72601,72603,72605,72607,72609],{"class":70,"line":10017},[68,72602,54986],{"class":82},[68,72604,51638],{"class":335},[68,72606,779],{"class":82},[68,72608,51693],{"class":331},[68,72610,1498],{"class":335},[68,72612,72613,72615,72617,72619,72621],{"class":70,"line":10022},[68,72614,57560],{"class":82},[68,72616,51638],{"class":335},[68,72618,805],{"class":82},[68,72620,51693],{"class":331},[68,72622,1498],{"class":335},[68,72624,72625,72627,72629,72631,72633,72635,72638],{"class":70,"line":10028},[68,72626,62178],{"class":82},[68,72628,51638],{"class":335},[68,72630,551],{"class":82},[68,72632,51693],{"class":331},[68,72634,51722],{"class":82},[68,72636,72637],{"class":82}," #fff",[68,72639,1498],{"class":335},[68,72641,72642,72644,72646,72648,72650],{"class":70,"line":10049},[68,72643,55335],{"class":82},[68,72645,51638],{"class":335},[68,72647,652],{"class":82},[68,72649,51693],{"class":331},[68,72651,1498],{"class":335},[68,72653,72654,72656,72658,72660,72662],{"class":70,"line":10055},[68,72655,61951],{"class":82},[68,72657,51638],{"class":335},[68,72659,551],{"class":82},[68,72661,51693],{"class":331},[68,72663,1498],{"class":335},[68,72665,72666],{"class":70,"line":10069},[68,72667,2393],{"class":335},[68,72669,72670],{"class":70,"line":10075},[68,72671,2606],{"emptyLinePlaceholder":260},[68,72673,72674,72677],{"class":70,"line":10102},[68,72675,72676],{"class":74},"    .total",[68,72678,15777],{"class":335},[68,72680,72681,72683,72685,72687,72689],{"class":70,"line":10111},[68,72682,54972],{"class":82},[68,72684,51638],{"class":335},[68,72686,61830],{"class":82},[68,72688,51693],{"class":331},[68,72690,1498],{"class":335},[68,72692,72693,72695,72697,72699,72701],{"class":70,"line":10117},[68,72694,54986],{"class":82},[68,72696,51638],{"class":335},[68,72698,734],{"class":82},[68,72700,51693],{"class":331},[68,72702,1498],{"class":335},[68,72704,72705,72707,72709,72711,72713],{"class":70,"line":10125},[68,72706,57560],{"class":82},[68,72708,51638],{"class":335},[68,72710,734],{"class":82},[68,72712,51693],{"class":331},[68,72714,1498],{"class":335},[68,72716,72717,72719,72721,72724],{"class":70,"line":10130},[68,72718,57487],{"class":82},[68,72720,51638],{"class":335},[68,72722,72723],{"class":82},"right",[68,72725,1498],{"class":335},[68,72727,72728,72730,72732,72734,72736,72738,72740,72742],{"class":70,"line":16809},[68,72729,54907],{"class":82},[68,72731,51638],{"class":335},[68,72733,734],{"class":82},[68,72735,51693],{"class":331},[68,72737,51757],{"class":82},[68,72739,2244],{"class":82},[68,72741,51693],{"class":331},[68,72743,1498],{"class":335},[68,72745,72746,72749,72751,72753,72755],{"class":70,"line":16815},[68,72747,72748],{"class":82},"      padding-right",[68,72750,51638],{"class":335},[68,72752,779],{"class":82},[68,72754,51693],{"class":331},[68,72756,1498],{"class":335},[68,72758,72759,72761,72763,72765,72767],{"class":70,"line":16838},[68,72760,55123],{"class":82},[68,72762,51638],{"class":335},[68,72764,856],{"class":82},[68,72766,51693],{"class":331},[68,72768,1498],{"class":335},[68,72770,72771,72773,72775,72777,72779,72782,72784,72787,72789,72791],{"class":70,"line":16844},[68,72772,55085],{"class":82},[68,72774,51638],{"class":335},[68,72776,72524],{"class":82},[68,72778,336],{"class":335},[68,72780,72781],{"class":82},"237",[68,72783,12640],{"class":335},[68,72785,72786],{"class":82},"235",[68,72788,12640],{"class":335},[68,72790,72786],{"class":82},[68,72792,2925],{"class":335},[68,72794,72795,72798,72800,72802],{"class":70,"line":16867},[68,72796,72797],{"class":82},"      box-sizing",[68,72799,51638],{"class":335},[68,72801,60706],{"class":82},[68,72803,1498],{"class":335},[68,72805,72806],{"class":70,"line":16881},[68,72807,2393],{"class":335},[68,72809,72810],{"class":70,"line":16901},[68,72811,2606],{"emptyLinePlaceholder":260},[68,72813,72814,72816,72818],{"class":70,"line":16907},[68,72815,72676],{"class":74},[68,72817,51889],{"class":51501},[68,72819,15777],{"class":335},[68,72821,72822,72824,72826,72828],{"class":70,"line":16918},[68,72823,57617],{"class":82},[68,72825,51638],{"class":335},[68,72827,57622],{"class":82},[68,72829,1498],{"class":335},[68,72831,72832],{"class":70,"line":16941},[68,72833,2393],{"class":335},[68,72835,72836],{"class":70,"line":16963},[68,72837,2606],{"emptyLinePlaceholder":260},[68,72839,72840,72842],{"class":70,"line":16968},[68,72841,65224],{"class":51501},[68,72843,15777],{"class":335},[68,72845,72846,72848,72850,72852,72854],{"class":70,"line":16974},[68,72847,54972],{"class":82},[68,72849,51638],{"class":335},[68,72851,61830],{"class":82},[68,72853,51693],{"class":331},[68,72855,1498],{"class":335},[68,72857,72858,72860,72862,72865],{"class":70,"line":16988},[68,72859,54907],{"class":82},[68,72861,51638],{"class":335},[68,72863,72864],{"class":82},"auto",[68,72866,1498],{"class":335},[68,72868,72869,72871,72873,72875],{"class":70,"line":17001},[68,72870,65231],{"class":82},[68,72872,51638],{"class":335},[68,72874,65236],{"class":82},[68,72876,1498],{"class":335},[68,72878,72879],{"class":70,"line":17006},[68,72880,2393],{"class":335},[68,72882,72883],{"class":70,"line":17020},[68,72884,2606],{"emptyLinePlaceholder":260},[68,72886,72887,72889],{"class":70,"line":17025},[68,72888,65316],{"class":51501},[68,72890,15777],{"class":335},[68,72892,72893,72895,72897,72899,72901,72903,72905,72907,72909,72911],{"class":70,"line":17031},[68,72894,55085],{"class":82},[68,72896,51638],{"class":335},[68,72898,72524],{"class":82},[68,72900,336],{"class":335},[68,72902,72781],{"class":82},[68,72904,12640],{"class":335},[68,72906,72786],{"class":82},[68,72908,12640],{"class":335},[68,72910,72786],{"class":82},[68,72912,2925],{"class":335},[68,72914,72915],{"class":70,"line":17036},[68,72916,2393],{"class":335},[68,72918,72919],{"class":70,"line":17050},[68,72920,2606],{"emptyLinePlaceholder":260},[68,72922,72923,72925],{"class":70,"line":17055},[68,72924,65316],{"class":51501},[68,72926,31667],{"class":335},[68,72928,72929,72931],{"class":70,"line":17060},[68,72930,65382],{"class":51501},[68,72932,15777],{"class":335},[68,72934,72935,72937,72939,72941,72943],{"class":70,"line":17074},[68,72936,54986],{"class":82},[68,72938,51638],{"class":335},[68,72940,606],{"class":82},[68,72942,51693],{"class":331},[68,72944,1498],{"class":335},[68,72946,72947,72949,72951,72953],{"class":70,"line":17086},[68,72948,57487],{"class":82},[68,72950,51638],{"class":335},[68,72952,23941],{"class":82},[68,72954,1498],{"class":335},[68,72956,72957,72959,72961,72963,72965],{"class":70,"line":17091},[68,72958,55123],{"class":82},[68,72960,51638],{"class":335},[68,72962,882],{"class":82},[68,72964,51693],{"class":331},[68,72966,1498],{"class":335},[68,72968,72969,72971,72973,72975,72977,72979,72981,72983,72986,72988,72991,72993,72995],{"class":70,"line":17104},[68,72970,62178],{"class":82},[68,72972,51638],{"class":335},[68,72974,551],{"class":82},[68,72976,51693],{"class":331},[68,72978,51722],{"class":82},[68,72980,72461],{"class":82},[68,72982,336],{"class":335},[68,72984,72985],{"class":82},"228",[68,72987,12640],{"class":335},[68,72989,72990],{"class":82},"225",[68,72992,12640],{"class":335},[68,72994,72990],{"class":82},[68,72996,2925],{"class":335},[68,72998,72999,73002,73004,73006,73008],{"class":70,"line":17109},[68,73000,73001],{"class":82},"      padding-left",[68,73003,51638],{"class":335},[68,73005,652],{"class":82},[68,73007,51693],{"class":331},[68,73009,1498],{"class":335},[68,73011,73012,73014,73016,73018,73021,73023,73025],{"class":70,"line":17114},[68,73013,62061],{"class":82},[68,73015,51638],{"class":335},[68,73017,28325],{"class":82},[68,73019,73020],{"class":82}," linear",[68,73022,62068],{"class":82},[68,73024,1028],{"class":331},[68,73026,1498],{"class":335},[68,73028,73029],{"class":70,"line":17119},[68,73030,2393],{"class":335},[68,73032,73033],{"class":70,"line":17132},[68,73034,2606],{"emptyLinePlaceholder":260},[68,73036,73037,73040,73042,73044],{"class":70,"line":17137},[68,73038,73039],{"class":51501},"    tbody",[68,73041,70345],{"class":51501},[68,73043,61141],{"class":74},[68,73045,15777],{"class":335},[68,73047,73048,73050,73052,73054,73056,73058,73060,73062,73064,73066],{"class":70,"line":32834},[68,73049,55085],{"class":82},[68,73051,51638],{"class":335},[68,73053,72524],{"class":82},[68,73055,336],{"class":335},[68,73057,72781],{"class":82},[68,73059,12640],{"class":335},[68,73061,72786],{"class":82},[68,73063,12640],{"class":335},[68,73065,72786],{"class":82},[68,73067,2925],{"class":335},[68,73069,73070,73072,73074,73076],{"class":70,"line":32840},[68,73071,62226],{"class":82},[68,73073,51638],{"class":335},[68,73075,62231],{"class":82},[68,73077,1498],{"class":335},[68,73079,73080],{"class":70,"line":32846},[68,73081,2393],{"class":335},[68,73083,73084],{"class":70,"line":32852},[68,73085,2606],{"emptyLinePlaceholder":260},[68,73087,73088,73090,73092,73095,73097],{"class":70,"line":32858},[68,73089,73039],{"class":51501},[68,73091,70345],{"class":51501},[68,73093,73094],{"class":51501}," td",[68,73096,1606],{"class":51501},[68,73098,15777],{"class":335},[68,73100,73101,73103,73105,73107],{"class":70,"line":32869},[68,73102,55210],{"class":82},[68,73104,51638],{"class":335},[68,73106,61070],{"class":82},[68,73108,1498],{"class":335},[68,73110,73111,73113,73115,73117,73119],{"class":70,"line":32875},[68,73112,54972],{"class":82},[68,73114,51638],{"class":335},[68,73116,1240],{"class":82},[68,73118,51693],{"class":331},[68,73120,1498],{"class":335},[68,73122,73123,73125,73127,73129,73131],{"class":70,"line":32895},[68,73124,54986],{"class":82},[68,73126,51638],{"class":335},[68,73128,1158],{"class":82},[68,73130,51693],{"class":331},[68,73132,1498],{"class":335},[68,73134,73135,73137,73139,73141,73143],{"class":70,"line":32901},[68,73136,57560],{"class":82},[68,73138,51638],{"class":335},[68,73140,1158],{"class":82},[68,73142,51693],{"class":331},[68,73144,1498],{"class":335},[68,73146,73147,73149,73151,73153,73155],{"class":70,"line":32912},[68,73148,62278],{"class":82},[68,73150,51638],{"class":335},[68,73152,412],{"class":82},[68,73154,51693],{"class":331},[68,73156,1498],{"class":335},[68,73158,73159,73161,73163,73165],{"class":70,"line":32918},[68,73160,57617],{"class":82},[68,73162,51638],{"class":335},[68,73164,61043],{"class":82},[68,73166,1498],{"class":335},[68,73168,73169,73171,73173,73175],{"class":70,"line":32924},[68,73170,57487],{"class":82},[68,73172,51638],{"class":335},[68,73174,51793],{"class":82},[68,73176,1498],{"class":335},[68,73178,73179,73181,73183,73185],{"class":70,"line":32930},[68,73180,64171],{"class":82},[68,73182,51638],{"class":335},[68,73184,54938],{"class":82},[68,73186,1498],{"class":335},[68,73188,73189,73191,73193,73196],{"class":70,"line":32936},[68,73190,55085],{"class":82},[68,73192,51638],{"class":335},[68,73194,73195],{"class":82},"orange",[68,73197,1498],{"class":335},[68,73199,73200,73202,73204,73207,73209],{"class":70,"line":32942},[68,73201,55335],{"class":82},[68,73203,51638],{"class":335},[68,73205,73206],{"class":82},"12.5",[68,73208,51693],{"class":331},[68,73210,1498],{"class":335},[68,73212,73213],{"class":70,"line":32948},[68,73214,2393],{"class":335},[68,73216,73217,73219,73221],{"class":70,"line":32954},[68,73218,52618],{"class":335},[68,73220,250],{"class":51501},[68,73222,51508],{"class":335},[68,73224,73225,73227,73229],{"class":70,"line":32974},[68,73226,51986],{"class":335},[68,73228,51535],{"class":51501},[68,73230,51508],{"class":335},[68,73232,73233],{"class":70,"line":32980},[68,73234,2606],{"emptyLinePlaceholder":260},[68,73236,73237,73239,73241],{"class":70,"line":32996},[68,73238,1243],{"class":335},[68,73240,52001],{"class":51501},[68,73242,51508],{"class":335},[68,73244,73245,73247,73249,73252,73254],{"class":70,"line":33002},[68,73246,52345],{"class":335},[68,73248,14],{"class":51501},[68,73250,73251],{"class":335},">学生就业统计表\u003C\u002F",[68,73253,14],{"class":51501},[68,73255,51508],{"class":335},[68,73257,73258,73260,73262,73264,73266,73268,73270,73272,73274],{"class":70,"line":33016},[68,73259,52345],{"class":335},[68,73261,66826],{"class":51501},[68,73263,53687],{"class":74},[68,73265,381],{"class":335},[68,73267,62865],{"class":78},[68,73269,69271],{"class":74},[68,73271,381],{"class":335},[68,73273,31977],{"class":78},[68,73275,51508],{"class":335},[68,73277,73278,73280,73282,73284,73286,73288,73290,73292,73294,73296,73298,73301,73303,73305,73307],{"class":70,"line":33022},[68,73279,51542],{"class":335},[68,73281,54022],{"class":51501},[68,73283,54025],{"class":74},[68,73285,381],{"class":335},[68,73287,62900],{"class":78},[68,73289,15125],{"class":74},[68,73291,381],{"class":335},[68,73293,69297],{"class":78},[68,73295,61221],{"class":74},[68,73297,381],{"class":335},[68,73299,73300],{"class":78},"\"姓名\"",[68,73302,53687],{"class":74},[68,73304,381],{"class":335},[68,73306,69297],{"class":78},[68,73308,51508],{"class":335},[68,73310,73311,73313,73315,73317,73319,73321,73323,73325,73327,73329,73331,73334,73336,73338,73340],{"class":70,"line":33037},[68,73312,51542],{"class":335},[68,73314,54022],{"class":51501},[68,73316,54025],{"class":74},[68,73318,381],{"class":335},[68,73320,62900],{"class":78},[68,73322,15125],{"class":74},[68,73324,381],{"class":335},[68,73326,69325],{"class":78},[68,73328,61221],{"class":74},[68,73330,381],{"class":335},[68,73332,73333],{"class":78},"\"年龄\"",[68,73335,53687],{"class":74},[68,73337,381],{"class":335},[68,73339,69325],{"class":78},[68,73341,51508],{"class":335},[68,73343,73344,73346,73348,73350,73352,73354,73356,73358,73360,73362,73364,73367,73369,73371,73373],{"class":70,"line":33043},[68,73345,51542],{"class":335},[68,73347,54022],{"class":51501},[68,73349,54025],{"class":74},[68,73351,381],{"class":335},[68,73353,62900],{"class":78},[68,73355,15125],{"class":74},[68,73357,381],{"class":335},[68,73359,69427],{"class":78},[68,73361,61221],{"class":74},[68,73363,381],{"class":335},[68,73365,73366],{"class":78},"\"薪资\"",[68,73368,53687],{"class":74},[68,73370,381],{"class":335},[68,73372,69427],{"class":78},[68,73374,51508],{"class":335},[68,73376,73377,73379,73381,73383,73385,73387,73389,73391,73393,73395,73397,73399],{"class":70,"line":33052},[68,73378,51542],{"class":335},[68,73380,69345],{"class":51501},[68,73382,15125],{"class":74},[68,73384,381],{"class":335},[68,73386,69352],{"class":78},[68,73388,15164],{"class":74},[68,73390,381],{"class":335},[68,73392,7857],{"class":78},[68,73394,53687],{"class":74},[68,73396,381],{"class":335},[68,73398,69352],{"class":78},[68,73400,51508],{"class":335},[68,73402,73403,73405,73407,73409,73411,73413,73415,73417],{"class":70,"line":33058},[68,73404,55435],{"class":335},[68,73406,69367],{"class":51501},[68,73408,66852],{"class":74},[68,73410,381],{"class":335},[68,73412,10166],{"class":78},[68,73414,69376],{"class":335},[68,73416,69367],{"class":51501},[68,73418,51508],{"class":335},[68,73420,73421,73423,73425,73427,73429,73431,73433,73435],{"class":70,"line":33067},[68,73422,55435],{"class":335},[68,73424,69367],{"class":51501},[68,73426,66852],{"class":74},[68,73428,381],{"class":335},[68,73430,10235],{"class":78},[68,73432,69395],{"class":335},[68,73434,69367],{"class":51501},[68,73436,51508],{"class":335},[68,73438,73439,73441,73443],{"class":70,"line":33073},[68,73440,51977],{"class":335},[68,73442,69345],{"class":51501},[68,73444,51508],{"class":335},[68,73446,73447,73449,73451,73453,73455,73457,73459,73461,73463,73465,73467,73469],{"class":70,"line":33079},[68,73448,51542],{"class":335},[68,73450,69345],{"class":51501},[68,73452,15125],{"class":74},[68,73454,381],{"class":335},[68,73456,69449],{"class":78},[68,73458,15164],{"class":74},[68,73460,381],{"class":335},[68,73462,7857],{"class":78},[68,73464,53687],{"class":74},[68,73466,381],{"class":335},[68,73468,69449],{"class":78},[68,73470,51508],{"class":335},[68,73472,73473,73475,73477,73479,73481,73483,73485,73487],{"class":70,"line":33088},[68,73474,55435],{"class":335},[68,73476,69367],{"class":51501},[68,73478,66852],{"class":74},[68,73480,381],{"class":335},[68,73482,69470],{"class":78},[68,73484,69473],{"class":335},[68,73486,69367],{"class":51501},[68,73488,51508],{"class":335},[68,73490,73491,73493,73495,73497,73499,73501,73503,73505],{"class":70,"line":33094},[68,73492,55435],{"class":335},[68,73494,69367],{"class":51501},[68,73496,66852],{"class":74},[68,73498,381],{"class":335},[68,73500,69490],{"class":78},[68,73502,69493],{"class":335},[68,73504,69367],{"class":51501},[68,73506,51508],{"class":335},[68,73508,73509,73511,73513,73515,73517,73519,73521,73523],{"class":70,"line":33105},[68,73510,55435],{"class":335},[68,73512,69367],{"class":51501},[68,73514,66852],{"class":74},[68,73516,381],{"class":335},[68,73518,69510],{"class":78},[68,73520,69513],{"class":335},[68,73522,69367],{"class":51501},[68,73524,51508],{"class":335},[68,73526,73527,73529,73531,73533,73535,73537,73539,73541],{"class":70,"line":33111},[68,73528,55435],{"class":335},[68,73530,69367],{"class":51501},[68,73532,66852],{"class":74},[68,73534,381],{"class":335},[68,73536,69530],{"class":78},[68,73538,69533],{"class":335},[68,73540,69367],{"class":51501},[68,73542,51508],{"class":335},[68,73544,73545,73547,73549,73551,73553,73555,73557,73559],{"class":70,"line":33130},[68,73546,55435],{"class":335},[68,73548,69367],{"class":51501},[68,73550,66852],{"class":74},[68,73552,381],{"class":335},[68,73554,69550],{"class":78},[68,73556,69553],{"class":335},[68,73558,69367],{"class":51501},[68,73560,51508],{"class":335},[68,73562,73563,73565,73567],{"class":70,"line":33136},[68,73564,51977],{"class":335},[68,73566,69345],{"class":51501},[68,73568,51508],{"class":335},[68,73570,73571,73573,73575],{"class":70,"line":33147},[68,73572,51542],{"class":335},[68,73574,54088],{"class":51501},[68,73576,51508],{"class":335},[68,73578,73579,73581,73583,73586,73588,73591,73593],{"class":70,"line":33153},[68,73580,55435],{"class":335},[68,73582,68],{"class":51501},[68,73584,73585],{"class":335},">+\u003C\u002F",[68,73587,68],{"class":51501},[68,73589,73590],{"class":335},">添加\u003C\u002F",[68,73592,54088],{"class":51501},[68,73594,51508],{"class":335},[68,73596,73597,73599,73601],{"class":70,"line":33173},[68,73598,52618],{"class":335},[68,73600,66826],{"class":51501},[68,73602,51508],{"class":335},[68,73604,73605,73607,73609,73611,73613,73615,73618,73620,73623,73625,73628,73630],{"class":70,"line":33189},[68,73606,52345],{"class":335},[68,73608,51812],{"class":51501},[68,73610,53687],{"class":74},[68,73612,381],{"class":335},[68,73614,62781],{"class":78},[68,73616,73617],{"class":335},">共有数据 \u003C",[68,73619,68],{"class":51501},[68,73621,73622],{"class":335},">0\u003C\u002F",[68,73624,68],{"class":51501},[68,73626,73627],{"class":335},"> 条\u003C\u002F",[68,73629,51812],{"class":51501},[68,73631,51508],{"class":335},[68,73633,73634,73636,73638],{"class":70,"line":33195},[68,73635,52345],{"class":335},[68,73637,471],{"class":51501},[68,73639,51508],{"class":335},[68,73641,73642,73644,73646],{"class":70,"line":33209},[68,73643,51542],{"class":335},[68,73645,474],{"class":51501},[68,73647,51508],{"class":335},[68,73649,73650,73652,73654],{"class":70,"line":33215},[68,73651,55435],{"class":335},[68,73653,477],{"class":51501},[68,73655,51508],{"class":335},[68,73657,73658,73660,73662,73665,73667],{"class":70,"line":33221},[68,73659,55503],{"class":335},[68,73661,480],{"class":51501},[68,73663,73664],{"class":335},">ID\u003C\u002F",[68,73666,480],{"class":51501},[68,73668,51508],{"class":335},[68,73670,73671,73673,73675,73677,73679],{"class":70,"line":33232},[68,73672,55503],{"class":335},[68,73674,480],{"class":51501},[68,73676,69656],{"class":335},[68,73678,480],{"class":51501},[68,73680,51508],{"class":335},[68,73682,73683,73685,73687,73689,73691],{"class":70,"line":33238},[68,73684,55503],{"class":335},[68,73686,480],{"class":51501},[68,73688,69669],{"class":335},[68,73690,480],{"class":51501},[68,73692,51508],{"class":335},[68,73694,73695,73697,73699,73701,73703],{"class":70,"line":33244},[68,73696,55503],{"class":335},[68,73698,480],{"class":51501},[68,73700,69682],{"class":335},[68,73702,480],{"class":51501},[68,73704,51508],{"class":335},[68,73706,73707,73709,73711,73713,73715],{"class":70,"line":33254},[68,73708,55503],{"class":335},[68,73710,480],{"class":51501},[68,73712,69695],{"class":335},[68,73714,480],{"class":51501},[68,73716,51508],{"class":335},[68,73718,73719,73721,73723,73725,73727],{"class":70,"line":33260},[68,73720,55503],{"class":335},[68,73722,480],{"class":51501},[68,73724,69708],{"class":335},[68,73726,480],{"class":51501},[68,73728,51508],{"class":335},[68,73730,73731,73733,73735,73738,73740],{"class":70,"line":33271},[68,73732,55503],{"class":335},[68,73734,480],{"class":51501},[68,73736,73737],{"class":335},">录入时间\u003C\u002F",[68,73739,480],{"class":51501},[68,73741,51508],{"class":335},[68,73743,73744,73746,73748,73750,73752],{"class":70,"line":33277},[68,73745,55503],{"class":335},[68,73747,480],{"class":51501},[68,73749,69721],{"class":335},[68,73751,480],{"class":51501},[68,73753,51508],{"class":335},[68,73755,73756,73758,73760],{"class":70,"line":33287},[68,73757,55608],{"class":335},[68,73759,477],{"class":51501},[68,73761,51508],{"class":335},[68,73763,73764,73766,73768],{"class":70,"line":33292},[68,73765,51977],{"class":335},[68,73767,474],{"class":51501},[68,73769,51508],{"class":335},[68,73771,73772,73774,73776],{"class":70,"line":33298},[68,73773,51542],{"class":335},[68,73775,518],{"class":51501},[68,73777,51508],{"class":335},[68,73779,73780],{"class":70,"line":33347},[68,73781,73782],{"class":393},"      \u003C!-- \u003Ctr>\n",[68,73784,73785],{"class":70,"line":33394},[68,73786,73787],{"class":393},"        \u003Ctd>1\u003C\u002Ftd>\n",[68,73789,73790],{"class":70,"line":33399},[68,73791,73787],{"class":393},[68,73793,73794],{"class":70,"line":33405},[68,73795,73787],{"class":393},[68,73797,73798],{"class":70,"line":33424},[68,73799,73787],{"class":393},[68,73801,73802],{"class":70,"line":33430},[68,73803,73787],{"class":393},[68,73805,73806],{"class":70,"line":33450},[68,73807,73787],{"class":393},[68,73809,73810],{"class":70,"line":33456},[68,73811,73787],{"class":393},[68,73813,73814],{"class":70,"line":33462},[68,73815,73816],{"class":393},"        \u003Ctd>\n",[68,73818,73819],{"class":70,"line":33472},[68,73820,73821],{"class":393},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[68,73823,73824],{"class":70,"line":33477},[68,73825,73826],{"class":393},"        \u003C\u002Ftd>\n",[68,73828,73829],{"class":70,"line":33483},[68,73830,73831],{"class":393},"      \u003C\u002Ftr> -->\n",[68,73833,73834,73836,73838],{"class":70,"line":33499},[68,73835,51977],{"class":335},[68,73837,518],{"class":51501},[68,73839,51508],{"class":335},[68,73841,73842,73844,73846],{"class":70,"line":33544},[68,73843,52618],{"class":335},[68,73845,471],{"class":51501},[68,73847,51508],{"class":335},[68,73849,73850,73852,73854],{"class":70,"line":33550},[68,73851,52345],{"class":335},[68,73853,52014],{"class":51501},[68,73855,51508],{"class":335},[68,73857,73858],{"class":70,"line":33556},[68,73859,73860],{"class":393},"    \u002F\u002F const initData = [{\n",[68,73862,73863],{"class":70,"line":33562},[68,73864,73865],{"class":393},"    \u002F\u002F   unameId: 1,\n",[68,73867,73868],{"class":70,"line":33573},[68,73869,73870],{"class":393},"    \u002F\u002F   uname: '华晨宇',\n",[68,73872,73873],{"class":70,"line":33579},[68,73874,73875],{"class":393},"    \u002F\u002F   age: 22,\n",[68,73877,73878],{"class":70,"line":33585},[68,73879,73880],{"class":393},"    \u002F\u002F   salary: 12000,\n",[68,73882,73883],{"class":70,"line":33591},[68,73884,73885],{"class":393},"    \u002F\u002F   gender: '男',\n",[68,73887,73888],{"class":70,"line":33609},[68,73889,73890],{"class":393},"    \u002F\u002F   city: '北京',\n",[68,73892,73893],{"class":70,"line":33623},[68,73894,73895],{"class":393},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[68,73897,73898],{"class":70,"line":33632},[68,73899,73900],{"class":393},"    \u002F\u002F }]\n",[68,73902,73903],{"class":70,"line":33641},[68,73904,73905],{"class":393},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[68,73907,73908],{"class":70,"line":33650},[68,73909,73910],{"class":393},"    \u002F\u002F 1.渲染业务\n",[68,73912,73913],{"class":70,"line":33659},[68,73914,73915],{"class":393},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[68,73917,73918],{"class":70,"line":33665},[68,73919,73920],{"class":393},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[68,73922,73923],{"class":70,"line":33671},[68,73924,73925],{"class":393},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[68,73927,73928],{"class":70,"line":33679},[68,73929,2606],{"emptyLinePlaceholder":260},[68,73931,73932],{"class":70,"line":33684},[68,73933,73934],{"class":393},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[68,73936,73937],{"class":70,"line":33690},[68,73938,73939],{"class":393},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[68,73941,73942,73944,73946,73948],{"class":70,"line":33701},[68,73943,11426],{"class":331},[68,73945,57896],{"class":82},[68,73947,13769],{"class":331},[68,73949,52039],{"class":335},[68,73951,73952,73955,73957],{"class":70,"line":33707},[68,73953,73954],{"class":335},"    console.",[68,73956,58448],{"class":74},[68,73958,52613],{"class":335},[68,73960,73961],{"class":70,"line":33727},[68,73962,2606],{"emptyLinePlaceholder":260},[68,73964,73965],{"class":70,"line":33733},[68,73966,73967],{"class":393},"    \u002F\u002F 时间函数\n",[68,73969,73970,73972,73975],{"class":70,"line":33739},[68,73971,70285],{"class":331},[68,73973,73974],{"class":74}," getTime",[68,73976,11058],{"class":335},[68,73978,73979,73981,73984,73986,73988,73991],{"class":70,"line":33745},[68,73980,58429],{"class":331},[68,73982,73983],{"class":82}," date",[68,73985,13769],{"class":331},[68,73987,11783],{"class":331},[68,73989,73990],{"class":74}," Date",[68,73992,2182],{"class":335},[68,73994,73995,73997,73999,74001,74004,74007,74009,74011,74013,74016,74019,74021,74023,74025,74027,74029,74031,74033],{"class":70,"line":33762},[68,73996,58429],{"class":331},[68,73998,16296],{"class":82},[68,74000,13769],{"class":331},[68,74002,74003],{"class":335}," date.",[68,74005,74006],{"class":74},"getHours",[68,74008,13255],{"class":335},[68,74010,1243],{"class":331},[68,74012,2244],{"class":82},[68,74014,74015],{"class":331}," ?",[68,74017,74018],{"class":78}," '0'",[68,74020,45767],{"class":331},[68,74022,74003],{"class":335},[68,74024,74006],{"class":74},[68,74026,13255],{"class":335},[68,74028,1192],{"class":331},[68,74030,74003],{"class":335},[68,74032,74006],{"class":74},[68,74034,2182],{"class":335},[68,74036,74037,74039,74042,74044,74046,74049,74051,74053,74055,74057,74059,74061,74063,74065,74067,74069,74071,74073],{"class":70,"line":33768},[68,74038,58429],{"class":331},[68,74040,74041],{"class":82}," m",[68,74043,13769],{"class":331},[68,74045,74003],{"class":335},[68,74047,74048],{"class":74},"getMinutes",[68,74050,13255],{"class":335},[68,74052,1243],{"class":331},[68,74054,2244],{"class":82},[68,74056,74015],{"class":331},[68,74058,74018],{"class":78},[68,74060,45767],{"class":331},[68,74062,74003],{"class":335},[68,74064,74048],{"class":74},[68,74066,13255],{"class":335},[68,74068,1192],{"class":331},[68,74070,74003],{"class":335},[68,74072,74048],{"class":74},[68,74074,2182],{"class":335},[68,74076,74077,74079,74081,74083,74085,74088,74090,74092,74094,74096,74098,74100,74102,74104,74106,74108,74110,74112],{"class":70,"line":33774},[68,74078,58429],{"class":331},[68,74080,8633],{"class":82},[68,74082,13769],{"class":331},[68,74084,74003],{"class":335},[68,74086,74087],{"class":74},"getSeconds",[68,74089,13255],{"class":335},[68,74091,1243],{"class":331},[68,74093,2244],{"class":82},[68,74095,74015],{"class":331},[68,74097,74018],{"class":78},[68,74099,45767],{"class":331},[68,74101,74003],{"class":335},[68,74103,74087],{"class":74},[68,74105,13255],{"class":335},[68,74107,1192],{"class":331},[68,74109,74003],{"class":335},[68,74111,74087],{"class":74},[68,74113,2182],{"class":335},[68,74115,74116,74118,74121,74123,74125,74128,74130,74133,74135,74138,74140,74142,74145,74147,74149,74151,74153,74155,74157,74160,74162,74165,74167,74170,74172,74174,74176],{"class":70,"line":33780},[68,74117,58429],{"class":331},[68,74119,74120],{"class":82}," str",[68,74122,13769],{"class":331},[68,74124,63104],{"class":78},[68,74126,74127],{"class":335},"date",[68,74129,891],{"class":78},[68,74131,74132],{"class":74},"getFullYear",[68,74134,2633],{"class":78},[68,74136,74137],{"class":78},"}\u002F${",[68,74139,74127],{"class":335},[68,74141,891],{"class":78},[68,74143,74144],{"class":74},"getMonth",[68,74146,13255],{"class":78},[68,74148,814],{"class":331},[68,74150,25322],{"class":82},[68,74152,74137],{"class":78},[68,74154,74127],{"class":335},[68,74156,891],{"class":78},[68,74158,74159],{"class":74},"getDate",[68,74161,2633],{"class":78},[68,74163,74164],{"class":78},"} ${",[68,74166,748],{"class":335},[68,74168,74169],{"class":78},"}:${",[68,74171,877],{"class":335},[68,74173,74169],{"class":78},[68,74175,1028],{"class":335},[68,74177,74178],{"class":78},"}`\n",[68,74180,74181,74184],{"class":70,"line":33786},[68,74182,74183],{"class":331},"      return",[68,74185,74186],{"class":335}," str\n",[68,74188,74189],{"class":70,"line":33792},[68,74190,2393],{"class":335},[68,74192,74193],{"class":70,"line":33819},[68,74194,74195],{"class":393},"    \u002F\u002F 渲染函数\n",[68,74197,74198,74200,74202,74204,74206,74208,74210,74212],{"class":70,"line":33843},[68,74199,11426],{"class":331},[68,74201,69948],{"class":82},[68,74203,13769],{"class":331},[68,74205,54597],{"class":335},[68,74207,54600],{"class":74},[68,74209,336],{"class":335},[68,74211,69959],{"class":78},[68,74213,342],{"class":335},[68,74215,74216,74218,74220],{"class":70,"line":33849},[68,74217,70285],{"class":331},[68,74219,70288],{"class":74},[68,74221,11058],{"class":335},[68,74223,74224],{"class":70,"line":33855},[68,74225,74226],{"class":393},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[68,74228,74229],{"class":70,"line":33861},[68,74230,74231],{"class":393},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[68,74233,74234,74236,74239,74241,74243,74246,74248,74250,74252,74255,74257,74260],{"class":70,"line":33872},[68,74235,58429],{"class":331},[68,74237,74238],{"class":82}," trArr",[68,74240,13769],{"class":331},[68,74242,52166],{"class":335},[68,74244,74245],{"class":74},"map",[68,74247,336],{"class":335},[68,74249,54650],{"class":331},[68,74251,1865],{"class":335},[68,74253,74254],{"class":5421},"ele",[68,74256,12640],{"class":335},[68,74258,74259],{"class":5421},"index",[68,74261,12647],{"class":335},[68,74263,74264,74266],{"class":70,"line":33883},[68,74265,14957],{"class":331},[68,74267,70369],{"class":78},[68,74269,74270],{"class":70,"line":33889},[68,74271,74272],{"class":78},"      \u003Ctr>\n",[68,74274,74275,74277,74279,74281,74284],{"class":70,"line":33906},[68,74276,70374],{"class":78},[68,74278,74254],{"class":335},[68,74280,891],{"class":78},[68,74282,74283],{"class":335},"unameId",[68,74285,70389],{"class":78},[68,74287,74288,74290,74292,74294,74296],{"class":70,"line":33929},[68,74289,70374],{"class":78},[68,74291,74254],{"class":335},[68,74293,891],{"class":78},[68,74295,70405],{"class":335},[68,74297,70389],{"class":78},[68,74299,74300,74302,74304,74306,74308],{"class":70,"line":33952},[68,74301,70374],{"class":78},[68,74303,74254],{"class":335},[68,74305,891],{"class":78},[68,74307,70422],{"class":335},[68,74309,70389],{"class":78},[68,74311,74312,74314,74316,74318,74320],{"class":70,"line":33958},[68,74313,70374],{"class":78},[68,74315,74254],{"class":335},[68,74317,891],{"class":78},[68,74319,70439],{"class":335},[68,74321,70389],{"class":78},[68,74323,74324,74326,74328,74330,74332],{"class":70,"line":33963},[68,74325,70374],{"class":78},[68,74327,74254],{"class":335},[68,74329,891],{"class":78},[68,74331,70456],{"class":335},[68,74333,70389],{"class":78},[68,74335,74336,74338,74340,74342,74344],{"class":70,"line":33972},[68,74337,70374],{"class":78},[68,74339,74254],{"class":335},[68,74341,891],{"class":78},[68,74343,70473],{"class":335},[68,74345,70389],{"class":78},[68,74347,74348,74350,74352,74354,74356],{"class":70,"line":33982},[68,74349,70374],{"class":78},[68,74351,74254],{"class":335},[68,74353,891],{"class":78},[68,74355,2593],{"class":335},[68,74357,70389],{"class":78},[68,74359,74360],{"class":70,"line":33988},[68,74361,73816],{"class":78},[68,74363,74364,74367,74369],{"class":70,"line":33993},[68,74365,74366],{"class":78},"          \u003Ca href=\"#\" data-id=\"${",[68,74368,74259],{"class":335},[68,74370,74371],{"class":78},"}\">删除\u003C\u002Fa>\n",[68,74373,74374],{"class":70,"line":33999},[68,74375,73826],{"class":78},[68,74377,74378],{"class":70,"line":34012},[68,74379,74380],{"class":78},"      \u003C\u002Ftr>\n",[68,74382,74383],{"class":70,"line":34018},[68,74384,74385],{"class":78},"  `\n",[68,74387,74388],{"class":70,"line":34029},[68,74389,65016],{"class":335},[68,74391,74392,74394,74396],{"class":70,"line":34040},[68,74393,58445],{"class":335},[68,74395,58448],{"class":74},[68,74397,74398],{"class":335},"(trArr)\n",[68,74400,74401],{"class":70,"line":34059},[68,74402,2606],{"emptyLinePlaceholder":260},[68,74404,74405],{"class":70,"line":49719},[68,74406,74407],{"class":393},"      \u002F\u002F (2) 把数组转换为字符串join\n",[68,74409,74410],{"class":70,"line":49724},[68,74411,74412],{"class":393},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[68,74414,74415,74417,74419,74422,74425,74427,74430],{"class":70,"line":49733},[68,74416,70300],{"class":335},[68,74418,381],{"class":331},[68,74420,74421],{"class":335}," trArr.",[68,74423,74424],{"class":74},"join",[68,74426,336],{"class":335},[68,74428,74429],{"class":78},"''",[68,74431,342],{"class":335},[68,74433,74434],{"class":70,"line":49742},[68,74435,74436],{"class":393},"      \u002F\u002F 显示共有几条\n",[68,74438,74439,74441,74443,74445,74448,74451,74453,74455],{"class":70,"line":49747},[68,74440,55972],{"class":335},[68,74442,54600],{"class":74},[68,74444,336],{"class":335},[68,74446,74447],{"class":78},"'.total span'",[68,74449,74450],{"class":335},").innerHTML ",[68,74452,381],{"class":331},[68,74454,52166],{"class":335},[68,74456,56032],{"class":82},[68,74458,74459],{"class":70,"line":49752},[68,74460,2393],{"class":335},[68,74462,74463],{"class":70,"line":49757},[68,74464,74465],{"class":393},"    \u002F\u002F render()\n",[68,74467,74468],{"class":70,"line":49770},[68,74469,2606],{"emptyLinePlaceholder":260},[68,74471,74472],{"class":70,"line":49775},[68,74473,74474],{"class":393},"    \u002F\u002F 获取DOM对象\n",[68,74476,74477,74479,74481,74483,74485,74487,74489,74491],{"class":70,"line":49784},[68,74478,11426],{"class":331},[68,74480,70022],{"class":82},[68,74482,13769],{"class":331},[68,74484,54597],{"class":335},[68,74486,54600],{"class":74},[68,74488,336],{"class":335},[68,74490,70033],{"class":78},[68,74492,342],{"class":335},[68,74494,74495,74497,74499,74501,74503,74505,74507,74509],{"class":70,"line":49793},[68,74496,11426],{"class":331},[68,74498,69849],{"class":82},[68,74500,13769],{"class":331},[68,74502,54597],{"class":335},[68,74504,54600],{"class":74},[68,74506,336],{"class":335},[68,74508,69860],{"class":78},[68,74510,342],{"class":335},[68,74512,74513,74515,74517,74519,74521,74523,74525,74527],{"class":70,"line":49810},[68,74514,11426],{"class":331},[68,74516,15894],{"class":82},[68,74518,13769],{"class":331},[68,74520,54597],{"class":335},[68,74522,54600],{"class":74},[68,74524,336],{"class":335},[68,74526,69879],{"class":78},[68,74528,342],{"class":335},[68,74530,74532,74534,74536,74538,74540,74542,74544,74546],{"class":70,"line":74531},231,[68,74533,11426],{"class":331},[68,74535,69908],{"class":82},[68,74537,13769],{"class":331},[68,74539,54597],{"class":335},[68,74541,54600],{"class":74},[68,74543,336],{"class":335},[68,74545,69919],{"class":78},[68,74547,342],{"class":335},[68,74549,74551,74553,74555,74557,74559,74561,74563,74565],{"class":70,"line":74550},232,[68,74552,11426],{"class":331},[68,74554,69888],{"class":82},[68,74556,13769],{"class":331},[68,74558,54597],{"class":335},[68,74560,54600],{"class":74},[68,74562,336],{"class":335},[68,74564,69899],{"class":78},[68,74566,342],{"class":335},[68,74568,74570,74572,74574,74576,74578,74580,74582,74584],{"class":70,"line":74569},233,[68,74571,11426],{"class":331},[68,74573,69928],{"class":82},[68,74575,13769],{"class":331},[68,74577,54597],{"class":335},[68,74579,54600],{"class":74},[68,74581,336],{"class":335},[68,74583,69939],{"class":78},[68,74585,342],{"class":335},[68,74587,74589],{"class":70,"line":74588},234,[68,74590,2606],{"emptyLinePlaceholder":260},[68,74592,74594],{"class":70,"line":74593},235,[68,74595,74596],{"class":393},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[68,74598,74600,74602,74604,74606,74608,74610,74612,74614,74616],{"class":70,"line":74599},236,[68,74601,70040],{"class":335},[68,74603,58014],{"class":74},[68,74605,336],{"class":335},[68,74607,70047],{"class":78},[68,74609,12640],{"class":335},[68,74611,54650],{"class":331},[68,74613,1865],{"class":335},[68,74615,409],{"class":5421},[68,74617,12647],{"class":335},[68,74619,74621],{"class":70,"line":74620},237,[68,74622,74623],{"class":393},"      \u002F\u002F 禁止浏览器跳转\n",[68,74625,74627,74629,74631],{"class":70,"line":74626},238,[68,74628,70067],{"class":335},[68,74630,70070],{"class":74},[68,74632,2182],{"class":335},[68,74634,74636],{"class":70,"line":74635},239,[68,74637,74638],{"class":393},"      \u002F\u002F 非空判断\n",[68,74640,74642],{"class":70,"line":74641},240,[68,74643,74644],{"class":393},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[68,74646,74648],{"class":70,"line":74647},241,[68,74649,74650],{"class":393},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[68,74652,74654,74656,74658,74660,74663,74665,74668,74671,74673,74675],{"class":70,"line":74653},242,[68,74655,54681],{"class":331},[68,74657,1865],{"class":335},[68,74659,560],{"class":331},[68,74661,74662],{"class":335},"uname.value ",[68,74664,71558],{"class":331},[68,74666,74667],{"class":331}," !",[68,74669,74670],{"class":335},"age.value ",[68,74672,71558],{"class":331},[68,74674,74667],{"class":331},[68,74676,74677],{"class":335},"salary.value) {\n",[68,74679,74681,74683,74685,74687,74689],{"class":70,"line":74680},243,[68,74682,14957],{"class":331},[68,74684,70141],{"class":74},[68,74686,336],{"class":335},[68,74688,70146],{"class":78},[68,74690,342],{"class":335},[68,74692,74694],{"class":70,"line":74693},244,[68,74695,52599],{"class":335},[68,74697,74699,74701,74703],{"class":70,"line":74698},245,[68,74700,58208],{"class":335},[68,74702,52085],{"class":74},[68,74704,74705],{"class":335},"({\n",[68,74707,74709],{"class":70,"line":74708},246,[68,74710,74711],{"class":393},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[68,74713,74715],{"class":70,"line":74714},247,[68,74716,74717],{"class":393},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[68,74719,74721],{"class":70,"line":74720},248,[68,74722,74723],{"class":393},"        \u002F\u002F 对象的序号应为数组长度+1\n",[68,74725,74727],{"class":70,"line":74726},249,[68,74728,74729],{"class":393},"        \u002F\u002F unameId: arr.length + 1,\n",[68,74731,74733],{"class":70,"line":74732},250,[68,74734,2606],{"emptyLinePlaceholder":260},[68,74736,74738],{"class":70,"line":74737},251,[68,74739,74740],{"class":393},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[68,74742,74744],{"class":70,"line":74743},252,[68,74745,74746],{"class":393},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[68,74748,74750],{"class":70,"line":74749},253,[68,74751,74752],{"class":393},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[68,74754,74756],{"class":70,"line":74755},254,[68,74757,74758],{"class":393},"        \u002F\u002F 0当假看\n",[68,74760,74762,74765,74767,74769,74772,74774,74776,74778,74781,74783,74785,74788,74790],{"class":70,"line":74761},255,[68,74763,74764],{"class":335},"        unameId: arr.",[68,74766,52169],{"class":82},[68,74768,74015],{"class":331},[68,74770,74771],{"class":335}," arr[arr.",[68,74773,52169],{"class":82},[68,74775,52472],{"class":331},[68,74777,25322],{"class":82},[68,74779,74780],{"class":335},"].unameId ",[68,74782,814],{"class":331},[68,74784,25322],{"class":82},[68,74786,74787],{"class":331}," :",[68,74789,25322],{"class":82},[68,74791,31667],{"class":335},[68,74793,74795],{"class":70,"line":74794},256,[68,74796,70194],{"class":335},[68,74798,74800],{"class":70,"line":74799},257,[68,74801,70199],{"class":335},[68,74803,74805],{"class":70,"line":74804},258,[68,74806,70209],{"class":335},[68,74808,74810],{"class":70,"line":74809},259,[68,74811,70204],{"class":335},[68,74813,74815],{"class":70,"line":74814},260,[68,74816,74817],{"class":335},"        city: city.value,\n",[68,74819,74821],{"class":70,"line":74820},261,[68,74822,74823],{"class":393},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[68,74825,74827],{"class":70,"line":74826},262,[68,74828,74829],{"class":393},"        \u002F\u002F time: new Date().toDateString()\n",[68,74831,74833,74836,74839],{"class":70,"line":74832},263,[68,74834,74835],{"class":335},"        time: ",[68,74837,74838],{"class":74},"getTime",[68,74840,2182],{"class":335},[68,74842,74844],{"class":70,"line":74843},264,[68,74845,65016],{"class":335},[68,74847,74849],{"class":70,"line":74848},265,[68,74850,74851],{"class":393},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[68,74853,74855,74857],{"class":70,"line":74854},266,[68,74856,70269],{"class":74},[68,74858,2182],{"class":335},[68,74860,74862,74864,74866,74868,74870],{"class":70,"line":74861},267,[68,74863,70252],{"class":82},[68,74865,891],{"class":335},[68,74867,70257],{"class":74},[68,74869,13255],{"class":335},[68,74871,74872],{"class":393},"\u002F\u002F重置表单\n",[68,74874,74876],{"class":70,"line":74875},268,[68,74877,74878],{"class":393},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[68,74880,74882,74885,74887,74889,74892,74894,74896,74898,74900],{"class":70,"line":74881},269,[68,74883,74884],{"class":335},"      localStorage.",[68,74886,71855],{"class":74},[68,74888,336],{"class":335},[68,74890,74891],{"class":78},"'data'",[68,74893,12640],{"class":335},[68,74895,71865],{"class":82},[68,74897,891],{"class":335},[68,74899,71870],{"class":74},[68,74901,74902],{"class":335},"(arr))\n",[68,74904,74906],{"class":70,"line":74905},270,[68,74907,33662],{"class":335},[68,74909,74911],{"class":70,"line":74910},271,[68,74912,2606],{"emptyLinePlaceholder":260},[68,74914,74916],{"class":70,"line":74915},272,[68,74917,74918],{"class":393},"    \u002F\u002F 3.删除业务\n",[68,74920,74922],{"class":70,"line":74921},273,[68,74923,74924],{"class":393},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[68,74926,74928,74930,74932,74934,74936,74938,74940,74942,74944],{"class":70,"line":74927},274,[68,74929,70542],{"class":335},[68,74931,58014],{"class":74},[68,74933,336],{"class":335},[68,74935,58019],{"class":78},[68,74937,12640],{"class":335},[68,74939,54650],{"class":331},[68,74941,1865],{"class":335},[68,74943,409],{"class":5421},[68,74945,12647],{"class":335},[68,74947,74949],{"class":70,"line":74948},275,[68,74950,74951],{"class":393},"      \u002F\u002F 判断是否点击的是删除按钮\n",[68,74953,74955,74957,74959,74961,74963],{"class":70,"line":74954},276,[68,74956,54681],{"class":331},[68,74958,67235],{"class":335},[68,74960,54687],{"class":331},[68,74962,68457],{"class":78},[68,74964,12647],{"class":335},[68,74966,74968],{"class":70,"line":74967},277,[68,74969,74970],{"class":393},"        \u002F\u002F alert(1)\n",[68,74972,74974],{"class":70,"line":74973},278,[68,74975,74976],{"class":393},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[68,74978,74980],{"class":70,"line":74979},279,[68,74981,74982],{"class":393},"        \u002F\u002F console.log(e.target)\n",[68,74984,74986],{"class":70,"line":74985},280,[68,74987,74988],{"class":393},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[68,74990,74992],{"class":70,"line":74991},281,[68,74993,2606],{"emptyLinePlaceholder":260},[68,74995,74997],{"class":70,"line":74996},282,[68,74998,74999],{"class":393},"        \u002F\u002F 确认框，确然是否真的要删除\n",[68,75001,75003],{"class":70,"line":75002},283,[68,75004,75005],{"class":393},"        \u002F\u002F confirm()为确认框\n",[68,75007,75009],{"class":70,"line":75008},284,[68,75010,75011],{"class":393},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[68,75013,75015,75017,75019,75022,75024,75027],{"class":70,"line":75014},285,[68,75016,2703],{"class":331},[68,75018,1865],{"class":335},[68,75020,75021],{"class":74},"confirm",[68,75023,336],{"class":335},[68,75025,75026],{"class":78},"'您确定要删除这条数据吗？'",[68,75028,75029],{"class":335},")) {\n",[68,75031,75033,75036,75038,75040,75042],{"class":70,"line":75032},286,[68,75034,75035],{"class":335},"          arr.",[68,75037,58211],{"class":74},[68,75039,70595],{"class":335},[68,75041,551],{"class":82},[68,75043,342],{"class":335},[68,75045,75047],{"class":70,"line":75046},287,[68,75048,75049],{"class":393},"          \u002F\u002F 3.4 重新渲染页面\n",[68,75051,75053,75056],{"class":70,"line":75052},288,[68,75054,75055],{"class":74},"          render",[68,75057,2182],{"class":335},[68,75059,75061],{"class":70,"line":75060},289,[68,75062,75063],{"class":393},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[68,75065,75067,75070,75072,75074,75076,75078,75080,75082,75084],{"class":70,"line":75066},290,[68,75068,75069],{"class":335},"          localStorage.",[68,75071,71855],{"class":74},[68,75073,336],{"class":335},[68,75075,74891],{"class":78},[68,75077,12640],{"class":335},[68,75079,71865],{"class":82},[68,75081,891],{"class":335},[68,75083,71870],{"class":74},[68,75085,74902],{"class":335},[68,75087,75089],{"class":70,"line":75088},291,[68,75090,2735],{"class":335},[68,75092,75094],{"class":70,"line":75093},292,[68,75095,52599],{"class":335},[68,75097,75099],{"class":70,"line":75098},293,[68,75100,2606],{"emptyLinePlaceholder":260},[68,75102,75104],{"class":70,"line":75103},294,[68,75105,33662],{"class":335},[68,75107,75109],{"class":70,"line":75108},295,[68,75110,2606],{"emptyLinePlaceholder":260},[68,75112,75114,75116,75118],{"class":70,"line":75113},296,[68,75115,52618],{"class":335},[68,75117,52014],{"class":51501},[68,75119,51508],{"class":335},[68,75121,75123,75125,75127],{"class":70,"line":75122},297,[68,75124,51986],{"class":335},[68,75126,52001],{"class":51501},[68,75128,51508],{"class":335},[68,75130,75132],{"class":70,"line":75131},298,[68,75133,2606],{"emptyLinePlaceholder":260},[68,75135,75137,75139,75141],{"class":70,"line":75136},299,[68,75138,51986],{"class":335},[68,75140,50836],{"class":51501},[68,75142,51508],{"class":335},[14,75144,75146],{"id":75145},"_36-正则表达式","3.6 正则表达式",[19,75148,75149],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75151,75152],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75154,75155],{},"正则表达式的作用：",[42,75157,75158,75165,75171],{},[26,75159,75160,75161,75164],{},"表单验证（ ",[483,75162,75163],{},"匹配"," ）",[26,75166,75167,75168,75164],{},"过滤敏感词（ ",[483,75169,75170],{},"替换",[26,75172,75173,75174,75164],{},"字符串中提取我们想要的部分（ ",[483,75175,75176],{},"提取",[301,75178,75180],{"id":75179},"_361-语法","3.6.1 语法",[19,75182,75183],{},"正则表达式使用步骤：",[23,75185,75186,75189],{},[26,75187,75188],{},"定义规则",[26,75190,75191],{},"查找是否匹配",[19,75193,75194],{},"正则表达式里边不需要写引号",[19,75196,75197],{},[48,75198],{"alt":63,"src":75199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75201,75202],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75204,75205],{},"reg.test(str)",[19,75207,75208],{},[48,75209],{"alt":63,"src":75210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75212,75213],{},[48,75214],{"alt":63,"src":75215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[301,75217,75219],{"id":75218},"_362-元字符","3.6.2 元字符",[23,75221,75222,75225,75228,75231,75238],{},[26,75223,75224],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[26,75226,75227],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[26,75229,75230],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[26,75232,75233,75234],{},"正则验证工具：",[30,75235,75236],{"href":75236,"rel":75237},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[34],[26,75239,75240],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22203,75242,75244],{"id":75243},"_3621-边界符","3.6.2.1 边界符",[19,75246,75247],{},[48,75248],{"alt":63,"src":75249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75251,75252],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75254,75255],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75257,75258],{},"只匹配一次",[19,75260,75261],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22203,75263,75265],{"id":75264},"_3622-量词","3.6.2.2 量词",[19,75267,75268],{},[48,75269],{"alt":63,"src":75270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75272,75273],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22203,75275,75277],{"id":75276},"_3623-元字符","3.6.2.3 元字符",[19,75279,75280],{},[48,75281],{"alt":63,"src":75282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75284,75285],{},"匹配的是a或b或c []只选一个",[19,75287,75288],{},[48,75289],{"alt":63,"src":75290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75292,75293],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75295,75296],{},[48,75297],{"alt":63,"src":75298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75300,75301],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75303,75304],{},[48,75305],{"alt":63,"src":75306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[58,75308,75310],{"className":50834,"code":75309,"language":50836,"meta":63,"style":63},"\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",[65,75311,75312,75322,75336,75340,75348,75362,75382,75394,75402,75406,75414,75422,75427,75458,75485,75513,75517,75522,75550,75581,75586,75591,75622,75654,75686,75690,75695,75726,75756,75786,75790,75795,75826,75857,75887,75917,75921,75926,75959,75963,75968,75999,76030,76034,76039,76070,76100,76131,76135,76140,76172,76203,76234,76261,76292,76324,76357,76388,76419,76451,76482,76490,76498,76502],{"__ignoreMap":63},[68,75313,75314,75316,75318,75320],{"class":70,"line":71},[68,75315,51498],{"class":335},[68,75317,51502],{"class":51501},[68,75319,51505],{"class":74},[68,75321,51508],{"class":335},[68,75323,75324,75326,75328,75330,75332,75334],{"class":70,"line":92},[68,75325,1243],{"class":335},[68,75327,50836],{"class":51501},[68,75329,51517],{"class":74},[68,75331,381],{"class":335},[68,75333,51522],{"class":78},[68,75335,51508],{"class":335},[68,75337,75338],{"class":70,"line":1387},[68,75339,2606],{"emptyLinePlaceholder":260},[68,75341,75342,75344,75346],{"class":70,"line":1402},[68,75343,1243],{"class":335},[68,75345,51535],{"class":51501},[68,75347,51508],{"class":335},[68,75349,75350,75352,75354,75356,75358,75360],{"class":70,"line":1408},[68,75351,52345],{"class":335},[68,75353,51545],{"class":51501},[68,75355,51548],{"class":74},[68,75357,381],{"class":335},[68,75359,51553],{"class":78},[68,75361,51508],{"class":335},[68,75363,75364,75366,75368,75370,75372,75374,75376,75378,75380],{"class":70,"line":1422},[68,75365,52345],{"class":335},[68,75367,51545],{"class":51501},[68,75369,15125],{"class":74},[68,75371,381],{"class":335},[68,75373,51592],{"class":78},[68,75375,51572],{"class":74},[68,75377,381],{"class":335},[68,75379,51599],{"class":78},[68,75381,51508],{"class":335},[68,75383,75384,75386,75388,75390,75392],{"class":70,"line":1428},[68,75385,52345],{"class":335},[68,75387,51608],{"class":51501},[68,75389,51611],{"class":335},[68,75391,51608],{"class":51501},[68,75393,51508],{"class":335},[68,75395,75396,75398,75400],{"class":70,"line":1519},[68,75397,51986],{"class":335},[68,75399,51535],{"class":51501},[68,75401,51508],{"class":335},[68,75403,75404],{"class":70,"line":1525},[68,75405,2606],{"emptyLinePlaceholder":260},[68,75407,75408,75410,75412],{"class":70,"line":1537},[68,75409,1243],{"class":335},[68,75411,52001],{"class":51501},[68,75413,51508],{"class":335},[68,75415,75416,75418,75420],{"class":70,"line":1819},[68,75417,52345],{"class":335},[68,75419,52014],{"class":51501},[68,75421,51508],{"class":335},[68,75423,75424],{"class":70,"line":1824},[68,75425,75426],{"class":393},"    \u002F\u002F 元字符中\n",[68,75428,75429,75431,75433,75435,75437,75440,75442,75444,75447,75449,75452,75455],{"class":70,"line":1830},[68,75430,73954],{"class":335},[68,75432,58448],{"class":74},[68,75434,336],{"class":335},[68,75436,917],{"class":78},[68,75438,75439],{"class":48178},"哈",[68,75441,917],{"class":78},[68,75443,891],{"class":335},[68,75445,75446],{"class":74},"test",[68,75448,336],{"class":335},[68,75450,75451],{"class":78},"'哈'",[68,75453,75454],{"class":335},"))  ",[68,75456,75457],{"class":393},"\u002F\u002Ftrue\n",[68,75459,75460,75462,75464,75466,75468,75470,75472,75474,75476,75478,75481,75483],{"class":70,"line":1835},[68,75461,73954],{"class":335},[68,75463,58448],{"class":74},[68,75465,336],{"class":335},[68,75467,917],{"class":78},[68,75469,75439],{"class":48178},[68,75471,917],{"class":78},[68,75473,891],{"class":335},[68,75475,75446],{"class":74},[68,75477,336],{"class":335},[68,75479,75480],{"class":78},"'哈哈'",[68,75482,75454],{"class":335},[68,75484,75457],{"class":393},[68,75486,75487,75489,75491,75493,75495,75497,75499,75501,75503,75505,75508,75511],{"class":70,"line":1849},[68,75488,73954],{"class":335},[68,75490,58448],{"class":74},[68,75492,336],{"class":335},[68,75494,917],{"class":78},[68,75496,75439],{"class":48178},[68,75498,917],{"class":78},[68,75500,891],{"class":335},[68,75502,75446],{"class":74},[68,75504,336],{"class":335},[68,75506,75507],{"class":78},"'二哈'",[68,75509,75510],{"class":335},"))   ",[68,75512,75457],{"class":393},[68,75514,75515],{"class":70,"line":1854},[68,75516,2606],{"emptyLinePlaceholder":260},[68,75518,75519],{"class":70,"line":1860},[68,75520,75521],{"class":393},"    \u002F\u002F 1.边界符\n",[68,75523,75524,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548],{"class":70,"line":1881},[68,75525,73954],{"class":335},[68,75527,58448],{"class":74},[68,75529,336],{"class":335},[68,75531,917],{"class":78},[68,75533,1299],{"class":331},[68,75535,75439],{"class":48178},[68,75537,917],{"class":78},[68,75539,891],{"class":335},[68,75541,75446],{"class":74},[68,75543,336],{"class":335},[68,75545,75451],{"class":78},[68,75547,75454],{"class":335},[68,75549,75457],{"class":393},[68,75551,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570,75572,75574,75576,75578],{"class":70,"line":1886},[68,75553,73954],{"class":335},[68,75555,58448],{"class":74},[68,75557,336],{"class":335},[68,75559,917],{"class":78},[68,75561,1299],{"class":331},[68,75563,75439],{"class":48178},[68,75565,635],{"class":331},[68,75567,917],{"class":78},[68,75569,891],{"class":335},[68,75571,75446],{"class":74},[68,75573,336],{"class":335},[68,75575,75480],{"class":78},[68,75577,75454],{"class":335},[68,75579,75580],{"class":393},"\u002F\u002Ffalse\n",[68,75582,75583],{"class":70,"line":1900},[68,75584,75585],{"class":393},"    \u002F\u002F 2.量词\n",[68,75587,75588],{"class":70,"line":1905},[68,75589,75590],{"class":393},"    \u002F\u002F 量词 * 类似于 >= 0\n",[68,75592,75593,75595,75597,75599,75601,75603,75605,75608,75610,75612,75614,75616,75618,75620],{"class":70,"line":1934},[68,75594,73954],{"class":335},[68,75596,58448],{"class":74},[68,75598,336],{"class":335},[68,75600,917],{"class":78},[68,75602,1299],{"class":331},[68,75604,75439],{"class":48178},[68,75606,75607],{"class":331},"*$",[68,75609,917],{"class":78},[68,75611,891],{"class":335},[68,75613,75446],{"class":74},[68,75615,336],{"class":335},[68,75617,75480],{"class":78},[68,75619,75454],{"class":335},[68,75621,75457],{"class":393},[68,75623,75624,75626,75628,75630,75632,75634,75636,75638,75640,75642,75644,75646,75649,75651],{"class":70,"line":1939},[68,75625,73954],{"class":335},[68,75627,58448],{"class":74},[68,75629,336],{"class":335},[68,75631,917],{"class":78},[68,75633,1299],{"class":331},[68,75635,75439],{"class":48178},[68,75637,75607],{"class":331},[68,75639,917],{"class":78},[68,75641,891],{"class":335},[68,75643,75446],{"class":74},[68,75645,336],{"class":335},[68,75647,75648],{"class":78},"'二哈好傻'",[68,75650,75454],{"class":335},[68,75652,75653],{"class":393},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[68,75655,75656,75658,75660,75662,75664,75666,75668,75670,75672,75674,75676,75678,75681,75683],{"class":70,"line":1956},[68,75657,73954],{"class":335},[68,75659,58448],{"class":74},[68,75661,336],{"class":335},[68,75663,917],{"class":78},[68,75665,1299],{"class":331},[68,75667,75439],{"class":48178},[68,75669,75607],{"class":331},[68,75671,917],{"class":78},[68,75673,891],{"class":335},[68,75675,75446],{"class":74},[68,75677,336],{"class":335},[68,75679,75680],{"class":78},"'哈好哈'",[68,75682,75510],{"class":335},[68,75684,75685],{"class":393},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[68,75687,75688],{"class":70,"line":1961},[68,75689,2606],{"emptyLinePlaceholder":260},[68,75691,75692],{"class":70,"line":1966},[68,75693,75694],{"class":393},"    \u002F\u002F +类似于>=1\n",[68,75696,75697,75699,75701,75703,75705,75707,75709,75712,75714,75716,75718,75720,75722,75724],{"class":70,"line":1971},[68,75698,73954],{"class":335},[68,75700,58448],{"class":74},[68,75702,336],{"class":335},[68,75704,917],{"class":78},[68,75706,1299],{"class":331},[68,75708,75439],{"class":48178},[68,75710,75711],{"class":331},"+$",[68,75713,917],{"class":78},[68,75715,891],{"class":335},[68,75717,75446],{"class":74},[68,75719,336],{"class":335},[68,75721,75480],{"class":78},[68,75723,75454],{"class":335},[68,75725,75457],{"class":393},[68,75727,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754],{"class":70,"line":1985},[68,75729,73954],{"class":335},[68,75731,58448],{"class":74},[68,75733,336],{"class":335},[68,75735,917],{"class":78},[68,75737,1299],{"class":331},[68,75739,75439],{"class":48178},[68,75741,75711],{"class":331},[68,75743,917],{"class":78},[68,75745,891],{"class":335},[68,75747,75446],{"class":74},[68,75749,336],{"class":335},[68,75751,75648],{"class":78},[68,75753,75454],{"class":335},[68,75755,75653],{"class":393},[68,75757,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75782,75784],{"class":70,"line":1990},[68,75759,73954],{"class":335},[68,75761,58448],{"class":74},[68,75763,336],{"class":335},[68,75765,917],{"class":78},[68,75767,1299],{"class":331},[68,75769,75439],{"class":48178},[68,75771,75711],{"class":331},[68,75773,917],{"class":78},[68,75775,891],{"class":335},[68,75777,75446],{"class":74},[68,75779,336],{"class":335},[68,75781,75680],{"class":78},[68,75783,75510],{"class":335},[68,75785,75580],{"class":393},[68,75787,75788],{"class":70,"line":2783},[68,75789,2606],{"emptyLinePlaceholder":260},[68,75791,75792],{"class":70,"line":2797},[68,75793,75794],{"class":393},"    \u002F\u002F ?类似于0次或一次\n",[68,75796,75797,75799,75801,75803,75805,75807,75810,75812,75814,75816,75818,75820,75822,75824],{"class":70,"line":2805},[68,75798,73954],{"class":335},[68,75800,58448],{"class":74},[68,75802,336],{"class":335},[68,75804,917],{"class":78},[68,75806,1299],{"class":331},[68,75808,75809],{"class":48178},"哈？",[68,75811,635],{"class":331},[68,75813,917],{"class":78},[68,75815,891],{"class":335},[68,75817,75446],{"class":74},[68,75819,336],{"class":335},[68,75821,74429],{"class":78},[68,75823,75510],{"class":335},[68,75825,75457],{"class":393},[68,75827,75828,75830,75832,75834,75836,75838,75840,75843,75845,75847,75849,75851,75853,75855],{"class":70,"line":2810},[68,75829,73954],{"class":335},[68,75831,58448],{"class":74},[68,75833,336],{"class":335},[68,75835,917],{"class":78},[68,75837,1299],{"class":331},[68,75839,75439],{"class":48178},[68,75841,75842],{"class":331},"?$",[68,75844,917],{"class":78},[68,75846,891],{"class":335},[68,75848,75446],{"class":74},[68,75850,336],{"class":335},[68,75852,75480],{"class":78},[68,75854,75454],{"class":335},[68,75856,75580],{"class":393},[68,75858,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879,75881,75883,75885],{"class":70,"line":2816},[68,75860,73954],{"class":335},[68,75862,58448],{"class":74},[68,75864,336],{"class":335},[68,75866,917],{"class":78},[68,75868,1299],{"class":331},[68,75870,75439],{"class":48178},[68,75872,75842],{"class":331},[68,75874,917],{"class":78},[68,75876,891],{"class":335},[68,75878,75446],{"class":74},[68,75880,336],{"class":335},[68,75882,75648],{"class":78},[68,75884,75454],{"class":335},[68,75886,75653],{"class":393},[68,75888,75889,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909,75911,75913,75915],{"class":70,"line":2822},[68,75890,73954],{"class":335},[68,75892,58448],{"class":74},[68,75894,336],{"class":335},[68,75896,917],{"class":78},[68,75898,1299],{"class":331},[68,75900,75439],{"class":48178},[68,75902,75842],{"class":331},[68,75904,917],{"class":78},[68,75906,891],{"class":335},[68,75908,75446],{"class":74},[68,75910,336],{"class":335},[68,75912,75680],{"class":78},[68,75914,75454],{"class":335},[68,75916,75580],{"class":393},[68,75918,75919],{"class":70,"line":2827},[68,75920,2606],{"emptyLinePlaceholder":260},[68,75922,75923],{"class":70,"line":8153},[68,75924,75925],{"class":393},"    \u002F\u002F {n}写几，就必须出现几次\n",[68,75927,75928,75930,75932,75934,75936,75938,75940,75943,75945,75947,75949,75951,75954,75957],{"class":70,"line":8177},[68,75929,73954],{"class":335},[68,75931,58448],{"class":74},[68,75933,336],{"class":335},[68,75935,917],{"class":78},[68,75937,1299],{"class":331},[68,75939,75439],{"class":48178},[68,75941,75942],{"class":331},"{4}$",[68,75944,917],{"class":78},[68,75946,891],{"class":335},[68,75948,75446],{"class":74},[68,75950,336],{"class":335},[68,75952,75953],{"class":78},"'哈哈哈哈'",[68,75955,75956],{"class":335},")) ",[68,75958,75457],{"class":393},[68,75960,75961],{"class":70,"line":8182},[68,75962,2606],{"emptyLinePlaceholder":260},[68,75964,75965],{"class":70,"line":8188},[68,75966,75967],{"class":393},"    \u002F\u002F {n,}大于等于n次\n",[68,75969,75970,75972,75974,75976,75978,75980,75982,75985,75987,75989,75991,75993,75995,75997],{"class":70,"line":8215},[68,75971,73954],{"class":335},[68,75973,58448],{"class":74},[68,75975,336],{"class":335},[68,75977,917],{"class":78},[68,75979,1299],{"class":331},[68,75981,75439],{"class":48178},[68,75983,75984],{"class":331},"{4,}$",[68,75986,917],{"class":78},[68,75988,891],{"class":335},[68,75990,75446],{"class":74},[68,75992,336],{"class":335},[68,75994,75953],{"class":78},[68,75996,75956],{"class":335},[68,75998,75457],{"class":393},[68,76000,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019,76021,76023,76026,76028],{"class":70,"line":8220},[68,76002,73954],{"class":335},[68,76004,58448],{"class":74},[68,76006,336],{"class":335},[68,76008,917],{"class":78},[68,76010,1299],{"class":331},[68,76012,75439],{"class":48178},[68,76014,75984],{"class":331},[68,76016,917],{"class":78},[68,76018,891],{"class":335},[68,76020,75446],{"class":74},[68,76022,336],{"class":335},[68,76024,76025],{"class":78},"'哈哈哈哈哈'",[68,76027,75956],{"class":335},[68,76029,75457],{"class":393},[68,76031,76032],{"class":70,"line":8226},[68,76033,2606],{"emptyLinePlaceholder":260},[68,76035,76036],{"class":70,"line":8238},[68,76037,76038],{"class":393},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[68,76040,76041,76043,76045,76047,76049,76051,76053,76056,76058,76060,76062,76064,76066,76068],{"class":70,"line":8250},[68,76042,73954],{"class":335},[68,76044,58448],{"class":74},[68,76046,336],{"class":335},[68,76048,917],{"class":78},[68,76050,1299],{"class":331},[68,76052,75439],{"class":48178},[68,76054,76055],{"class":331},"{4,6}$",[68,76057,917],{"class":78},[68,76059,891],{"class":335},[68,76061,75446],{"class":74},[68,76063,336],{"class":335},[68,76065,75953],{"class":78},[68,76067,75956],{"class":335},[68,76069,75457],{"class":393},[68,76071,76072,76074,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094,76096,76098],{"class":70,"line":8262},[68,76073,73954],{"class":335},[68,76075,58448],{"class":74},[68,76077,336],{"class":335},[68,76079,917],{"class":78},[68,76081,1299],{"class":331},[68,76083,75439],{"class":48178},[68,76085,76055],{"class":331},[68,76087,917],{"class":78},[68,76089,891],{"class":335},[68,76091,75446],{"class":74},[68,76093,336],{"class":335},[68,76095,76025],{"class":78},[68,76097,75956],{"class":335},[68,76099,75457],{"class":393},[68,76101,76102,76104,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76127,76129],{"class":70,"line":9921},[68,76103,73954],{"class":335},[68,76105,58448],{"class":74},[68,76107,336],{"class":335},[68,76109,917],{"class":78},[68,76111,1299],{"class":331},[68,76113,75439],{"class":48178},[68,76115,76055],{"class":331},[68,76117,917],{"class":78},[68,76119,891],{"class":335},[68,76121,75446],{"class":74},[68,76123,336],{"class":335},[68,76125,76126],{"class":78},"'哈哈哈哈哈哈哈'",[68,76128,75956],{"class":335},[68,76130,75580],{"class":393},[68,76132,76133],{"class":70,"line":9946},[68,76134,2606],{"emptyLinePlaceholder":260},[68,76136,76137],{"class":70,"line":9969},[68,76138,76139],{"class":393},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[68,76141,76142,76144,76146,76148,76150,76152,76155,76157,76159,76161,76163,76165,76168,76170],{"class":70,"line":9993},[68,76143,73954],{"class":335},[68,76145,58448],{"class":74},[68,76147,336],{"class":335},[68,76149,917],{"class":78},[68,76151,1299],{"class":331},[68,76153,76154],{"class":82},"[abc]",[68,76156,635],{"class":331},[68,76158,917],{"class":78},[68,76160,891],{"class":335},[68,76162,75446],{"class":74},[68,76164,336],{"class":335},[68,76166,76167],{"class":78},"'a'",[68,76169,75454],{"class":335},[68,76171,75457],{"class":393},[68,76173,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194,76196,76199,76201],{"class":70,"line":9998},[68,76175,73954],{"class":335},[68,76177,58448],{"class":74},[68,76179,336],{"class":335},[68,76181,917],{"class":78},[68,76183,1299],{"class":331},[68,76185,76154],{"class":82},[68,76187,635],{"class":331},[68,76189,917],{"class":78},[68,76191,891],{"class":335},[68,76193,75446],{"class":74},[68,76195,336],{"class":335},[68,76197,76198],{"class":78},"'b'",[68,76200,75454],{"class":335},[68,76202,75457],{"class":393},[68,76204,76205,76207,76209,76211,76213,76215,76217,76219,76221,76223,76225,76227,76230,76232],{"class":70,"line":10003},[68,76206,73954],{"class":335},[68,76208,58448],{"class":74},[68,76210,336],{"class":335},[68,76212,917],{"class":78},[68,76214,1299],{"class":331},[68,76216,76154],{"class":82},[68,76218,635],{"class":331},[68,76220,917],{"class":78},[68,76222,891],{"class":335},[68,76224,75446],{"class":74},[68,76226,336],{"class":335},[68,76228,76229],{"class":78},"'c'",[68,76231,75454],{"class":335},[68,76233,75457],{"class":393},[68,76235,76236,76238,76240,76242,76244,76246,76248,76250,76252,76254,76257,76259],{"class":70,"line":10008},[68,76237,73954],{"class":335},[68,76239,58448],{"class":74},[68,76241,336],{"class":335},[68,76243,917],{"class":78},[68,76245,76154],{"class":82},[68,76247,917],{"class":78},[68,76249,891],{"class":335},[68,76251,75446],{"class":74},[68,76253,336],{"class":335},[68,76255,76256],{"class":78},"'ab'",[68,76258,75454],{"class":335},[68,76260,75457],{"class":393},[68,76262,76263,76265,76267,76269,76271,76273,76275,76277,76279,76281,76283,76285,76287,76289],{"class":70,"line":10017},[68,76264,73954],{"class":335},[68,76266,58448],{"class":74},[68,76268,336],{"class":335},[68,76270,917],{"class":78},[68,76272,1299],{"class":331},[68,76274,76154],{"class":82},[68,76276,635],{"class":331},[68,76278,917],{"class":78},[68,76280,891],{"class":335},[68,76282,75446],{"class":74},[68,76284,336],{"class":335},[68,76286,76256],{"class":78},[68,76288,75454],{"class":335},[68,76290,76291],{"class":393},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[68,76293,76294,76296,76298,76300,76302,76304,76306,76309,76311,76313,76315,76317,76319,76321],{"class":70,"line":10022},[68,76295,73954],{"class":335},[68,76297,58448],{"class":74},[68,76299,336],{"class":335},[68,76301,917],{"class":78},[68,76303,1299],{"class":331},[68,76305,76154],{"class":82},[68,76307,76308],{"class":331},"{2}$",[68,76310,917],{"class":78},[68,76312,891],{"class":335},[68,76314,75446],{"class":74},[68,76316,336],{"class":335},[68,76318,76256],{"class":78},[68,76320,75454],{"class":335},[68,76322,76323],{"class":393},"\u002F\u002Ftrue   可以选两个\n",[68,76325,76326,76328,76330,76332,76334,76336,76339,76341,76343,76345,76347,76349,76352,76354],{"class":70,"line":10028},[68,76327,73954],{"class":335},[68,76329,58448],{"class":74},[68,76331,336],{"class":335},[68,76333,917],{"class":78},[68,76335,1299],{"class":331},[68,76337,76338],{"class":82},"[a-z]",[68,76340,635],{"class":331},[68,76342,917],{"class":78},[68,76344,891],{"class":335},[68,76346,75446],{"class":74},[68,76348,336],{"class":335},[68,76350,76351],{"class":78},"'p'",[68,76353,75510],{"class":335},[68,76355,76356],{"class":393},"\u002F\u002Ftrue   依然只能选一个\n",[68,76358,76359,76361,76363,76365,76367,76369,76372,76374,76376,76378,76380,76382,76384,76386],{"class":70,"line":10049},[68,76360,73954],{"class":335},[68,76362,58448],{"class":74},[68,76364,336],{"class":335},[68,76366,917],{"class":78},[68,76368,1299],{"class":331},[68,76370,76371],{"class":82},"[A-Z]",[68,76373,635],{"class":331},[68,76375,917],{"class":78},[68,76377,891],{"class":335},[68,76379,75446],{"class":74},[68,76381,336],{"class":335},[68,76383,76351],{"class":78},[68,76385,75510],{"class":335},[68,76387,75580],{"class":393},[68,76389,76390,76392,76394,76396,76398,76400,76402,76404,76406,76408,76410,76412,76415,76417],{"class":70,"line":10055},[68,76391,73954],{"class":335},[68,76393,58448],{"class":74},[68,76395,336],{"class":335},[68,76397,917],{"class":78},[68,76399,1299],{"class":331},[68,76401,76371],{"class":82},[68,76403,635],{"class":331},[68,76405,917],{"class":78},[68,76407,891],{"class":335},[68,76409,75446],{"class":74},[68,76411,336],{"class":335},[68,76413,76414],{"class":78},"'P'",[68,76416,75510],{"class":335},[68,76418,75457],{"class":393},[68,76420,76421,76423,76425,76427,76429,76431,76434,76436,76438,76440,76442,76444,76447,76449],{"class":70,"line":10069},[68,76422,73954],{"class":335},[68,76424,58448],{"class":74},[68,76426,336],{"class":335},[68,76428,917],{"class":78},[68,76430,1299],{"class":331},[68,76432,76433],{"class":82},"[0-9]",[68,76435,635],{"class":331},[68,76437,917],{"class":78},[68,76439,891],{"class":335},[68,76441,75446],{"class":74},[68,76443,336],{"class":335},[68,76445,76446],{"class":78},"'0'",[68,76448,75510],{"class":335},[68,76450,75457],{"class":393},[68,76452,76453,76455,76457,76459,76461,76463,76466,76468,76470,76472,76474,76476,76478,76480],{"class":70,"line":10075},[68,76454,73954],{"class":335},[68,76456,58448],{"class":74},[68,76458,336],{"class":335},[68,76460,917],{"class":78},[68,76462,1299],{"class":331},[68,76464,76465],{"class":82},"[a-zA-Z0-9]",[68,76467,635],{"class":331},[68,76469,917],{"class":78},[68,76471,891],{"class":335},[68,76473,75446],{"class":74},[68,76475,336],{"class":335},[68,76477,76351],{"class":78},[68,76479,75454],{"class":335},[68,76481,75457],{"class":393},[68,76483,76484,76486,76488],{"class":70,"line":10102},[68,76485,52618],{"class":335},[68,76487,52014],{"class":51501},[68,76489,51508],{"class":335},[68,76491,76492,76494,76496],{"class":70,"line":10111},[68,76493,51986],{"class":335},[68,76495,52001],{"class":51501},[68,76497,51508],{"class":335},[68,76499,76500],{"class":70,"line":10117},[68,76501,2606],{"emptyLinePlaceholder":260},[68,76503,76504,76506,76508],{"class":70,"line":10125},[68,76505,51986],{"class":335},[68,76507,50836],{"class":51501},[68,76509,51508],{"class":335},[22203,76511,76513],{"id":76512},"_3624-修饰符","3.6.2.4 修饰符",[19,76515,76516],{},[48,76517],{"alt":63,"src":76518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76520,76521],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76523,76524],{},[48,76525],{"alt":63,"src":76526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[58,76528,76530],{"className":50834,"code":76529,"language":50836,"meta":63,"style":63},"\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",[65,76531,76532,76542,76556,76564,76578,76598,76610,76618,76626,76634,76666,76697,76702,76734,76745,76778,76787,76795,76803],{"__ignoreMap":63},[68,76533,76534,76536,76538,76540],{"class":70,"line":71},[68,76535,51498],{"class":335},[68,76537,51502],{"class":51501},[68,76539,51505],{"class":74},[68,76541,51508],{"class":335},[68,76543,76544,76546,76548,76550,76552,76554],{"class":70,"line":92},[68,76545,1243],{"class":335},[68,76547,50836],{"class":51501},[68,76549,51517],{"class":74},[68,76551,381],{"class":335},[68,76553,51522],{"class":78},[68,76555,51508],{"class":335},[68,76557,76558,76560,76562],{"class":70,"line":1387},[68,76559,1243],{"class":335},[68,76561,51535],{"class":51501},[68,76563,51508],{"class":335},[68,76565,76566,76568,76570,76572,76574,76576],{"class":70,"line":1402},[68,76567,52345],{"class":335},[68,76569,51545],{"class":51501},[68,76571,51548],{"class":74},[68,76573,381],{"class":335},[68,76575,51553],{"class":78},[68,76577,51508],{"class":335},[68,76579,76580,76582,76584,76586,76588,76590,76592,76594,76596],{"class":70,"line":1408},[68,76581,52345],{"class":335},[68,76583,51545],{"class":51501},[68,76585,15125],{"class":74},[68,76587,381],{"class":335},[68,76589,51592],{"class":78},[68,76591,51572],{"class":74},[68,76593,381],{"class":335},[68,76595,51599],{"class":78},[68,76597,51508],{"class":335},[68,76599,76600,76602,76604,76606,76608],{"class":70,"line":1422},[68,76601,52345],{"class":335},[68,76603,51608],{"class":51501},[68,76605,51611],{"class":335},[68,76607,51608],{"class":51501},[68,76609,51508],{"class":335},[68,76611,76612,76614,76616],{"class":70,"line":1428},[68,76613,51986],{"class":335},[68,76615,51535],{"class":51501},[68,76617,51508],{"class":335},[68,76619,76620,76622,76624],{"class":70,"line":1519},[68,76621,1243],{"class":335},[68,76623,52001],{"class":51501},[68,76625,51508],{"class":335},[68,76627,76628,76630,76632],{"class":70,"line":1525},[68,76629,52345],{"class":335},[68,76631,52014],{"class":51501},[68,76633,51508],{"class":335},[68,76635,76636,76638,76640,76642,76644,76646,76649,76651,76653,76655,76657,76659,76662,76664],{"class":70,"line":1537},[68,76637,73954],{"class":335},[68,76639,58448],{"class":74},[68,76641,336],{"class":335},[68,76643,917],{"class":78},[68,76645,1299],{"class":331},[68,76647,76648],{"class":48178},"java",[68,76650,635],{"class":331},[68,76652,917],{"class":78},[68,76654,891],{"class":335},[68,76656,75446],{"class":74},[68,76658,336],{"class":335},[68,76660,76661],{"class":78},"'java'",[68,76663,75956],{"class":335},[68,76665,75457],{"class":393},[68,76667,76668,76670,76672,76674,76676,76678,76680,76682,76684,76686,76688,76690,76693,76695],{"class":70,"line":1819},[68,76669,73954],{"class":335},[68,76671,58448],{"class":74},[68,76673,336],{"class":335},[68,76675,917],{"class":78},[68,76677,1299],{"class":331},[68,76679,76648],{"class":48178},[68,76681,635],{"class":331},[68,76683,917],{"class":78},[68,76685,891],{"class":335},[68,76687,75446],{"class":74},[68,76689,336],{"class":335},[68,76691,76692],{"class":78},"'Java'",[68,76694,75956],{"class":335},[68,76696,75580],{"class":393},[68,76698,76699],{"class":70,"line":1824},[68,76700,76701],{"class":393},"    \u002F\u002F 不区分大小写、\n",[68,76703,76704,76706,76708,76710,76712,76714,76716,76718,76720,76722,76724,76726,76728,76730,76732],{"class":70,"line":1830},[68,76705,73954],{"class":335},[68,76707,58448],{"class":74},[68,76709,336],{"class":335},[68,76711,917],{"class":78},[68,76713,1299],{"class":331},[68,76715,76648],{"class":48178},[68,76717,635],{"class":331},[68,76719,917],{"class":78},[68,76721,774],{"class":331},[68,76723,891],{"class":335},[68,76725,75446],{"class":74},[68,76727,336],{"class":335},[68,76729,76692],{"class":78},[68,76731,75956],{"class":335},[68,76733,75457],{"class":393},[68,76735,76736,76738,76740,76742],{"class":70,"line":1835},[68,76737,11426],{"class":331},[68,76739,74120],{"class":82},[68,76741,13769],{"class":331},[68,76743,76744],{"class":78}," 'java是一门编程语言，学完java工资很高'\n",[68,76746,76747,76749,76752,76754,76757,76760,76762,76764,76766,76768,76771,76773,76776],{"class":70,"line":1849},[68,76748,11426],{"class":331},[68,76750,76751],{"class":82}," result",[68,76753,13769],{"class":331},[68,76755,76756],{"class":335}," str.",[68,76758,76759],{"class":74},"replace",[68,76761,336],{"class":335},[68,76763,917],{"class":78},[68,76765,76648],{"class":48178},[68,76767,917],{"class":78},[68,76769,76770],{"class":331},"ig",[68,76772,12640],{"class":335},[68,76774,76775],{"class":78},"'前端'",[68,76777,342],{"class":335},[68,76779,76780,76782,76784],{"class":70,"line":1854},[68,76781,73954],{"class":335},[68,76783,58448],{"class":74},[68,76785,76786],{"class":335},"(result)\n",[68,76788,76789,76791,76793],{"class":70,"line":1860},[68,76790,52618],{"class":335},[68,76792,52014],{"class":51501},[68,76794,51508],{"class":335},[68,76796,76797,76799,76801],{"class":70,"line":1881},[68,76798,51986],{"class":335},[68,76800,52001],{"class":51501},[68,76802,51508],{"class":335},[68,76804,76805,76807,76809],{"class":70,"line":1886},[68,76806,51986],{"class":335},[68,76808,50836],{"class":51501},[68,76810,51508],{"class":335},[250,76812,76813],{},"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":63,"searchDepth":92,"depth":92,"links":76815},[76816,76826,76838,76855,76862,76870],{"id":53561,"depth":92,"text":53562,"children":76817},[76818,76819,76820,76821,76822,76823,76824,76825],{"id":53565,"depth":1387,"text":53566},{"id":53598,"depth":1387,"text":53599},{"id":53637,"depth":1387,"text":53638},{"id":53795,"depth":1387,"text":53796},{"id":53843,"depth":1387,"text":53844},{"id":53980,"depth":1387,"text":53981},{"id":54302,"depth":1387,"text":54303},{"id":57290,"depth":1387,"text":57291},{"id":57318,"depth":92,"text":57319,"children":76827},[76828,76829,76830,76831,76832,76833,76834,76835,76836,76837],{"id":57322,"depth":1387,"text":57323},{"id":57345,"depth":1387,"text":57346},{"id":58260,"depth":1387,"text":58261},{"id":58950,"depth":1387,"text":58951},{"id":59232,"depth":1387,"text":59233},{"id":63393,"depth":1387,"text":63394},{"id":63563,"depth":1387,"text":63564},{"id":63691,"depth":1387,"text":63692},{"id":63716,"depth":1387,"text":63717},{"id":65105,"depth":1387,"text":65106},{"id":66258,"depth":92,"text":66259,"children":76839},[76840,76841,76842,76843,76844,76845,76846,76847,76848,76849,76850,76851,76852,76853,76854],{"id":66262,"depth":1387,"text":66263},{"id":66916,"depth":1387,"text":66917},{"id":68611,"depth":1387,"text":68612},{"id":68652,"depth":1387,"text":68653},{"id":68694,"depth":1387,"text":68695},{"id":68708,"depth":1387,"text":68709},{"id":68757,"depth":1387,"text":68758},{"id":68769,"depth":1387,"text":68770},{"id":68784,"depth":1387,"text":68785},{"id":68820,"depth":1387,"text":68821},{"id":68901,"depth":1387,"text":68902},{"id":69029,"depth":1387,"text":69030},{"id":69041,"depth":1387,"text":69042},{"id":69060,"depth":1387,"text":69061},{"id":71171,"depth":1387,"text":71172},{"id":71190,"depth":92,"text":71191,"children":76856},[76857,76858,76859,76860,76861],{"id":71211,"depth":1387,"text":71212},{"id":71231,"depth":1387,"text":71232},{"id":71280,"depth":1387,"text":71281},{"id":71405,"depth":1387,"text":71406},{"id":71586,"depth":1387,"text":71587},{"id":71604,"depth":92,"text":71605,"children":76863},[76864,76865,76866,76867,76868,76869],{"id":71619,"depth":1387,"text":71620},{"id":71678,"depth":1387,"text":71679},{"id":71702,"depth":1387,"text":71703},{"id":72022,"depth":1387,"text":72023},{"id":72054,"depth":1387,"text":72055},{"id":72077,"depth":1387,"text":72078},{"id":75145,"depth":92,"text":75146,"children":76871},[76872,76873],{"id":75179,"depth":1387,"text":75180},{"id":75218,"depth":1387,"text":75219},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53533,"description":257},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76880,"title":76881,"body":76882,"description":257,"extension":258,"meta":93019,"navigation":260,"path":93020,"seo":93021,"stem":93022,"__hash__":93023},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76883,"toc":92955},[76884,76887,76890,76894,76898,76903,76908,76919,76923,76928,76931,76935,76938,76943,76947,76951,76954,76959,76962,76966,76969,76977,76980,76984,76989,76994,76997,77001,77006,77011,77014,77018,77023,77026,77031,77034,77039,77042,77047,77052,77055,77058,77062,77067,77072,77075,77079,77083,77086,77089,77092,77096,77100,77105,77110,77113,77117,77122,77127,77130,77133,77136,77139,77142,77145,77148,77151,77154,77159,77163,77168,77173,77176,77179,77182,77185,77188,77191,77194,77197,77201,77205,77208,77211,77214,77219,77221,77224,77227,77230,77233,77236,77239,77242,77245,77248,77251,77254,77257,77260,77265,77270,77275,77278,77282,77285,77290,77294,77296,77307,77312,77413,77416,77419,77422,77425,77428,77431,77434,77437,77439,77442,77445,77448,77451,77454,77456,77459,77462,77465,77468,77471,77474,77476,77479,77481,77483,77486,77490,77494,77497,77500,77503,77506,77509,77512,77515,77518,77521,77526,77646,77649,77652,77657,77660,77663,77666,77669,77674,77677,77680,77683,77686,77691,77694,77794,77859,77933,77937,77940,77943,77947,77950,77964,77993,77996,77999,78002,78005,78008,78011,78014,78016,78019,78022,78025,78028,78032,78037,78041,78046,78121,78124,78307,78310,78313,78316,78319,78322,78324,78327,78330,78333,78336,78339,78342,78344,78348,78351,78356,78359,78362,78365,78368,78370,78375,78378,78381,78384,78387,78389,78394,78397,78400,78402,78404,78407,78411,78414,78417,78422,78425,78428,78431,78481,78486,78490,78495,78498,78567,78570,78579,78583,78588,78591,78594,78602,78605,78622,80424,80428,80432,80437,80440,80444,80450,80456,80608,80613,80618,80621,80624,80627,80630,80633,80636,80639,80642,80645,80648,80651,80654,80659,80663,80666,80677,80681,80686,80689,80692,80695,80698,80701,80703,80706,80709,80712,80715,80717,80734,80737,80741,80744,80749,80754,80757,80760,80764,80767,80770,80779,80782,80786,80789,80794,80799,80866,80870,80873,80876,80881,80886,80972,80977,80981,80984,80987,81002,81005,81010,81014,81019,81128,81131,81142,81292,81296,81301,81410,81414,81419,81424,81429,81432,81439,81459,81495,81659,81664,81667,81672,81679,81682,81685,81688,81747,81803,81859,81863,81868,82183,82186,82190,82193,82198,82307,82312,82316,82321,82325,82396,82400,82402,82405,82408,82446,82722,82726,82743,82809,82843,82847,82850,82855,82884,82891,82900,82905,82920,82925,82934,82937,83074,83078,83140,83144,83149,83394,83398,83403,83406,83409,83412,83415,83419,83424,85005,85009,85013,85019,85022,85027,85031,85034,85039,85042,85053,85057,85062,85066,85071,85076,85079,85084,85088,85092,85095,85100,85105,85108,85111,85114,85236,85241,85343,85346,85349,85353,85358,85530,85535,85539,85542,85547,85613,85618,85621,85752,85755,85760,85763,85766,85857,85862,85865,85868,85871,85874,85879,85884,85887,85892,85897,85902,85906,85909,85912,85917,85922,85927,85932,85986,85989,85992,85997,86000,86003,86008,86013,86018,86022,86027,86041,86046,86049,86054,86058,86063,86068,86073,86078,86083,86088,86093,86098,86101,86105,86110,86113,86116,86119,86124,86129,86132,86135,86139,86142,86145,86150,86155,86160,86165,86168,86173,86178,86239,86244,86247,86252,87493,87498,87502,87506,87511,87514,87519,87524,87527,87532,87534,87539,87543,87546,87549,87560,87564,87569,87574,87629,87634,87639,87644,87855,87860,87864,87869,87872,87874,87877,87880,88327,88332,88339,88345,88348,88351,88615,88620,88624,88889,88894,88898,88903,88908,88913,88918,89249,89252,89257,89262,89265,89269,89273,89278,89283,89288,89293,89298,89303,89307,89310,89315,89320,89323,89397,89402,89407,89412,89414,89417,89787,89792,89797,89802,89805,89808,89910,89915,89920,90023,90027,90032,90036,90040,90045,90050,90053,90058,90061,90064,90457,90462,90465,90468,90471,90474,90994,90998,91003,91008,91013,91016,91021,91024,91027,91409,91414,91416,91418,91421,91424,91936,91940,92001,92004,92007,92010,92014,92017,92022,92027,92952],[10,76885,76881],{"id":76886},"_4js进阶",[19,76888,76889],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76891,76893],{"id":76892},"_41-作用域","4.1 作用域",[301,76895,76897],{"id":76896},"_411-局部作用域","4.1.1 局部作用域",[19,76899,76900],{},[48,76901],{"alt":63,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76904,76905],{},[48,76906],{"alt":63,"src":76907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[42,76909,76910,76913,76916],{},[26,76911,76912],{},"函数作用域在函数内部",[26,76914,76915],{},"块级作用域在{}",[26,76917,76918],{},"对象的那个{}不是作用域，不是块作用域",[301,76920,76922],{"id":76921},"_412-全局作用域","4.1.2 全局作用域",[19,76924,76925],{},[48,76926],{"alt":63,"src":76927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76929,76930],{},"window.a=10不要这样写",[301,76932,76934],{"id":76933},"_413-作用域链","4.1.3 作用域链",[19,76936,76937],{},"变量查找机制",[19,76939,76940],{},[48,76941],{"alt":63,"src":76942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76944,76946],{"id":76945},"_42-垃圾回收机制","4.2 垃圾回收机制",[301,76948,76950],{"id":76949},"_421-大体介绍","4.2.1 大体介绍",[19,76952,76953],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76955,76956],{},[48,76957],{"alt":63,"src":76958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76960,76961],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[301,76963,76965],{"id":76964},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76967,76968],{},"堆栈空间分配区别：",[23,76970,76971,76974],{},[26,76972,76973],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[26,76975,76976],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76978,76979],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22203,76981,76983],{"id":76982},"_4221-引用计数","4.2.2.1 引用计数",[19,76985,76986],{},[48,76987],{"alt":63,"src":76988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76990,76991],{},[48,76992],{"alt":63,"src":76993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76995,76996],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22203,76998,77000],{"id":76999},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77002,77003],{},[48,77004],{"alt":63,"src":77005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77007,77008],{},[48,77009],{"alt":63,"src":77010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77012,77013],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77015,77017],{"id":77016},"_43-闭包","4.3 闭包",[19,77019,77020],{},[48,77021],{"alt":63,"src":77022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77024,77025],{},"闭包：内层函数+外层函数的变量",[19,77027,77028],{},[48,77029],{"alt":63,"src":77030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77032,77033],{},"closure就是闭包",[19,77035,77036],{},[48,77037],{"alt":63,"src":77038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77040,77041],{},"内层函数必须包含外层函数的变量才是闭包",[19,77043,77044],{},[48,77045],{"alt":63,"src":77046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77048,77049],{},[48,77050],{"alt":63,"src":77051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77053,77054],{},"闭包可能会引起内存泄漏",[19,77056,77057],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77059,77061],{"id":77060},"_44-变量提升","4.4 变量提升",[19,77063,77064],{},[48,77065],{"alt":63,"src":77066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77068,77069],{},[48,77070],{"alt":63,"src":77071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77073,77074],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77076,77078],{"id":77077},"_45-函数进阶","4.5 函数进阶",[301,77080,77082],{"id":77081},"_451-函数提升","4.5.1 函数提升",[19,77084,77085],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77087,77088],{},"只提升函数声明，不提升函数调用",[52014,77090,77091],{},"\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",[301,77093,77095],{"id":77094},"_452-函数参数","4.5.2 函数参数",[22203,77097,77099],{"id":77098},"_4521-动态参数","4.5.2.1 动态参数",[19,77101,77102],{},[48,77103],{"alt":63,"src":77104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77106,77107],{},[48,77108],{"alt":63,"src":77109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77111,77112],{},"箭头函数里边没有arguments",[22203,77114,77116],{"id":77115},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77118,77119],{},[48,77120],{"alt":63,"src":77121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77123,77124],{},[48,77125],{"alt":63,"src":77126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77128,77129],{},"剩余参数使用的时候不需要写...",[19,77131,77132],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77134,77135],{},"  function getSum(a,b,...arr) {",[19,77137,77138],{},"  console.log(11)",[19,77140,77141],{},"  }",[19,77143,77144],{},"  getSum(1,2,3,4)",[19,77146,77147],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77149,77150],{},"  getSum(1,2)",[19,77152,77153],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77155,77156],{},[48,77157],{"alt":63,"src":77158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22203,77160,77162],{"id":77161},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77164,77165],{},[48,77166],{"alt":63,"src":77167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77169,77170],{},[48,77171],{"alt":63,"src":77172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77174,77175],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77177,77178],{},"展开运算符可以用于数组之间的合并：",[19,77180,77181],{},"const arr1 = [1, 2, 3]",[19,77183,77184],{},"const arr2 = [3, 4, 5]",[19,77186,77187],{},"const arr = [...arr1, ...arr2]",[19,77189,77190],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77192,77193],{},"剩余参数：函数参数使用，得到真数组",[19,77195,77196],{},"展开运算符：数组中使用，数组展开",[301,77198,77200],{"id":77199},"_453-箭头函数","4.5.3 箭头函数",[22203,77202,77204],{"id":77203},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77206,77207],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77209,77210],{},"它不是万能的！！！",[19,77212,77213],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77215,77216],{},[48,77217],{"alt":63,"src":77218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77220,365],{},[19,77222,77223],{},"① 只有一个形参的时候，可以省略小括号：",[19,77225,77226],{},"const fn=x=>{console.log(x)}",[19,77228,77229],{},"② 只有一行代码时可以省略大括号：",[19,77231,77232],{},"const fn=x=>console.log(11)",[19,77234,77235],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77237,77238],{},"const fn=x=>x+x",[19,77240,77241],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77243,77244],{},"⑤ 阻止表单默认提交：",[19,77246,77247],{},"const form = document.querySelector('form')",[19,77249,77250],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77252,77253],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77255,77256],{},"const fn=uname=>({uname:uname})",[19,77258,77259],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77261,77262],{},[48,77263],{"alt":63,"src":77264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77266,77267],{},[48,77268],{"alt":63,"src":77269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77271,77272],{},[48,77273],{"alt":63,"src":77274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77276,77277],{},"一定不要忘记用()，有()就理解为自带return",[22203,77279,77281],{"id":77280},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77283,77284],{},"箭头函数是没有动态参数的arguments",[19,77286,77287],{},[48,77288],{"alt":63,"src":77289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22203,77291,77293],{"id":77292},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77295,11537],{},[23,77297,77298,77301,77304],{},[26,77299,77300],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[26,77302,77303],{},"事件回调函数使用箭头函数时，this 为全局的 window",[26,77305,77306],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77308,77309],{},[48,77310],{"alt":63,"src":77311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[58,77313,77315],{"className":53268,"code":77314,"language":53270,"meta":63,"style":63},"  \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",[65,77316,77317,77325,77330,77335,77340,77345,77350,77354,77359,77363,77367,77372,77377,77382,77386,77390,77395,77400,77405],{"__ignoreMap":63},[68,77318,77319,77321,77323],{"class":70,"line":71},[68,77320,52345],{"class":335},[68,77322,52014],{"class":51501},[68,77324,51508],{"class":335},[68,77326,77327],{"class":70,"line":92},[68,77328,77329],{"class":335},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[68,77331,77332],{"class":70,"line":1387},[68,77333,77334],{"class":335},"    console.log(this) \u002F\u002F指向window\n",[68,77336,77337],{"class":70,"line":1402},[68,77338,77339],{"class":335},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[68,77341,77342],{"class":70,"line":1408},[68,77343,77344],{"class":335},"    function fn() {\n",[68,77346,77347],{"class":70,"line":1422},[68,77348,77349],{"class":335},"      console.log(this)  \u002F\u002F指向window\n",[68,77351,77352],{"class":70,"line":1428},[68,77353,2393],{"class":335},[68,77355,77356],{"class":70,"line":1519},[68,77357,77358],{"class":335},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[68,77360,77361],{"class":70,"line":1525},[68,77362,2606],{"emptyLinePlaceholder":260},[68,77364,77365],{"class":70,"line":1537},[68,77366,71724],{"class":335},[68,77368,77369],{"class":70,"line":1819},[68,77370,77371],{"class":335},"      name: 'andy',\n",[68,77373,77374],{"class":70,"line":1824},[68,77375,77376],{"class":335},"      sayHai: function () {\n",[68,77378,77379],{"class":70,"line":1830},[68,77380,77381],{"class":335},"        console.log(this)\n",[68,77383,77384],{"class":70,"line":1835},[68,77385,52599],{"class":335},[68,77387,77388],{"class":70,"line":1849},[68,77389,2393],{"class":335},[68,77391,77392],{"class":70,"line":1854},[68,77393,77394],{"class":335},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[68,77396,77397],{"class":70,"line":1860},[68,77398,77399],{"class":335},"    \u002F\u002F 2.箭头函数的this\n",[68,77401,77402],{"class":70,"line":1881},[68,77403,77404],{"class":335},"    const fn = () => console.log(this)\n",[68,77406,77407,77409,77411],{"class":70,"line":1886},[68,77408,52618],{"class":335},[68,77410,52014],{"class":51501},[68,77412,51508],{"class":335},[19,77414,77415],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77417,77418],{},"const fn = () => console.log(this)",[19,77420,77421],{},"fn() \u002F\u002F指向window",[19,77423,77424],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77426,77427],{},"①",[19,77429,77430],{},"const obj = {",[19,77432,77433],{},"uname: 'pink老师',",[19,77435,77436],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77438,1279],{},[19,77440,77441],{},"调用对象里边的函数",[19,77443,77444],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77446,77447],{},"obj.sayHai()",[19,77449,77450],{},"②",[19,77452,77453],{},"const obj1 = {",[19,77455,77433],{},[19,77457,77458],{},"sayHai: function () {",[19,77460,77461],{},"let i = 10",[19,77463,77464],{},"const count = () => {",[19,77466,77467],{},"console.log(this)",[19,77469,77470],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77472,77473],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77475,1279],{},[19,77477,77478],{},"count()",[19,77480,1279],{},[19,77482,1279],{},[19,77484,77485],{},"obj1.sayHai()",[14,77487,77489],{"id":77488},"_46-解构赋值","4.6 解构赋值",[301,77491,77493],{"id":77492},"_461-数组解构","4.6.1 数组解构",[19,77495,77496],{},"以前要是使用数组中的值的话：",[19,77498,77499],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77501,77502],{},"const arr=[100,60,80]",[19,77504,77505],{},"const max=arr[0]",[19,77507,77508],{},"const min=arr[1]",[19,77510,77511],{},"const avg=arr[2]",[19,77513,77514],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77516,77517],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77519,77520],{},"这个写法就类似于上边的那种用很多const的方法",[19,77522,77523],{},[48,77524],{"alt":63,"src":77525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[58,77527,77529],{"className":50834,"code":77528,"language":50836,"meta":63,"style":63},"①变量之间交换值:\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",[65,77530,77531,77536,77541,77546,77551,77556,77560,77564,77569,77573,77578,77583,77587,77592,77597,77608,77618,77623,77628,77633,77637,77641],{"__ignoreMap":63},[68,77532,77533],{"class":70,"line":71},[68,77534,77535],{"class":335},"①变量之间交换值:\n",[68,77537,77538],{"class":70,"line":92},[68,77539,77540],{"class":335},"let a=1\n",[68,77542,77543],{"class":70,"line":1387},[68,77544,77545],{"class":335},"let b=2;\n",[68,77547,77548],{"class":70,"line":1402},[68,77549,77550],{"class":335},"必须加这行代码，不然就会报错\n",[68,77552,77553],{"class":70,"line":1408},[68,77554,77555],{"class":335},"[b,a]=[a,b]\n",[68,77557,77558],{"class":70,"line":1422},[68,77559,2606],{"emptyLinePlaceholder":260},[68,77561,77562],{"class":70,"line":1428},[68,77563,2606],{"emptyLinePlaceholder":260},[68,77565,77566],{"class":70,"line":1519},[68,77567,77568],{"class":335},"可以写成下面的方式：\n",[68,77570,77571],{"class":70,"line":1525},[68,77572,77540],{"class":335},[68,77574,77575],{"class":70,"line":1537},[68,77576,77577],{"class":335},"let b=2\n",[68,77579,77580],{"class":70,"line":1819},[68,77581,77582],{"class":335},";[b,a]=[a,b]\n",[68,77584,77585],{"class":70,"line":1824},[68,77586,2606],{"emptyLinePlaceholder":260},[68,77588,77589],{"class":70,"line":1830},[68,77590,77591],{"class":335},"②排序\n",[68,77593,77594],{"class":70,"line":1835},[68,77595,77596],{"class":335},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[68,77598,77599,77602,77605],{"class":70,"line":1849},[68,77600,77601],{"class":335},"for (let i = 0; i ",[68,77603,1243],{"class":77604},"s7hpK",[68,77606,77607],{"class":335}," arr1.length; i++) {\n",[68,77609,77610,77613,77615],{"class":70,"line":1854},[68,77611,77612],{"class":335},"   for (let j = 0; j ",[68,77614,1243],{"class":77604},[68,77616,77617],{"class":335}," arr1.length - 1; j++) {\n",[68,77619,77620],{"class":70,"line":1860},[68,77621,77622],{"class":335},"      if (arr1[j] > arr1[j + 1]) {\n",[68,77624,77625],{"class":70,"line":1881},[68,77626,77627],{"class":335},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[68,77629,77630],{"class":70,"line":1886},[68,77631,77632],{"class":335},"       }\n",[68,77634,77635],{"class":70,"line":1900},[68,77636,4515],{"class":335},[68,77638,77639],{"class":70,"line":1905},[68,77640,1772],{"class":335},[68,77642,77643],{"class":70,"line":1934},[68,77644,77645],{"class":335},"console.log(arr1)\n",[19,77647,77648],{},"数组解构的细节：",[19,77650,77651],{},"①变量多，单元值少",[19,77653,77654],{},[48,77655],{"alt":63,"src":77656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77658,77659],{},"防止出现undefined的方法：",[19,77661,77662],{},"const [a=0,b=0] =[1]",[19,77664,77665],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77667,77668],{},"②变量少，单元值多",[19,77670,77671],{},[48,77672],{"alt":63,"src":77673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77675,77676],{},"此时可以使用剩余参数来接收多余的值",[19,77678,77679],{},"const [a,b,...c]=[1,2,3,4]",[19,77681,77682],{},"console.log(c) 输出[3,4]",[19,77684,77685],{},"③可以按需导入，忽略某些返回值",[19,77687,77688],{},[48,77689],{"alt":63,"src":77690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77692,77693],{},"④支持多维数组的结构",[58,77695,77699],{"className":77696,"code":77697,"language":77698,"meta":63,"style":63},"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",[65,77700,77701,77729,77745,77760,77775],{"__ignoreMap":63},[68,77702,77703,77705,77707,77709,77711,77713,77715,77717,77720,77722,77724,77726],{"class":70,"line":71},[68,77704,6997],{"class":331},[68,77706,52034],{"class":335},[68,77708,381],{"class":331},[68,77710,52427],{"class":335},[68,77712,551],{"class":82},[68,77714,12640],{"class":335},[68,77716,412],{"class":82},[68,77718,77719],{"class":335},", [",[68,77721,406],{"class":82},[68,77723,12640],{"class":335},[68,77725,626],{"class":82},[68,77727,77728],{"class":335},"]]\n",[68,77730,77731,77734,77736,77738,77740,77742],{"class":70,"line":92},[68,77732,77733],{"class":335},"console.",[68,77735,58448],{"class":74},[68,77737,4057],{"class":335},[68,77739,525],{"class":82},[68,77741,4422],{"class":335},[68,77743,77744],{"class":393},"  \u002F\u002F1\n",[68,77746,77747,77749,77751,77753,77755,77757],{"class":70,"line":1387},[68,77748,77733],{"class":335},[68,77750,58448],{"class":74},[68,77752,4057],{"class":335},[68,77754,551],{"class":82},[68,77756,4422],{"class":335},[68,77758,77759],{"class":393},"  \u002F\u002F2\n",[68,77761,77762,77764,77766,77768,77770,77772],{"class":70,"line":1402},[68,77763,77733],{"class":335},[68,77765,58448],{"class":74},[68,77767,4057],{"class":335},[68,77769,412],{"class":82},[68,77771,4422],{"class":335},[68,77773,77774],{"class":393},"  \u002F\u002F[3,4]\n",[68,77776,77777,77779,77781,77783,77785,77787,77789,77791],{"class":70,"line":1408},[68,77778,77733],{"class":335},[68,77780,58448],{"class":74},[68,77782,4057],{"class":335},[68,77784,412],{"class":82},[68,77786,5107],{"class":335},[68,77788,525],{"class":82},[68,77790,4422],{"class":335},[68,77792,77793],{"class":393},"  \u002F\u002F3\n",[58,77795,77797],{"className":77696,"code":77796,"language":77698,"meta":63,"style":63},"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",[65,77798,77799,77826,77837,77848],{"__ignoreMap":63},[68,77800,77801,77803,77806,77808,77810,77812,77814,77816,77818,77820,77822,77824],{"class":70,"line":71},[68,77802,6997],{"class":331},[68,77804,77805],{"class":335}," [a, b, c] ",[68,77807,381],{"class":331},[68,77809,52427],{"class":335},[68,77811,551],{"class":82},[68,77813,12640],{"class":335},[68,77815,412],{"class":82},[68,77817,77719],{"class":335},[68,77819,406],{"class":82},[68,77821,12640],{"class":335},[68,77823,626],{"class":82},[68,77825,77728],{"class":335},[68,77827,77828,77830,77832,77835],{"class":70,"line":92},[68,77829,77733],{"class":335},[68,77831,58448],{"class":74},[68,77833,77834],{"class":335},"(a)",[68,77836,77744],{"class":393},[68,77838,77839,77841,77843,77846],{"class":70,"line":1387},[68,77840,77733],{"class":335},[68,77842,58448],{"class":74},[68,77844,77845],{"class":335},"(b)",[68,77847,77759],{"class":393},[68,77849,77850,77852,77854,77857],{"class":70,"line":1402},[68,77851,77733],{"class":335},[68,77853,58448],{"class":74},[68,77855,77856],{"class":335},"(c)",[68,77858,77774],{"class":393},[58,77860,77862],{"className":77696,"code":77861,"language":77698,"meta":63,"style":63},"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",[65,77863,77864,77891,77901,77911,77921],{"__ignoreMap":63},[68,77865,77866,77868,77871,77873,77875,77877,77879,77881,77883,77885,77887,77889],{"class":70,"line":71},[68,77867,6997],{"class":331},[68,77869,77870],{"class":335}," [a, b, [c, d]] ",[68,77872,381],{"class":331},[68,77874,52427],{"class":335},[68,77876,551],{"class":82},[68,77878,12640],{"class":335},[68,77880,412],{"class":82},[68,77882,77719],{"class":335},[68,77884,406],{"class":82},[68,77886,12640],{"class":335},[68,77888,626],{"class":82},[68,77890,77728],{"class":335},[68,77892,77893,77895,77897,77899],{"class":70,"line":92},[68,77894,77733],{"class":335},[68,77896,58448],{"class":74},[68,77898,77834],{"class":335},[68,77900,77744],{"class":393},[68,77902,77903,77905,77907,77909],{"class":70,"line":1387},[68,77904,77733],{"class":335},[68,77906,58448],{"class":74},[68,77908,77845],{"class":335},[68,77910,77759],{"class":393},[68,77912,77913,77915,77917,77919],{"class":70,"line":1402},[68,77914,77733],{"class":335},[68,77916,58448],{"class":74},[68,77918,77856],{"class":335},[68,77920,77793],{"class":393},[68,77922,77923,77925,77927,77930],{"class":70,"line":1408},[68,77924,77733],{"class":335},[68,77926,58448],{"class":74},[68,77928,77929],{"class":335},"(d)",[68,77931,77932],{"class":393},"  \u002F\u002F4\n",[301,77934,77936],{"id":77935},"_462-对象解构","4.6.2 对象解构",[19,77938,77939],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77941,77942],{},"用的非常非常多！！！！！！",[22203,77944,77946],{"id":77945},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77948,77949],{},"基本语法：",[23,77951,77952,77955,77958,77961],{},[26,77953,77954],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[26,77956,77957],{},"对象属性的值将被赋值给与属性名相同的变量",[26,77959,77960],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[26,77962,77963],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[58,77965,77967],{"className":50834,"code":77966,"language":50836,"meta":63,"style":63},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[65,77968,77969,77974,77979,77984,77988],{"__ignoreMap":63},[68,77970,77971],{"class":70,"line":71},[68,77972,77973],{"class":335},"const obj = {\n",[68,77975,77976],{"class":70,"line":92},[68,77977,77978],{"class":335},"   uname: 'pink老师',\n",[68,77980,77981],{"class":70,"line":1387},[68,77982,77983],{"class":335},"   age: 18,\n",[68,77985,77986],{"class":70,"line":1402},[68,77987,1772],{"class":335},[68,77989,77990],{"class":70,"line":1408},[68,77991,77992],{"class":335},"const { uname, age } = obj\n",[19,77994,77995],{},"上方代码这样写等价于：",[19,77997,77998],{},"const uname等价于obj.uname",[19,78000,78001],{},"变量名可以重新改名：",[19,78003,78004],{},"const uname='red老师'",[19,78006,78007],{},"const user={",[19,78009,78010],{},"  uname:'pink老师',",[19,78012,78013],{},"  age:18",[19,78015,1279],{},[19,78017,78018],{},"const {uname,age}=user",[19,78020,78021],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78023,78024],{},"const {旧变量名：新变量名}=对象",[19,78026,78027],{},"const {uname:username,age}=user",[22203,78029,78031],{"id":78030},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78033,78034],{},[48,78035],{"alt":63,"src":78036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22203,78038,78040],{"id":78039},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78042,78043],{},[48,78044],{"alt":63,"src":78045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[58,78047,78049],{"className":53268,"code":78048,"language":53270,"meta":63,"style":63},"  \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",[65,78050,78051,78059,78064,78069,78074,78079,78084,78089,78094,78099,78103,78108,78113],{"__ignoreMap":63},[68,78052,78053,78055,78057],{"class":70,"line":71},[68,78054,52345],{"class":335},[68,78056,52014],{"class":51501},[68,78058,51508],{"class":335},[68,78060,78061],{"class":70,"line":92},[68,78062,78063],{"class":335},"    const pig = {\n",[68,78065,78066],{"class":70,"line":1387},[68,78067,78068],{"class":335},"      name: '佩奇',\n",[68,78070,78071],{"class":70,"line":1402},[68,78072,78073],{"class":335},"      family: {\n",[68,78075,78076],{"class":70,"line":1408},[68,78077,78078],{"class":335},"        mother: '猪妈妈',\n",[68,78080,78081],{"class":70,"line":1422},[68,78082,78083],{"class":335},"        father: '猪爸爸',\n",[68,78085,78086],{"class":70,"line":1428},[68,78087,78088],{"class":335},"        sister: '乔治'\n",[68,78090,78091],{"class":70,"line":1519},[68,78092,78093],{"class":335},"      },\n",[68,78095,78096],{"class":70,"line":1525},[68,78097,78098],{"class":335},"      age: 6\n",[68,78100,78101],{"class":70,"line":1537},[68,78102,2393],{"class":335},[68,78104,78105],{"class":70,"line":1819},[68,78106,78107],{"class":335},"    \u002F\u002F 多级对象解构\n",[68,78109,78110],{"class":70,"line":1824},[68,78111,78112],{"class":335},"    const { name, family: { mother, father, sister }, age } = pig\n",[68,78114,78115,78117,78119],{"class":70,"line":1830},[68,78116,52618],{"class":335},[68,78118,52014],{"class":51501},[68,78120,51508],{"class":335},[19,78122,78123],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[58,78125,78128],{"className":78126,"code":78127,"language":76648,"meta":63,"style":63},"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",[65,78129,78130,78135,78146,78158,78170,78179,78183,78194,78206,78216,78221,78225,78235,78246,78255,78259,78263,78274,78285,78294,78298,78303],{"__ignoreMap":63},[68,78131,78132],{"class":70,"line":71},[68,78133,78134],{"class":393},"    \u002F\u002F 这是后台传递过来的数据\n",[68,78136,78137,78139,78142,78144],{"class":70,"line":92},[68,78138,11426],{"class":331},[68,78140,78141],{"class":335}," msg ",[68,78143,381],{"class":331},[68,78145,15777],{"class":335},[68,78147,78148,78151,78153,78156],{"class":70,"line":1387},[68,78149,78150],{"class":78},"      \"code\"",[68,78152,1192],{"class":331},[68,78154,78155],{"class":82}," 200",[68,78157,31667],{"class":335},[68,78159,78160,78163,78165,78168],{"class":70,"line":1402},[68,78161,78162],{"class":78},"      \"msg\"",[68,78164,1192],{"class":331},[68,78166,78167],{"class":78}," \"获取新闻列表成功\"",[68,78169,31667],{"class":335},[68,78171,78172,78175,78177],{"class":70,"line":1408},[68,78173,78174],{"class":78},"      \"data\"",[68,78176,1192],{"class":331},[68,78178,55648],{"class":335},[68,78180,78181],{"class":70,"line":1422},[68,78182,2716],{"class":335},[68,78184,78185,78188,78190,78192],{"class":70,"line":1428},[68,78186,78187],{"class":78},"          \"id\"",[68,78189,1192],{"class":331},[68,78191,25322],{"class":82},[68,78193,31667],{"class":335},[68,78195,78196,78199,78201,78204],{"class":70,"line":1519},[68,78197,78198],{"class":78},"          \"title\"",[68,78200,1192],{"class":331},[68,78202,78203],{"class":78}," \"5G商用自己，三大运用商收入下降\"",[68,78205,31667],{"class":335},[68,78207,78208,78211,78213],{"class":70,"line":1525},[68,78209,78210],{"class":78},"          \"count\"",[68,78212,1192],{"class":331},[68,78214,78215],{"class":82}," 58\n",[68,78217,78218],{"class":70,"line":1537},[68,78219,78220],{"class":335},"        },\n",[68,78222,78223],{"class":70,"line":1819},[68,78224,2716],{"class":335},[68,78226,78227,78229,78231,78233],{"class":70,"line":1824},[68,78228,78187],{"class":78},[68,78230,1192],{"class":331},[68,78232,14960],{"class":82},[68,78234,31667],{"class":335},[68,78236,78237,78239,78241,78244],{"class":70,"line":1830},[68,78238,78198],{"class":78},[68,78240,1192],{"class":331},[68,78242,78243],{"class":78}," \"国际媒体头条速览\"",[68,78245,31667],{"class":335},[68,78247,78248,78250,78252],{"class":70,"line":1835},[68,78249,78210],{"class":78},[68,78251,1192],{"class":331},[68,78253,78254],{"class":82}," 56\n",[68,78256,78257],{"class":70,"line":1849},[68,78258,78220],{"class":335},[68,78260,78261],{"class":70,"line":1854},[68,78262,2716],{"class":335},[68,78264,78265,78267,78269,78272],{"class":70,"line":1860},[68,78266,78187],{"class":78},[68,78268,1192],{"class":331},[68,78270,78271],{"class":82}," 3",[68,78273,31667],{"class":335},[68,78275,78276,78278,78280,78283],{"class":70,"line":1881},[68,78277,78198],{"class":78},[68,78279,1192],{"class":331},[68,78281,78282],{"class":78}," \"乌克兰和俄罗斯持续冲突\"",[68,78284,31667],{"class":335},[68,78286,78287,78289,78291],{"class":70,"line":1886},[68,78288,78210],{"class":78},[68,78290,1192],{"class":331},[68,78292,78293],{"class":82}," 1669\n",[68,78295,78296],{"class":70,"line":1900},[68,78297,78220],{"class":335},[68,78299,78300],{"class":70,"line":1905},[68,78301,78302],{"class":335},"      ]\n",[68,78304,78305],{"class":70,"line":1934},[68,78306,2393],{"class":335},[19,78308,78309],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78311,78312],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78314,78315],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78317,78318],{},"function({data}) {",[19,78320,78321],{},"console.log(data)",[19,78323,1279],{},[19,78325,78326],{},"render(msg)",[19,78328,78329],{},"实参传递给形参的时候解构了",[19,78331,78332],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78334,78335],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78337,78338],{},"function render({data:mydata}) {",[19,78340,78341],{},"  console.log(data)",[19,78343,1279],{},[301,78345,78347],{"id":78346},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78349,78350],{},"有两种情况：一个是数组结构，一个是立即执行函数",[23,78352,78353],{},[26,78354,78355],{},"如果对一个数组进行遍历，有两种方式：",[19,78357,78358],{},"①法1",[19,78360,78361],{},"const arr=[1,2,3]",[19,78363,78364],{},"arr.map(function(item,index) {",[19,78366,78367],{},"  console.log(item)",[19,78369,52665],{},[19,78371,78372],{},[48,78373],{"alt":63,"src":78374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78376,78377],{},"②法2",[19,78379,78380],{},"const str='pink'",[19,78382,78383],{},"[1,2,3].map(function(item,index) {",[19,78385,78386],{},"console.log(item)",[19,78388,52665],{},[19,78390,78391],{},[48,78392],{"alt":63,"src":78393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78395,78396],{},"此时会报错",[19,78398,78399],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78401,78386],{},[19,78403,52665],{},[19,78405,78406],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78408,78410],{"id":78409},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78412,78413],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78415,78416],{},"可以理解为加强版的for循环",[19,78418,78419],{},[48,78420],{"alt":63,"src":78421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78423,78424],{},"里边不写return，不返回数组，只遍历不返回",[19,78426,78427],{},"map是返回数组",[19,78429,78430],{},"forEach主要用于遍历数组对象",[58,78432,78434],{"className":53268,"code":78433,"language":53270,"meta":63,"style":63},"  \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",[65,78435,78436,78444,78449,78454,78459,78464,78468,78473],{"__ignoreMap":63},[68,78437,78438,78440,78442],{"class":70,"line":71},[68,78439,52345],{"class":335},[68,78441,52014],{"class":51501},[68,78443,51508],{"class":335},[68,78445,78446],{"class":70,"line":92},[68,78447,78448],{"class":335},"    const arr = ['red', 'green', 'pink']\n",[68,78450,78451],{"class":70,"line":1387},[68,78452,78453],{"class":335},"    const result = arr.forEach(function (item, index) {\n",[68,78455,78456],{"class":70,"line":1402},[68,78457,78458],{"class":335},"      console.log(item)\n",[68,78460,78461],{"class":70,"line":1408},[68,78462,78463],{"class":335},"      console.log(index)\n",[68,78465,78466],{"class":70,"line":1422},[68,78467,33662],{"class":335},[68,78469,78470],{"class":70,"line":1428},[68,78471,78472],{"class":335},"    console.log(result)\n",[68,78474,78475,78477,78479],{"class":70,"line":1519},[68,78476,52618],{"class":335},[68,78478,52014],{"class":51501},[68,78480,51508],{"class":335},[19,78482,78483],{},[48,78484],{"alt":63,"src":78485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78487,78489],{"id":78488},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78491,78492],{},[48,78493],{"alt":63,"src":78494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78496,78497],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[58,78499,78501],{"className":53268,"code":78500,"language":53270,"meta":63,"style":63},"\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",[65,78502,78503,78511,78519,78524,78529,78533,78537,78542,78546,78551,78559],{"__ignoreMap":63},[68,78504,78505,78507,78509],{"class":70,"line":71},[68,78506,1243],{"class":335},[68,78508,52001],{"class":51501},[68,78510,51508],{"class":335},[68,78512,78513,78515,78517],{"class":70,"line":92},[68,78514,52345],{"class":335},[68,78516,52014],{"class":51501},[68,78518,51508],{"class":335},[68,78520,78521],{"class":70,"line":1387},[68,78522,78523],{"class":335},"    const arr = [10, 20, 30]\n",[68,78525,78526],{"class":70,"line":1402},[68,78527,78528],{"class":335},"    const newArr = arr.filter(function (item, index) {\n",[68,78530,78531],{"class":70,"line":1408},[68,78532,78458],{"class":335},[68,78534,78535],{"class":70,"line":1422},[68,78536,78463],{"class":335},[68,78538,78539],{"class":70,"line":1428},[68,78540,78541],{"class":335},"      return item >= 20\n",[68,78543,78544],{"class":70,"line":1519},[68,78545,33662],{"class":335},[68,78547,78548],{"class":70,"line":1525},[68,78549,78550],{"class":335},"    console.log(newArr)\n",[68,78552,78553,78555,78557],{"class":70,"line":1537},[68,78554,52618],{"class":335},[68,78556,52014],{"class":51501},[68,78558,51508],{"class":335},[68,78560,78561,78563,78565],{"class":70,"line":1819},[68,78562,51986],{"class":335},[68,78564,52001],{"class":51501},[68,78566,51508],{"class":335},[19,78568,78569],{},"这个也可以写成箭头函数：",[58,78571,78573],{"className":50834,"code":78572,"language":50836,"meta":63,"style":63},"const newArr = arr.filter(item => item >= 20)\n",[65,78574,78575],{"__ignoreMap":63},[68,78576,78577],{"class":70,"line":71},[68,78578,78572],{"class":335},[14,78580,78582],{"id":78581},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78584,78585],{},[48,78586],{"alt":63,"src":78587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78589,78590],{},"步骤：",[19,78592,78593],{},"①：渲染页面模块",[42,78595,78596,78599],{},[26,78597,78598],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[26,78600,78601],{},"用forEach+字符串的形式",[19,78603,78604],{},"②：点击不同需求，显示不同页面内容",[42,78606,78607,78610,78613,78616,78619],{},[26,78608,78609],{},"点击采取事件委托方式 .filter",[26,78611,78612],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[26,78614,78615],{},"筛选条件是根据点击的 data-index 来判断",[26,78617,78618],{},"可以使用对象解构，把事件对象解构",[26,78620,78621],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[58,78623,78625],{"className":50834,"code":78624,"language":50836,"meta":63,"style":63},"\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",[65,78626,78627,78637,78651,78655,78663,78677,78697,78709,78717,78723,78733,78743,78753,78757,78761,78767,78780,78792,78802,78814,78818,78822,78829,78842,78854,78871,78889,78902,78906,78910,78922,78932,78936,78940,78947,78988,79015,79025,79029,79033,79041,79053,79057,79061,79069,79081,79093,79104,79108,79112,79121,79133,79144,79148,79152,79161,79173,79185,79189,79193,79200,79210,79222,79234,79249,79253,79257,79265,79281,79291,79301,79311,79323,79327,79331,79341,79352,79362,79366,79374,79382,79386,79394,79409,79435,79460,79485,79504,79512,79526,79531,79536,79541,79546,79551,79559,79567,79572,79583,79588,79598,79608,79618,79628,79632,79636,79645,79654,79663,79672,79676,79680,79689,79698,79707,79716,79720,79724,79733,79742,79751,79760,79764,79768,79777,79786,79795,79804,79808,79812,79821,79830,79839,79848,79852,79856,79865,79874,79883,79892,79896,79900,79909,79918,79926,79935,79939,79943,79947,79952,79964,79969,79981,79985,80002,80030,80039,80044,80054,80064,80073,80078,80083,80087,80092,80109,80113,80118,80126,80131,80158,80163,80183,80188,80200,80205,80210,80215,80226,80240,80277,80295,80328,80345,80369,80373,80378,80384,80388,80392,80396,80404,80412,80416],{"__ignoreMap":63},[68,78628,78629,78631,78633,78635],{"class":70,"line":71},[68,78630,51498],{"class":335},[68,78632,51502],{"class":51501},[68,78634,51505],{"class":74},[68,78636,51508],{"class":335},[68,78638,78639,78641,78643,78645,78647,78649],{"class":70,"line":92},[68,78640,1243],{"class":335},[68,78642,50836],{"class":51501},[68,78644,51517],{"class":74},[68,78646,381],{"class":335},[68,78648,51522],{"class":78},[68,78650,51508],{"class":335},[68,78652,78653],{"class":70,"line":1387},[68,78654,2606],{"emptyLinePlaceholder":260},[68,78656,78657,78659,78661],{"class":70,"line":1402},[68,78658,1243],{"class":335},[68,78660,51535],{"class":51501},[68,78662,51508],{"class":335},[68,78664,78665,78667,78669,78671,78673,78675],{"class":70,"line":1408},[68,78666,52345],{"class":335},[68,78668,51545],{"class":51501},[68,78670,51548],{"class":74},[68,78672,381],{"class":335},[68,78674,51553],{"class":78},[68,78676,51508],{"class":335},[68,78678,78679,78681,78683,78685,78687,78689,78691,78693,78695],{"class":70,"line":1422},[68,78680,52345],{"class":335},[68,78682,51545],{"class":51501},[68,78684,15125],{"class":74},[68,78686,381],{"class":335},[68,78688,51592],{"class":78},[68,78690,51572],{"class":74},[68,78692,381],{"class":335},[68,78694,51599],{"class":78},[68,78696,51508],{"class":335},[68,78698,78699,78701,78703,78705,78707],{"class":70,"line":1428},[68,78700,52345],{"class":335},[68,78702,51608],{"class":51501},[68,78704,51611],{"class":335},[68,78706,51608],{"class":51501},[68,78708,51508],{"class":335},[68,78710,78711,78713,78715],{"class":70,"line":1519},[68,78712,52345],{"class":335},[68,78714,250],{"class":51501},[68,78716,51508],{"class":335},[68,78718,78719,78721],{"class":70,"line":1525},[68,78720,6608],{"class":51501},[68,78722,15777],{"class":335},[68,78724,78725,78727,78729,78731],{"class":70,"line":1537},[68,78726,54896],{"class":82},[68,78728,51638],{"class":335},[68,78730,525],{"class":82},[68,78732,1498],{"class":335},[68,78734,78735,78737,78739,78741],{"class":70,"line":1819},[68,78736,54907],{"class":82},[68,78738,51638],{"class":335},[68,78740,525],{"class":82},[68,78742,1498],{"class":335},[68,78744,78745,78747,78749,78751],{"class":70,"line":1824},[68,78746,72797],{"class":82},[68,78748,51638],{"class":335},[68,78750,60706],{"class":82},[68,78752,1498],{"class":335},[68,78754,78755],{"class":70,"line":1830},[68,78756,2393],{"class":335},[68,78758,78759],{"class":70,"line":1835},[68,78760,2606],{"emptyLinePlaceholder":260},[68,78762,78763,78765],{"class":70,"line":1849},[68,78764,62324],{"class":74},[68,78766,15777],{"class":335},[68,78768,78769,78771,78773,78776,78778],{"class":70,"line":1854},[68,78770,54972],{"class":82},[68,78772,51638],{"class":335},[68,78774,78775],{"class":82},"990",[68,78777,51693],{"class":331},[68,78779,1498],{"class":335},[68,78781,78782,78784,78786,78788,78790],{"class":70,"line":1860},[68,78783,54907],{"class":82},[68,78785,51638],{"class":335},[68,78787,525],{"class":82},[68,78789,51757],{"class":82},[68,78791,1498],{"class":335},[68,78793,78794,78796,78798,78800],{"class":70,"line":1881},[68,78795,55210],{"class":82},[68,78797,51638],{"class":335},[68,78799,51678],{"class":82},[68,78801,1498],{"class":335},[68,78803,78804,78807,78809,78812],{"class":70,"line":1886},[68,78805,78806],{"class":82},"      flex-wrap",[68,78808,51638],{"class":335},[68,78810,78811],{"class":82},"wrap",[68,78813,1498],{"class":335},[68,78815,78816],{"class":70,"line":1900},[68,78817,2393],{"class":335},[68,78819,78820],{"class":70,"line":1905},[68,78821,2606],{"emptyLinePlaceholder":260},[68,78823,78824,78827],{"class":70,"line":1934},[68,78825,78826],{"class":74},"    .item",[68,78828,15777],{"class":335},[68,78830,78831,78833,78835,78838,78840],{"class":70,"line":1939},[68,78832,54972],{"class":82},[68,78834,51638],{"class":335},[68,78836,78837],{"class":82},"240",[68,78839,51693],{"class":331},[68,78841,1498],{"class":335},[68,78843,78844,78846,78848,78850,78852],{"class":70,"line":1956},[68,78845,62201],{"class":82},[68,78847,51638],{"class":335},[68,78849,779],{"class":82},[68,78851,51693],{"class":331},[68,78853,1498],{"class":335},[68,78855,78856,78858,78860,78862,78864,78867,78869],{"class":70,"line":1961},[68,78857,54896],{"class":82},[68,78859,51638],{"class":335},[68,78861,1033],{"class":82},[68,78863,51693],{"class":331},[68,78865,78866],{"class":82}," 30",[68,78868,51693],{"class":331},[68,78870,1498],{"class":335},[68,78872,78873,78875,78877,78879,78882,78885,78887],{"class":70,"line":1966},[68,78874,62061],{"class":82},[68,78876,51638],{"class":335},[68,78878,28325],{"class":82},[68,78880,78881],{"class":82}," ease",[68,78883,78884],{"class":82}," .5",[68,78886,1028],{"class":331},[68,78888,1498],{"class":335},[68,78890,78891,78894,78896,78898,78900],{"class":70,"line":1971},[68,78892,78893],{"class":82},"      margin-bottom",[68,78895,51638],{"class":335},[68,78897,1033],{"class":82},[68,78899,51693],{"class":331},[68,78901,1498],{"class":335},[68,78903,78904],{"class":70,"line":1985},[68,78905,2393],{"class":335},[68,78907,78908],{"class":70,"line":1990},[68,78909,2606],{"emptyLinePlaceholder":260},[68,78911,78912,78915,78917,78920],{"class":70,"line":2783},[68,78913,78914],{"class":74},"    .item:nth-child",[68,78916,336],{"class":335},[68,78918,78919],{"class":82},"4n",[68,78921,12647],{"class":335},[68,78923,78924,78926,78928,78930],{"class":70,"line":2797},[68,78925,62201],{"class":82},[68,78927,51638],{"class":335},[68,78929,525],{"class":82},[68,78931,1498],{"class":335},[68,78933,78934],{"class":70,"line":2805},[68,78935,2393],{"class":335},[68,78937,78938],{"class":70,"line":2810},[68,78939,2606],{"emptyLinePlaceholder":260},[68,78941,78942,78945],{"class":70,"line":2816},[68,78943,78944],{"class":74},"    .item:hover",[68,78946,15777],{"class":335},[68,78948,78949,78952,78954,78956,78958,78960,78962,78964,78966,78969,78971,78973,78975,78977,78979,78981,78983,78986],{"class":70,"line":2822},[68,78950,78951],{"class":82},"      box-shadow",[68,78953,51638],{"class":335},[68,78955,525],{"class":82},[68,78957,51693],{"class":331},[68,78959,4299],{"class":82},[68,78961,51693],{"class":331},[68,78963,2354],{"class":82},[68,78965,51693],{"class":331},[68,78967,78968],{"class":82}," rgba",[68,78970,336],{"class":335},[68,78972,525],{"class":82},[68,78974,12640],{"class":335},[68,78976,525],{"class":82},[68,78978,12640],{"class":335},[68,78980,525],{"class":82},[68,78982,12640],{"class":335},[68,78984,78985],{"class":82},".2",[68,78987,2925],{"class":335},[68,78989,78990,78993,78995,78998,79000,79002,79004,79007,79009,79011,79013],{"class":70,"line":2827},[68,78991,78992],{"class":82},"      transform",[68,78994,51638],{"class":335},[68,78996,78997],{"class":82},"translate3d",[68,78999,336],{"class":335},[68,79001,525],{"class":82},[68,79003,12640],{"class":335},[68,79005,79006],{"class":82},"-4",[68,79008,51693],{"class":331},[68,79010,12640],{"class":335},[68,79012,525],{"class":82},[68,79014,2925],{"class":335},[68,79016,79017,79019,79021,79023],{"class":70,"line":8153},[68,79018,62226],{"class":82},[68,79020,51638],{"class":335},[68,79022,62231],{"class":82},[68,79024,1498],{"class":335},[68,79026,79027],{"class":70,"line":8177},[68,79028,2393],{"class":335},[68,79030,79031],{"class":70,"line":8182},[68,79032,2606],{"emptyLinePlaceholder":260},[68,79034,79035,79037,79039],{"class":70,"line":8188},[68,79036,78826],{"class":74},[68,79038,55816],{"class":51501},[68,79040,15777],{"class":335},[68,79042,79043,79045,79047,79049,79051],{"class":70,"line":8215},[68,79044,54972],{"class":82},[68,79046,51638],{"class":335},[68,79048,644],{"class":82},[68,79050,661],{"class":331},[68,79052,1498],{"class":335},[68,79054,79055],{"class":70,"line":8220},[68,79056,2393],{"class":335},[68,79058,79059],{"class":70,"line":8226},[68,79060,2606],{"emptyLinePlaceholder":260},[68,79062,79063,79065,79067],{"class":70,"line":8238},[68,79064,78826],{"class":74},[68,79066,62505],{"class":74},[68,79068,15777],{"class":335},[68,79070,79071,79073,79075,79077,79079],{"class":70,"line":8250},[68,79072,55123],{"class":82},[68,79074,51638],{"class":335},[68,79076,983],{"class":82},[68,79078,51693],{"class":331},[68,79080,1498],{"class":335},[68,79082,79083,79085,79087,79089,79091],{"class":70,"line":8262},[68,79084,78893],{"class":82},[68,79086,51638],{"class":335},[68,79088,779],{"class":82},[68,79090,51693],{"class":331},[68,79092,1498],{"class":335},[68,79094,79095,79097,79099,79102],{"class":70,"line":9921},[68,79096,57617],{"class":82},[68,79098,51638],{"class":335},[68,79100,79101],{"class":82},"#666",[68,79103,1498],{"class":335},[68,79105,79106],{"class":70,"line":9946},[68,79107,2393],{"class":335},[68,79109,79110],{"class":70,"line":9969},[68,79111,2606],{"emptyLinePlaceholder":260},[68,79113,79114,79116,79119],{"class":70,"line":9993},[68,79115,78826],{"class":74},[68,79117,79118],{"class":74}," .price",[68,79120,15777],{"class":335},[68,79122,79123,79125,79127,79129,79131],{"class":70,"line":9998},[68,79124,55123],{"class":82},[68,79126,51638],{"class":335},[68,79128,1083],{"class":82},[68,79130,51693],{"class":331},[68,79132,1498],{"class":335},[68,79134,79135,79137,79139,79142],{"class":70,"line":10003},[68,79136,57617],{"class":82},[68,79138,51638],{"class":335},[68,79140,79141],{"class":82},"firebrick",[68,79143,1498],{"class":335},[68,79145,79146],{"class":70,"line":10008},[68,79147,2393],{"class":335},[68,79149,79150],{"class":70,"line":10017},[68,79151,2606],{"emptyLinePlaceholder":260},[68,79153,79154,79156,79159],{"class":70,"line":10022},[68,79155,78826],{"class":74},[68,79157,79158],{"class":74}," .price::before",[68,79160,15777],{"class":335},[68,79162,79163,79166,79168,79171],{"class":70,"line":10028},[68,79164,79165],{"class":82},"      content",[68,79167,51638],{"class":335},[68,79169,79170],{"class":78},"'￥'",[68,79172,1498],{"class":335},[68,79174,79175,79177,79179,79181,79183],{"class":70,"line":10049},[68,79176,55123],{"class":82},[68,79178,51638],{"class":335},[68,79180,882],{"class":82},[68,79182,51693],{"class":331},[68,79184,1498],{"class":335},[68,79186,79187],{"class":70,"line":10055},[68,79188,2393],{"class":335},[68,79190,79191],{"class":70,"line":10069},[68,79192,2606],{"emptyLinePlaceholder":260},[68,79194,79195,79198],{"class":70,"line":10075},[68,79196,79197],{"class":74},"    .filter",[68,79199,15777],{"class":335},[68,79201,79202,79204,79206,79208],{"class":70,"line":10102},[68,79203,55210],{"class":82},[68,79205,51638],{"class":335},[68,79207,51678],{"class":82},[68,79209,1498],{"class":335},[68,79211,79212,79214,79216,79218,79220],{"class":70,"line":10111},[68,79213,54972],{"class":82},[68,79215,51638],{"class":335},[68,79217,78775],{"class":82},[68,79219,51693],{"class":331},[68,79221,1498],{"class":335},[68,79223,79224,79226,79228,79230,79232],{"class":70,"line":10117},[68,79225,54907],{"class":82},[68,79227,51638],{"class":335},[68,79229,525],{"class":82},[68,79231,51757],{"class":82},[68,79233,1498],{"class":335},[68,79235,79236,79238,79240,79242,79244,79246],{"class":70,"line":10125},[68,79237,54896],{"class":82},[68,79239,51638],{"class":335},[68,79241,989],{"class":82},[68,79243,51693],{"class":331},[68,79245,78866],{"class":82},[68,79247,79248],{"class":331},"px\n",[68,79250,79251],{"class":70,"line":10130},[68,79252,2393],{"class":335},[68,79254,79255],{"class":70,"line":16809},[68,79256,2606],{"emptyLinePlaceholder":260},[68,79258,79259,79261,79263],{"class":70,"line":16815},[68,79260,79197],{"class":74},[68,79262,1606],{"class":51501},[68,79264,15777],{"class":335},[68,79266,79267,79269,79271,79273,79275,79277,79279],{"class":70,"line":16838},[68,79268,54896],{"class":82},[68,79270,51638],{"class":335},[68,79272,779],{"class":82},[68,79274,51693],{"class":331},[68,79276,9155],{"class":82},[68,79278,51693],{"class":331},[68,79280,1498],{"class":335},[68,79282,79283,79285,79287,79289],{"class":70,"line":16844},[68,79284,61922],{"class":82},[68,79286,51638],{"class":335},[68,79288,62019],{"class":82},[68,79290,1498],{"class":335},[68,79292,79293,79295,79297,79299],{"class":70,"line":16867},[68,79294,57617],{"class":82},[68,79296,51638],{"class":335},[68,79298,79101],{"class":82},[68,79300,1498],{"class":335},[68,79302,79303,79305,79307,79309],{"class":70,"line":16881},[68,79304,64171],{"class":82},[68,79306,51638],{"class":335},[68,79308,54938],{"class":82},[68,79310,1498],{"class":335},[68,79312,79313,79315,79317,79319,79321],{"class":70,"line":16901},[68,79314,61951],{"class":82},[68,79316,51638],{"class":335},[68,79318,1033],{"class":82},[68,79320,51693],{"class":331},[68,79322,1498],{"class":335},[68,79324,79325],{"class":70,"line":16907},[68,79326,2393],{"class":335},[68,79328,79329],{"class":70,"line":16918},[68,79330,2606],{"emptyLinePlaceholder":260},[68,79332,79333,79335,79337,79339],{"class":70,"line":16941},[68,79334,79197],{"class":74},[68,79336,1606],{"class":51501},[68,79338,62101],{"class":74},[68,79340,15777],{"class":335},[68,79342,79343,79345,79347,79350],{"class":70,"line":16963},[68,79344,55085],{"class":82},[68,79346,51638],{"class":335},[68,79348,79349],{"class":82},"#05943c",[68,79351,1498],{"class":335},[68,79353,79354,79356,79358,79360],{"class":70,"line":16968},[68,79355,57617],{"class":82},[68,79357,51638],{"class":335},[68,79359,61043],{"class":82},[68,79361,1498],{"class":335},[68,79363,79364],{"class":70,"line":16974},[68,79365,2393],{"class":335},[68,79367,79368,79370,79372],{"class":70,"line":16988},[68,79369,52618],{"class":335},[68,79371,250],{"class":51501},[68,79373,51508],{"class":335},[68,79375,79376,79378,79380],{"class":70,"line":17001},[68,79377,51986],{"class":335},[68,79379,51535],{"class":51501},[68,79381,51508],{"class":335},[68,79383,79384],{"class":70,"line":17006},[68,79385,2606],{"emptyLinePlaceholder":260},[68,79387,79388,79390,79392],{"class":70,"line":17020},[68,79389,1243],{"class":335},[68,79391,52001],{"class":51501},[68,79393,51508],{"class":335},[68,79395,79396,79398,79400,79402,79404,79407],{"class":70,"line":17025},[68,79397,52345],{"class":335},[68,79399,51812],{"class":51501},[68,79401,53687],{"class":74},[68,79403,381],{"class":335},[68,79405,79406],{"class":78},"\"filter\"",[68,79408,51508],{"class":335},[68,79410,79411,79413,79415,79417,79419,79421,79424,79426,79428,79431,79433],{"class":70,"line":17031},[68,79412,51542],{"class":335},[68,79414,30],{"class":51501},[68,79416,61258],{"class":74},[68,79418,381],{"class":335},[68,79420,61263],{"class":78},[68,79422,79423],{"class":74}," data-index",[68,79425,381],{"class":335},[68,79427,3884],{"class":78},[68,79429,79430],{"class":335},">0-100元\u003C\u002F",[68,79432,30],{"class":51501},[68,79434,51508],{"class":335},[68,79436,79437,79439,79441,79443,79445,79447,79449,79451,79453,79456,79458],{"class":70,"line":17036},[68,79438,51542],{"class":335},[68,79440,30],{"class":51501},[68,79442,61258],{"class":74},[68,79444,381],{"class":335},[68,79446,61263],{"class":78},[68,79448,79423],{"class":74},[68,79450,381],{"class":335},[68,79452,3907],{"class":78},[68,79454,79455],{"class":335},">100-300元\u003C\u002F",[68,79457,30],{"class":51501},[68,79459,51508],{"class":335},[68,79461,79462,79464,79466,79468,79470,79472,79474,79476,79478,79481,79483],{"class":70,"line":17050},[68,79463,51542],{"class":335},[68,79465,30],{"class":51501},[68,79467,61258],{"class":74},[68,79469,381],{"class":335},[68,79471,61263],{"class":78},[68,79473,79423],{"class":74},[68,79475,381],{"class":335},[68,79477,3920],{"class":78},[68,79479,79480],{"class":335},">300元以上\u003C\u002F",[68,79482,30],{"class":51501},[68,79484,51508],{"class":335},[68,79486,79487,79489,79491,79493,79495,79497,79500,79502],{"class":70,"line":17055},[68,79488,51542],{"class":335},[68,79490,30],{"class":51501},[68,79492,61258],{"class":74},[68,79494,381],{"class":335},[68,79496,61263],{"class":78},[68,79498,79499],{"class":335},">全部区间\u003C\u002F",[68,79501,30],{"class":51501},[68,79503,51508],{"class":335},[68,79505,79506,79508,79510],{"class":70,"line":17060},[68,79507,52618],{"class":335},[68,79509,51812],{"class":51501},[68,79511,51508],{"class":335},[68,79513,79514,79516,79518,79520,79522,79524],{"class":70,"line":17074},[68,79515,52345],{"class":335},[68,79517,51812],{"class":51501},[68,79519,53687],{"class":74},[68,79521,381],{"class":335},[68,79523,62809],{"class":78},[68,79525,51508],{"class":335},[68,79527,79528],{"class":70,"line":17086},[68,79529,79530],{"class":393},"    \u003C!-- \u003Cdiv class=\"item\">\n",[68,79532,79533],{"class":70,"line":17091},[68,79534,79535],{"class":393},"      \u003Cimg src=\"\" alt=\"\">\n",[68,79537,79538],{"class":70,"line":17104},[68,79539,79540],{"class":393},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[68,79542,79543],{"class":70,"line":17109},[68,79544,79545],{"class":393},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[68,79547,79548],{"class":70,"line":17114},[68,79549,79550],{"class":393},"    \u003C\u002Fdiv> -->\n",[68,79552,79553,79555,79557],{"class":70,"line":17119},[68,79554,52618],{"class":335},[68,79556,51812],{"class":51501},[68,79558,51508],{"class":335},[68,79560,79561,79563,79565],{"class":70,"line":17132},[68,79562,52345],{"class":335},[68,79564,52014],{"class":51501},[68,79566,51508],{"class":335},[68,79568,79569],{"class":70,"line":17137},[68,79570,79571],{"class":393},"    \u002F\u002F 2. 初始化数据\n",[68,79573,79574,79576,79579,79581],{"class":70,"line":32834},[68,79575,11426],{"class":331},[68,79577,79578],{"class":82}," goodsList",[68,79580,13769],{"class":331},[68,79582,55648],{"class":335},[68,79584,79585],{"class":70,"line":32840},[68,79586,79587],{"class":335},"      {\n",[68,79589,79590,79593,79596],{"class":70,"line":32846},[68,79591,79592],{"class":335},"        id: ",[68,79594,79595],{"class":78},"'4001172'",[68,79597,31667],{"class":335},[68,79599,79600,79603,79606],{"class":70,"line":32852},[68,79601,79602],{"class":335},"        name: ",[68,79604,79605],{"class":78},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[68,79607,31667],{"class":335},[68,79609,79610,79613,79616],{"class":70,"line":32858},[68,79611,79612],{"class":335},"        price: ",[68,79614,79615],{"class":78},"'289.00'",[68,79617,31667],{"class":335},[68,79619,79620,79623,79626],{"class":70,"line":32869},[68,79621,79622],{"class":335},"        picture: ",[68,79624,79625],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[68,79627,31667],{"class":335},[68,79629,79630],{"class":70,"line":32875},[68,79631,78093],{"class":335},[68,79633,79634],{"class":70,"line":32895},[68,79635,79587],{"class":335},[68,79637,79638,79640,79643],{"class":70,"line":32901},[68,79639,79592],{"class":335},[68,79641,79642],{"class":78},"'4001594'",[68,79644,31667],{"class":335},[68,79646,79647,79649,79652],{"class":70,"line":32912},[68,79648,79602],{"class":335},[68,79650,79651],{"class":78},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[68,79653,31667],{"class":335},[68,79655,79656,79658,79661],{"class":70,"line":32918},[68,79657,79612],{"class":335},[68,79659,79660],{"class":78},"'288.00'",[68,79662,31667],{"class":335},[68,79664,79665,79667,79670],{"class":70,"line":32924},[68,79666,79622],{"class":335},[68,79668,79669],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[68,79671,31667],{"class":335},[68,79673,79674],{"class":70,"line":32930},[68,79675,78093],{"class":335},[68,79677,79678],{"class":70,"line":32936},[68,79679,79587],{"class":335},[68,79681,79682,79684,79687],{"class":70,"line":32942},[68,79683,79592],{"class":335},[68,79685,79686],{"class":78},"'4001009'",[68,79688,31667],{"class":335},[68,79690,79691,79693,79696],{"class":70,"line":32948},[68,79692,79602],{"class":335},[68,79694,79695],{"class":78},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[68,79697,31667],{"class":335},[68,79699,79700,79702,79705],{"class":70,"line":32954},[68,79701,79612],{"class":335},[68,79703,79704],{"class":78},"'109.00'",[68,79706,31667],{"class":335},[68,79708,79709,79711,79714],{"class":70,"line":32974},[68,79710,79622],{"class":335},[68,79712,79713],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[68,79715,31667],{"class":335},[68,79717,79718],{"class":70,"line":32980},[68,79719,78093],{"class":335},[68,79721,79722],{"class":70,"line":32996},[68,79723,79587],{"class":335},[68,79725,79726,79728,79731],{"class":70,"line":33002},[68,79727,79592],{"class":335},[68,79729,79730],{"class":78},"'4001874'",[68,79732,31667],{"class":335},[68,79734,79735,79737,79740],{"class":70,"line":33016},[68,79736,79602],{"class":335},[68,79738,79739],{"class":78},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[68,79741,31667],{"class":335},[68,79743,79744,79746,79749],{"class":70,"line":33022},[68,79745,79612],{"class":335},[68,79747,79748],{"class":78},"'488.00'",[68,79750,31667],{"class":335},[68,79752,79753,79755,79758],{"class":70,"line":33037},[68,79754,79622],{"class":335},[68,79756,79757],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[68,79759,31667],{"class":335},[68,79761,79762],{"class":70,"line":33043},[68,79763,78093],{"class":335},[68,79765,79766],{"class":70,"line":33052},[68,79767,79587],{"class":335},[68,79769,79770,79772,79775],{"class":70,"line":33058},[68,79771,79592],{"class":335},[68,79773,79774],{"class":78},"'4001649'",[68,79776,31667],{"class":335},[68,79778,79779,79781,79784],{"class":70,"line":33067},[68,79780,79602],{"class":335},[68,79782,79783],{"class":78},"'大师监制龙泉青瓷茶叶罐'",[68,79785,31667],{"class":335},[68,79787,79788,79790,79793],{"class":70,"line":33073},[68,79789,79612],{"class":335},[68,79791,79792],{"class":78},"'139.00'",[68,79794,31667],{"class":335},[68,79796,79797,79799,79802],{"class":70,"line":33079},[68,79798,79622],{"class":335},[68,79800,79801],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[68,79803,31667],{"class":335},[68,79805,79806],{"class":70,"line":33088},[68,79807,78093],{"class":335},[68,79809,79810],{"class":70,"line":33094},[68,79811,79587],{"class":335},[68,79813,79814,79816,79819],{"class":70,"line":33105},[68,79815,79592],{"class":335},[68,79817,79818],{"class":78},"'3997185'",[68,79820,31667],{"class":335},[68,79822,79823,79825,79828],{"class":70,"line":33111},[68,79824,79602],{"class":335},[68,79826,79827],{"class":78},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[68,79829,31667],{"class":335},[68,79831,79832,79834,79837],{"class":70,"line":33130},[68,79833,79612],{"class":335},[68,79835,79836],{"class":78},"'108.00'",[68,79838,31667],{"class":335},[68,79840,79841,79843,79846],{"class":70,"line":33136},[68,79842,79622],{"class":335},[68,79844,79845],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[68,79847,31667],{"class":335},[68,79849,79850],{"class":70,"line":33147},[68,79851,78093],{"class":335},[68,79853,79854],{"class":70,"line":33153},[68,79855,79587],{"class":335},[68,79857,79858,79860,79863],{"class":70,"line":33173},[68,79859,79592],{"class":335},[68,79861,79862],{"class":78},"'3997403'",[68,79864,31667],{"class":335},[68,79866,79867,79869,79872],{"class":70,"line":33189},[68,79868,79602],{"class":335},[68,79870,79871],{"class":78},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[68,79873,31667],{"class":335},[68,79875,79876,79878,79881],{"class":70,"line":33195},[68,79877,79612],{"class":335},[68,79879,79880],{"class":78},"'100.00'",[68,79882,31667],{"class":335},[68,79884,79885,79887,79890],{"class":70,"line":33209},[68,79886,79622],{"class":335},[68,79888,79889],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[68,79891,31667],{"class":335},[68,79893,79894],{"class":70,"line":33215},[68,79895,78093],{"class":335},[68,79897,79898],{"class":70,"line":33221},[68,79899,79587],{"class":335},[68,79901,79902,79904,79907],{"class":70,"line":33232},[68,79903,79592],{"class":335},[68,79905,79906],{"class":78},"'3998274'",[68,79908,31667],{"class":335},[68,79910,79911,79913,79916],{"class":70,"line":33238},[68,79912,79602],{"class":335},[68,79914,79915],{"class":78},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[68,79917,31667],{"class":335},[68,79919,79920,79922,79924],{"class":70,"line":33244},[68,79921,79612],{"class":335},[68,79923,79792],{"class":78},[68,79925,31667],{"class":335},[68,79927,79928,79930,79933],{"class":70,"line":33254},[68,79929,79622],{"class":335},[68,79931,79932],{"class":78},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[68,79934,31667],{"class":335},[68,79936,79937],{"class":70,"line":33260},[68,79938,78093],{"class":335},[68,79940,79941],{"class":70,"line":33271},[68,79942,53310],{"class":335},[68,79944,79945],{"class":70,"line":33277},[68,79946,2606],{"emptyLinePlaceholder":260},[68,79948,79949],{"class":70,"line":33287},[68,79950,79951],{"class":393},"    \u002F\u002F 1.渲染函数\n",[68,79953,79954,79956,79958,79960,79962],{"class":70,"line":33292},[68,79955,70285],{"class":331},[68,79957,70288],{"class":74},[68,79959,336],{"class":335},[68,79961,4086],{"class":5421},[68,79963,12647],{"class":335},[68,79965,79966],{"class":70,"line":33298},[68,79967,79968],{"class":393},"      \u002F\u002F 声明空字符串\n",[68,79970,79971,79974,79977,79979],{"class":70,"line":33347},[68,79972,79973],{"class":331},"      let",[68,79975,79976],{"class":335}," str ",[68,79978,381],{"class":331},[68,79980,70305],{"class":78},[68,79982,79983],{"class":70,"line":33394},[68,79984,70310],{"class":393},[68,79986,79987,79989,79992,79994,79997,80000],{"class":70,"line":33399},[68,79988,58208],{"class":335},[68,79990,79991],{"class":74},"forEach",[68,79993,336],{"class":335},[68,79995,79996],{"class":5421},"item",[68,79998,79999],{"class":331}," =>",[68,80001,15777],{"class":335},[68,80003,80004,80006,80009,80012,80014,80017,80019,80022,80025,80027],{"class":70,"line":33405},[68,80005,61471],{"class":331},[68,80007,80008],{"class":335}," { ",[68,80010,80011],{"class":82},"name",[68,80013,12640],{"class":335},[68,80015,80016],{"class":82},"price",[68,80018,12640],{"class":335},[68,80020,80021],{"class":82},"picture",[68,80023,80024],{"class":335}," } ",[68,80026,381],{"class":331},[68,80028,80029],{"class":335}," item\n",[68,80031,80032,80035,80037],{"class":70,"line":33424},[68,80033,80034],{"class":335},"        str ",[68,80036,9682],{"class":331},[68,80038,70369],{"class":78},[68,80040,80041],{"class":70,"line":33430},[68,80042,80043],{"class":78},"          \u003Cdiv class=\"item\">\n",[68,80045,80046,80049,80051],{"class":70,"line":33450},[68,80047,80048],{"class":78},"            \u003Cimg src=\"${",[68,80050,80021],{"class":335},[68,80052,80053],{"class":78},"}\" alt=\"\">\n",[68,80055,80056,80059,80061],{"class":70,"line":33456},[68,80057,80058],{"class":78},"            \u003Cp class=\"name\">${",[68,80060,80011],{"class":335},[68,80062,80063],{"class":78},"}\u003C\u002Fp>\n",[68,80065,80066,80069,80071],{"class":70,"line":33462},[68,80067,80068],{"class":78},"            \u003Cp class=\"price\">${",[68,80070,80016],{"class":335},[68,80072,80063],{"class":78},[68,80074,80075],{"class":70,"line":33472},[68,80076,80077],{"class":78},"          \u003C\u002Fdiv>\n",[68,80079,80080],{"class":70,"line":33477},[68,80081,80082],{"class":78},"        `\n",[68,80084,80085],{"class":70,"line":33483},[68,80086,65016],{"class":335},[68,80088,80089],{"class":70,"line":33499},[68,80090,80091],{"class":393},"      \u002F\u002F 追加给List\n",[68,80093,80094,80096,80098,80100,80103,80105,80107],{"class":70,"line":33544},[68,80095,55972],{"class":335},[68,80097,54600],{"class":74},[68,80099,336],{"class":335},[68,80101,80102],{"class":78},"'.list'",[68,80104,74450],{"class":335},[68,80106,381],{"class":331},[68,80108,74186],{"class":335},[68,80110,80111],{"class":70,"line":33550},[68,80112,2393],{"class":335},[68,80114,80115],{"class":70,"line":33556},[68,80116,80117],{"class":393},"    \u002F\u002F 页面一打开就需要渲染\n",[68,80119,80120,80123],{"class":70,"line":33562},[68,80121,80122],{"class":74},"    render",[68,80124,80125],{"class":335},"(goodsList)\n",[68,80127,80128],{"class":70,"line":33573},[68,80129,80130],{"class":393},"    \u002F\u002F 2.过滤筛选\n",[68,80132,80133,80135,80137,80139,80142,80144,80146,80148,80150,80152,80154,80156],{"class":70,"line":33579},[68,80134,52608],{"class":335},[68,80136,54600],{"class":74},[68,80138,336],{"class":335},[68,80140,80141],{"class":78},"'.filter'",[68,80143,31027],{"class":335},[68,80145,58014],{"class":74},[68,80147,336],{"class":335},[68,80149,58019],{"class":78},[68,80151,12640],{"class":335},[68,80153,409],{"class":5421},[68,80155,79999],{"class":331},[68,80157,15777],{"class":335},[68,80159,80160],{"class":70,"line":33585},[68,80161,80162],{"class":393},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[68,80164,80165,80167,80169,80172,80174,80176,80178,80180],{"class":70,"line":33591},[68,80166,58429],{"class":331},[68,80168,80008],{"class":335},[68,80170,80171],{"class":82},"tagName",[68,80173,12640],{"class":335},[68,80175,31738],{"class":82},[68,80177,80024],{"class":335},[68,80179,381],{"class":331},[68,80181,80182],{"class":335}," e.target\n",[68,80184,80185],{"class":70,"line":33609},[68,80186,80187],{"class":393},"      \u002F\u002F 判断\n",[68,80189,80190,80192,80194,80196,80198],{"class":70,"line":33623},[68,80191,54681],{"class":331},[68,80193,67235],{"class":335},[68,80195,54687],{"class":331},[68,80197,68457],{"class":78},[68,80199,12647],{"class":335},[68,80201,80202],{"class":70,"line":33632},[68,80203,80204],{"class":393},"        \u002F\u002F console.log(11)\n",[68,80206,80207],{"class":70,"line":33641},[68,80208,80209],{"class":393},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[68,80211,80212],{"class":70,"line":33650},[68,80213,80214],{"class":393},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[68,80216,80217,80219,80221,80223],{"class":70,"line":33659},[68,80218,52031],{"class":331},[68,80220,52034],{"class":335},[68,80222,381],{"class":331},[68,80224,80225],{"class":335}," goodsList\n",[68,80227,80228,80230,80233,80235,80238],{"class":70,"line":33665},[68,80229,2703],{"class":331},[68,80231,80232],{"class":335}," (dataset.index ",[68,80234,54687],{"class":331},[68,80236,80237],{"class":78}," '1'",[68,80239,12647],{"class":335},[68,80241,80242,80245,80247,80250,80253,80255,80257,80259,80262,80264,80266,80269,80271,80273,80275],{"class":70,"line":33671},[68,80243,80244],{"class":335},"          arr ",[68,80246,381],{"class":331},[68,80248,80249],{"class":335}," goodsList.",[68,80251,80252],{"class":74},"filter",[68,80254,336],{"class":335},[68,80256,79996],{"class":5421},[68,80258,79999],{"class":331},[68,80260,80261],{"class":335}," item.price ",[68,80263,1917],{"class":331},[68,80265,4299],{"class":82},[68,80267,80268],{"class":331}," &&",[68,80270,80261],{"class":335},[68,80272,1795],{"class":331},[68,80274,5959],{"class":82},[68,80276,342],{"class":335},[68,80278,80279,80282,80284,80286,80288,80290,80293],{"class":70,"line":33679},[68,80280,80281],{"class":335},"        } ",[68,80283,1908],{"class":331},[68,80285,1911],{"class":331},[68,80287,80232],{"class":335},[68,80289,54687],{"class":331},[68,80291,80292],{"class":78}," '2'",[68,80294,12647],{"class":335},[68,80296,80297,80299,80301,80303,80305,80307,80309,80311,80313,80315,80317,80319,80321,80323,80326],{"class":70,"line":33684},[68,80298,80244],{"class":335},[68,80300,381],{"class":331},[68,80302,80249],{"class":335},[68,80304,80252],{"class":74},[68,80306,336],{"class":335},[68,80308,79996],{"class":5421},[68,80310,79999],{"class":331},[68,80312,80261],{"class":335},[68,80314,1917],{"class":331},[68,80316,5959],{"class":82},[68,80318,80268],{"class":331},[68,80320,80261],{"class":335},[68,80322,1795],{"class":331},[68,80324,80325],{"class":82}," 300",[68,80327,342],{"class":335},[68,80329,80330,80332,80334,80336,80338,80340,80343],{"class":70,"line":33690},[68,80331,80281],{"class":335},[68,80333,1908],{"class":331},[68,80335,1911],{"class":331},[68,80337,80232],{"class":335},[68,80339,54687],{"class":331},[68,80341,80342],{"class":78}," '3'",[68,80344,12647],{"class":335},[68,80346,80347,80349,80351,80353,80355,80357,80359,80361,80363,80365,80367],{"class":70,"line":33701},[68,80348,80244],{"class":335},[68,80350,381],{"class":331},[68,80352,80249],{"class":335},[68,80354,80252],{"class":74},[68,80356,336],{"class":335},[68,80358,79996],{"class":5421},[68,80360,79999],{"class":331},[68,80362,80261],{"class":335},[68,80364,1917],{"class":331},[68,80366,80325],{"class":82},[68,80368,342],{"class":335},[68,80370,80371],{"class":70,"line":33707},[68,80372,2735],{"class":335},[68,80374,80375],{"class":70,"line":33727},[68,80376,80377],{"class":393},"        \u002F\u002F 渲染函数\n",[68,80379,80380,80382],{"class":70,"line":33733},[68,80381,70609],{"class":74},[68,80383,52613],{"class":335},[68,80385,80386],{"class":70,"line":33739},[68,80387,52599],{"class":335},[68,80389,80390],{"class":70,"line":33745},[68,80391,2606],{"emptyLinePlaceholder":260},[68,80393,80394],{"class":70,"line":33762},[68,80395,33662],{"class":335},[68,80397,80398,80400,80402],{"class":70,"line":33768},[68,80399,52618],{"class":335},[68,80401,52014],{"class":51501},[68,80403,51508],{"class":335},[68,80405,80406,80408,80410],{"class":70,"line":33774},[68,80407,51986],{"class":335},[68,80409,52001],{"class":51501},[68,80411,51508],{"class":335},[68,80413,80414],{"class":70,"line":33780},[68,80415,2606],{"emptyLinePlaceholder":260},[68,80417,80418,80420,80422],{"class":70,"line":33786},[68,80419,51986],{"class":335},[68,80421,50836],{"class":51501},[68,80423,51508],{"class":335},[14,80425,80427],{"id":80426},"_410-深入了解对象","4.10 深入了解对象",[301,80429,80431],{"id":80430},"_4101-创建对象","4.10.1 创建对象",[19,80433,80434],{},[48,80435],{"alt":63,"src":80436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80438,80439],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[301,80441,80443],{"id":80442},"_4102-构造函数","4.10.2 构造函数",[19,80445,80446,80449],{},[483,80447,80448],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80451,80452,80455],{},[483,80453,80454],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[58,80457,80459],{"className":50834,"code":80458,"language":50836,"meta":63,"style":63},"\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",[65,80460,80461,80469,80474,80495,80508,80520,80532,80536,80541,80568,80573,80600],{"__ignoreMap":63},[68,80462,80463,80465,80467],{"class":70,"line":71},[68,80464,1243],{"class":335},[68,80466,52014],{"class":51501},[68,80468,51508],{"class":335},[68,80470,80471],{"class":70,"line":92},[68,80472,80473],{"class":393},"\u002F\u002F例：\n",[68,80475,80476,80478,80481,80483,80485,80487,80489,80491,80493],{"class":70,"line":1387},[68,80477,54650],{"class":331},[68,80479,80480],{"class":74}," Pig",[68,80482,336],{"class":335},[68,80484,80011],{"class":5421},[68,80486,711],{"class":335},[68,80488,70422],{"class":5421},[68,80490,711],{"class":335},[68,80492,70439],{"class":5421},[68,80494,12647],{"class":335},[68,80496,80497,80500,80503,80505],{"class":70,"line":1402},[68,80498,80499],{"class":82},"    this",[68,80501,80502],{"class":335},".name",[68,80504,381],{"class":331},[68,80506,80507],{"class":335},"name\n",[68,80509,80510,80512,80515,80517],{"class":70,"line":1408},[68,80511,80499],{"class":82},[68,80513,80514],{"class":335},".age",[68,80516,381],{"class":331},[68,80518,80519],{"class":335},"age\n",[68,80521,80522,80524,80527,80529],{"class":70,"line":1422},[68,80523,80499],{"class":82},[68,80525,80526],{"class":335},".gender",[68,80528,381],{"class":331},[68,80530,80531],{"class":335},"gender    \n",[68,80533,80534],{"class":70,"line":1428},[68,80535,1772],{"class":335},[68,80537,80538],{"class":70,"line":1519},[68,80539,80540],{"class":393},"\u002F\u002F创建佩奇对象\n",[68,80542,80543,80545,80548,80550,80552,80554,80557,80559,80561,80563,80566],{"class":70,"line":1525},[68,80544,6997],{"class":331},[68,80546,80547],{"class":82}," Peppa",[68,80549,11922],{"class":331},[68,80551,80480],{"class":74},[68,80553,336],{"class":335},[68,80555,80556],{"class":78},"'佩奇'",[68,80558,711],{"class":335},[68,80560,677],{"class":82},[68,80562,711],{"class":335},[68,80564,80565],{"class":78},"'女'",[68,80567,342],{"class":335},[68,80569,80570],{"class":70,"line":1537},[68,80571,80572],{"class":393},"\u002F\u002F创建乔治对象\n",[68,80574,80575,80577,80580,80582,80584,80586,80589,80591,80593,80595,80598],{"class":70,"line":1819},[68,80576,6997],{"class":331},[68,80578,80579],{"class":82}," George",[68,80581,11922],{"class":331},[68,80583,80480],{"class":74},[68,80585,336],{"class":335},[68,80587,80588],{"class":78},"'乔治'",[68,80590,711],{"class":335},[68,80592,406],{"class":82},[68,80594,711],{"class":335},[68,80596,80597],{"class":78},"'男'",[68,80599,342],{"class":335},[68,80601,80602,80604,80606],{"class":70,"line":1824},[68,80603,51986],{"class":335},[68,80605,52014],{"class":51501},[68,80607,51508],{"class":335},[19,80609,80610],{},[48,80611],{"alt":63,"src":80612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80614,80615],{},[48,80616],{"alt":63,"src":80617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80619,80620],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80622,80623],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80625,80626],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80628,80629],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80631,80632],{},"这里用等号是因为：对象.属性=值",[19,80634,80635],{},"①利用对象字面量创建对象",[19,80637,80638],{},"const o={",[19,80640,80641],{},"name:'pink'",[19,80643,80644],{},"} ②利用new Object创建对象",[19,80646,80647],{},"const o=new Object({name:'pink'})",[19,80649,80650],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80652,80653],{},"构造函数创建对象的执行过程：",[19,80655,80656],{},[48,80657],{"alt":63,"src":80658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[301,80660,80662],{"id":80661},"_4103-实例成员","4.10.3 实例成员",[19,80664,80665],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[23,80667,80668,80671,80674],{},[26,80669,80670],{},"实例对象的属性和方法即为实例成员",[26,80672,80673],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[26,80675,80676],{},"构造函数创建的实例对象彼此独立互不影响",[301,80678,80680],{"id":80679},"_4104-静态成员","4.10.4 静态成员",[19,80682,80683],{},[48,80684],{"alt":63,"src":80685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80687,80688],{},"静态成员有Date.now() Math.PI Math.random()",[19,80690,80691],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80693,80694],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80696,80697],{},"function Pig(name) n {",[19,80699,80700],{},"this.name=name",[19,80702,1279],{},[19,80704,80705],{},"Pig.eyes=2",[19,80707,80708],{},"Pig.sayHai=function () { console.log(this) }",[19,80710,80711],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80713,80714],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80716,11537],{},[23,80718,80719,80722,80725,80728,80731],{},[26,80720,80721],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[26,80723,80724],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[26,80726,80727],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[26,80729,80730],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[26,80732,80733],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80735,80736],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[301,80738,80740],{"id":80739},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80742,80743],{},"内置构造函数包含：",[19,80745,80746],{},[48,80747],{"alt":63,"src":80748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80750,80751],{},[48,80752],{"alt":63,"src":80753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80755,80756],{},"这些基本数据类型，js对他们进行了包装",[52014,80758,80759],{},"\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",[22203,80761,80763],{"id":80762},"_41051-object","4.10.5.1 Object",[19,80765,80766],{},"Object 是内置的构造函数，用于创建普通对象",[19,80768,80769],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[58,80771,80773],{"className":50834,"code":80772,"language":50836,"meta":63,"style":63},"const user=new Object({name:'小明',age:15})\n",[65,80774,80775],{"__ignoreMap":63},[68,80776,80777],{"class":70,"line":71},[68,80778,80772],{"class":335},[19,80780,80781],{},"三个常用的静态方法：",[23115,80783,80785],{"id":80784},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80787,80788],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80790,80791],{},[48,80792],{"alt":63,"src":80793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80795,80796],{},[48,80797],{"alt":63,"src":80798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[58,80800,80802],{"className":53268,"code":80801,"language":53270,"meta":63,"style":63},"\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",[65,80803,80804,80812,80820,80825,80830,80835,80840,80845,80850,80858],{"__ignoreMap":63},[68,80805,80806,80808,80810],{"class":70,"line":71},[68,80807,1243],{"class":335},[68,80809,52001],{"class":51501},[68,80811,51508],{"class":335},[68,80813,80814,80816,80818],{"class":70,"line":92},[68,80815,52345],{"class":335},[68,80817,52014],{"class":51501},[68,80819,51508],{"class":335},[68,80821,80822],{"class":70,"line":1387},[68,80823,80824],{"class":335},"    const o = { name: 'pink', age: 6 }\n",[68,80826,80827],{"class":70,"line":1402},[68,80828,80829],{"class":335},"    \u002F\u002F 获得所有属性名\n",[68,80831,80832],{"class":70,"line":1408},[68,80833,80834],{"class":335},"    const arr = Object.keys(o)\n",[68,80836,80837],{"class":70,"line":1422},[68,80838,80839],{"class":335},"    console.log(arr)\n",[68,80841,80842],{"class":70,"line":1428},[68,80843,80844],{"class":335},"    \u002F\u002F 获得所有属性值\n",[68,80846,80847],{"class":70,"line":1519},[68,80848,80849],{"class":335},"    console.log(Object.values(o))\n",[68,80851,80852,80854,80856],{"class":70,"line":1525},[68,80853,52618],{"class":335},[68,80855,52014],{"class":51501},[68,80857,51508],{"class":335},[68,80859,80860,80862,80864],{"class":70,"line":1537},[68,80861,51986],{"class":335},[68,80863,52001],{"class":51501},[68,80865,51508],{"class":335},[23115,80867,80869],{"id":80868},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80871,80872],{},"Object.assign(oo,o)",[19,80874,80875],{},"后的东西添加给前 是追加",[19,80877,80878],{},[48,80879],{"alt":63,"src":80880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80882,80883],{},[48,80884],{"alt":63,"src":80885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[58,80887,80889],{"className":53268,"code":80888,"language":53270,"meta":63,"style":63},"\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",[65,80890,80891,80899,80907,80911,80915,80919,80923,80927,80931,80936,80941,80946,80951,80956,80964],{"__ignoreMap":63},[68,80892,80893,80895,80897],{"class":70,"line":71},[68,80894,1243],{"class":335},[68,80896,52001],{"class":51501},[68,80898,51508],{"class":335},[68,80900,80901,80903,80905],{"class":70,"line":92},[68,80902,52345],{"class":335},[68,80904,52014],{"class":51501},[68,80906,51508],{"class":335},[68,80908,80909],{"class":70,"line":1387},[68,80910,80824],{"class":335},[68,80912,80913],{"class":70,"line":1402},[68,80914,80829],{"class":335},[68,80916,80917],{"class":70,"line":1408},[68,80918,80834],{"class":335},[68,80920,80921],{"class":70,"line":1422},[68,80922,80839],{"class":335},[68,80924,80925],{"class":70,"line":1428},[68,80926,80844],{"class":335},[68,80928,80929],{"class":70,"line":1519},[68,80930,80849],{"class":335},[68,80932,80933],{"class":70,"line":1525},[68,80934,80935],{"class":335},"    const oo = {}\n",[68,80937,80938],{"class":70,"line":1537},[68,80939,80940],{"class":335},"    Object.assign(oo, o)\n",[68,80942,80943],{"class":70,"line":1819},[68,80944,80945],{"class":335},"    console.log(oo)\n",[68,80947,80948],{"class":70,"line":1824},[68,80949,80950],{"class":335},"    Object.assign(o, { gender: '女' })\n",[68,80952,80953],{"class":70,"line":1830},[68,80954,80955],{"class":335},"    console.log(o)\n",[68,80957,80958,80960,80962],{"class":70,"line":1835},[68,80959,52618],{"class":335},[68,80961,52014],{"class":51501},[68,80963,51508],{"class":335},[68,80965,80966,80968,80970],{"class":70,"line":1849},[68,80967,51986],{"class":335},[68,80969,52001],{"class":51501},[68,80971,51508],{"class":335},[19,80973,80974],{},[48,80975],{"alt":63,"src":80976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22203,80978,80980],{"id":80979},"_41052-array","4.10.5.2 Array",[19,80982,80983],{},"Array 是内置的构造函数，用于创建数组",[19,80985,80986],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[58,80988,80990],{"className":50834,"code":80989,"language":50836,"meta":63,"style":63},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[65,80991,80992,80997],{"__ignoreMap":63},[68,80993,80994],{"class":70,"line":71},[68,80995,80996],{"class":335},"const arr=new Array(3,5)\n",[68,80998,80999],{"class":70,"line":92},[68,81000,81001],{"class":335},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81003,81004],{},"Array的实例方法，这个方法是实例成员",[19,81006,81007],{},[48,81008],{"alt":63,"src":81009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23115,81011,81013],{"id":81012},"_410521-reduce","4.10.5.2.1 reduce",[19,81015,81016],{},[48,81017],{"alt":63,"src":81018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[58,81020,81022],{"className":53268,"code":81021,"language":53270,"meta":63,"style":63},"\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",[65,81023,81024,81032,81040,81045,81050,81055,81060,81064,81069,81074,81079,81083,81088,81093,81097,81102,81107,81112,81120],{"__ignoreMap":63},[68,81025,81026,81028,81030],{"class":70,"line":71},[68,81027,1243],{"class":335},[68,81029,52001],{"class":51501},[68,81031,51508],{"class":335},[68,81033,81034,81036,81038],{"class":70,"line":92},[68,81035,52345],{"class":335},[68,81037,52014],{"class":51501},[68,81039,51508],{"class":335},[68,81041,81042],{"class":70,"line":1387},[68,81043,81044],{"class":335},"    const arr = [1, 5, 8]\n",[68,81046,81047],{"class":70,"line":1402},[68,81048,81049],{"class":335},"    \u002F\u002F 1.没有初始值\n",[68,81051,81052],{"class":70,"line":1408},[68,81053,81054],{"class":335},"    const total = arr.reduce(function (prev, current) {\n",[68,81056,81057],{"class":70,"line":1422},[68,81058,81059],{"class":335},"      return prev + current\n",[68,81061,81062],{"class":70,"line":1428},[68,81063,33662],{"class":335},[68,81065,81066],{"class":70,"line":1519},[68,81067,81068],{"class":335},"    console.log(total)   \u002F\u002F14\n",[68,81070,81071],{"class":70,"line":1525},[68,81072,81073],{"class":335},"    \u002F\u002F 2.有初始值\n",[68,81075,81076],{"class":70,"line":1537},[68,81077,81078],{"class":335},"    const total1 = arr.reduce(function (prev, current) {\n",[68,81080,81081],{"class":70,"line":1819},[68,81082,81059],{"class":335},[68,81084,81085],{"class":70,"line":1824},[68,81086,81087],{"class":335},"    }, 10)\n",[68,81089,81090],{"class":70,"line":1830},[68,81091,81092],{"class":335},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[68,81094,81095],{"class":70,"line":1835},[68,81096,2606],{"emptyLinePlaceholder":260},[68,81098,81099],{"class":70,"line":1849},[68,81100,81101],{"class":335},"    \u002F\u002F 3.箭头函数写法\n",[68,81103,81104],{"class":70,"line":1854},[68,81105,81106],{"class":335},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[68,81108,81109],{"class":70,"line":1860},[68,81110,81111],{"class":335},"    console.log(total2)   \u002F\u002F24\n",[68,81113,81114,81116,81118],{"class":70,"line":1881},[68,81115,52618],{"class":335},[68,81117,52014],{"class":51501},[68,81119,51508],{"class":335},[68,81121,81122,81124,81126],{"class":70,"line":1886},[68,81123,51986],{"class":335},[68,81125,52001],{"class":51501},[68,81127,51508],{"class":335},[19,81129,81130],{},"执行过程：",[23,81132,81133,81136,81139],{},[26,81134,81135],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[26,81137,81138],{},"每一次循环，把返回值给作为下一次循环的上一次值",[26,81140,81141],{},"如果有起始值，则起始值作为上一次值",[58,81143,81145],{"className":53268,"code":81144,"language":53270,"meta":63,"style":63},"\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",[65,81146,81147,81155,81163,81167,81171,81175,81179,81183,81187,81192,81197,81202,81207,81212,81216,81220,81224,81228,81232,81236,81241,81245,81250,81254,81259,81264,81268,81272,81276,81284],{"__ignoreMap":63},[68,81148,81149,81151,81153],{"class":70,"line":71},[68,81150,1243],{"class":335},[68,81152,52001],{"class":51501},[68,81154,51508],{"class":335},[68,81156,81157,81159,81161],{"class":70,"line":92},[68,81158,52345],{"class":335},[68,81160,52014],{"class":51501},[68,81162,51508],{"class":335},[68,81164,81165],{"class":70,"line":1387},[68,81166,81044],{"class":335},[68,81168,81169],{"class":70,"line":1402},[68,81170,81049],{"class":335},[68,81172,81173],{"class":70,"line":1408},[68,81174,81054],{"class":335},[68,81176,81177],{"class":70,"line":1422},[68,81178,81059],{"class":335},[68,81180,81181],{"class":70,"line":1428},[68,81182,33662],{"class":335},[68,81184,81185],{"class":70,"line":1519},[68,81186,81068],{"class":335},[68,81188,81189],{"class":70,"line":1525},[68,81190,81191],{"class":335},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[68,81193,81194],{"class":70,"line":1537},[68,81195,81196],{"class":335},"    \u002F\u002F     1              5                    6\n",[68,81198,81199],{"class":70,"line":1819},[68,81200,81201],{"class":335},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[68,81203,81204],{"class":70,"line":1824},[68,81205,81206],{"class":335},"    \u002F\u002F     6              8                    14\n",[68,81208,81209],{"class":70,"line":1830},[68,81210,81211],{"class":335},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[68,81213,81214],{"class":70,"line":1835},[68,81215,81073],{"class":335},[68,81217,81218],{"class":70,"line":1849},[68,81219,81078],{"class":335},[68,81221,81222],{"class":70,"line":1854},[68,81223,81059],{"class":335},[68,81225,81226],{"class":70,"line":1860},[68,81227,81087],{"class":335},[68,81229,81230],{"class":70,"line":1881},[68,81231,81092],{"class":335},[68,81233,81234],{"class":70,"line":1886},[68,81235,81191],{"class":335},[68,81237,81238],{"class":70,"line":1900},[68,81239,81240],{"class":335},"    \u002F\u002F     10             1                     11\n",[68,81242,81243],{"class":70,"line":1905},[68,81244,81201],{"class":335},[68,81246,81247],{"class":70,"line":1934},[68,81248,81249],{"class":335},"    \u002F\u002F     11             5                    16\n",[68,81251,81252],{"class":70,"line":1939},[68,81253,81201],{"class":335},[68,81255,81256],{"class":70,"line":1956},[68,81257,81258],{"class":335},"    \u002F\u002F     16             8                    24\n",[68,81260,81261],{"class":70,"line":1961},[68,81262,81263],{"class":335},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[68,81265,81266],{"class":70,"line":1966},[68,81267,81101],{"class":335},[68,81269,81270],{"class":70,"line":1971},[68,81271,81106],{"class":335},[68,81273,81274],{"class":70,"line":1985},[68,81275,81111],{"class":335},[68,81277,81278,81280,81282],{"class":70,"line":1990},[68,81279,52618],{"class":335},[68,81281,52014],{"class":51501},[68,81283,51508],{"class":335},[68,81285,81286,81288,81290],{"class":70,"line":2783},[68,81287,51986],{"class":335},[68,81289,52001],{"class":51501},[68,81291,51508],{"class":335},[23115,81293,81295],{"id":81294},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81297,81298],{},[48,81299],{"alt":63,"src":81300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[58,81302,81304],{"className":53268,"code":81303,"language":53270,"meta":63,"style":63},"\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",[65,81305,81306,81314,81322,81327,81332,81337,81342,81346,81351,81356,81361,81366,81371,81376,81380,81385,81389,81394,81402],{"__ignoreMap":63},[68,81307,81308,81310,81312],{"class":70,"line":71},[68,81309,1243],{"class":335},[68,81311,52001],{"class":51501},[68,81313,51508],{"class":335},[68,81315,81316,81318,81320],{"class":70,"line":92},[68,81317,52345],{"class":335},[68,81319,52014],{"class":51501},[68,81321,51508],{"class":335},[68,81323,81324],{"class":70,"line":1387},[68,81325,81326],{"class":335},"    const arr = [\n",[68,81328,81329],{"class":70,"line":1402},[68,81330,81331],{"class":335},"      { name: '张三', salary: 10000 },\n",[68,81333,81334],{"class":70,"line":1408},[68,81335,81336],{"class":335},"      { name: '李四', salary: 10000 },\n",[68,81338,81339],{"class":70,"line":1422},[68,81340,81341],{"class":335},"      { name: '王五', salary: 10000 }\n",[68,81343,81344],{"class":70,"line":1428},[68,81345,53310],{"class":335},[68,81347,81348],{"class":70,"line":1519},[68,81349,81350],{"class":335},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[68,81352,81353],{"class":70,"line":1525},[68,81354,81355],{"class":335},"    \u002F\u002F prev是累计值\n",[68,81357,81358],{"class":70,"line":1537},[68,81359,81360],{"class":335},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[68,81362,81363],{"class":70,"line":1819},[68,81364,81365],{"class":335},"    console.log(total)\n",[68,81367,81368],{"class":70,"line":1824},[68,81369,81370],{"class":335},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[68,81372,81373],{"class":70,"line":1830},[68,81374,81375],{"class":335},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[68,81377,81378],{"class":70,"line":1835},[68,81379,81370],{"class":335},[68,81381,81382],{"class":70,"line":1849},[68,81383,81384],{"class":335},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[68,81386,81387],{"class":70,"line":1854},[68,81388,81370],{"class":335},[68,81390,81391],{"class":70,"line":1860},[68,81392,81393],{"class":335},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[68,81395,81396,81398,81400],{"class":70,"line":1881},[68,81397,52618],{"class":335},[68,81399,52014],{"class":51501},[68,81401,51508],{"class":335},[68,81403,81404,81406,81408],{"class":70,"line":1886},[68,81405,51986],{"class":335},[68,81407,52001],{"class":51501},[68,81409,51508],{"class":335},[23115,81411,81413],{"id":81412},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81415,81416],{},[48,81417],{"alt":63,"src":81418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81420,81421],{},[48,81422],{"alt":63,"src":81423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[23,81425,81426],{},[26,81427,81428],{},"find()",[19,81430,81431],{},"循环查找，找到第一个就ok",[19,81433,81434],{},[30,81435,81438],{"href":81436,"rel":81437},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[34],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[58,81440,81442],{"className":50834,"code":81441,"language":50836,"meta":63,"style":63},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[65,81443,81444,81449,81454],{"__ignoreMap":63},[68,81445,81446],{"class":70,"line":71},[68,81447,81448],{"class":335},"const array1 = [5, 12, 8, 130, 44]\n",[68,81450,81451],{"class":70,"line":92},[68,81452,81453],{"class":335},"const found = array1.find((element) => element > 10)\n",[68,81455,81456],{"class":70,"line":1387},[68,81457,81458],{"class":335},"console.log(found)  \u002F\u002F12\n",[19,81460,81461,81463,81464,81469,81470,81473,81474,81476,81477,81482,81483,81485,81486,81488,81489,81491,81492],{},[65,81462,81428],{}," 方法是一个",[30,81465,81468],{"href":81466,"rel":81467},"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",[34],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[65,81471,81472],{},"callbackFn"," 函数，直到 ",[65,81475,81472],{}," 返回一个",[30,81478,81481],{"href":81479,"rel":81480},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[34],"真值","。然后 ",[65,81484,81428],{}," 返回该元素并停止迭代数组。如果 ",[65,81487,81472],{}," 从未返回真值，则 ",[65,81490,81428],{}," 返回 ",[65,81493,81494],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[58,81496,81498],{"className":53268,"code":81497,"language":53270,"meta":63,"style":63},"\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",[65,81499,81500,81508,81516,81521,81526,81531,81535,81540,81545,81549,81554,81559,81563,81567,81572,81577,81581,81585,81590,81595,81600,81605,81610,81614,81619,81624,81629,81634,81638,81643,81651],{"__ignoreMap":63},[68,81501,81502,81504,81506],{"class":70,"line":71},[68,81503,1243],{"class":335},[68,81505,52001],{"class":51501},[68,81507,51508],{"class":335},[68,81509,81510,81512,81514],{"class":70,"line":92},[68,81511,52345],{"class":335},[68,81513,52014],{"class":51501},[68,81515,51508],{"class":335},[68,81517,81518],{"class":70,"line":1387},[68,81519,81520],{"class":335},"    const arr = ['red', 'blue', 'green']\n",[68,81522,81523],{"class":70,"line":1402},[68,81524,81525],{"class":335},"    const found = arr.find(item => item === 'pink')\n",[68,81527,81528],{"class":70,"line":1408},[68,81529,81530],{"class":335},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[68,81532,81533],{"class":70,"line":1422},[68,81534,2606],{"emptyLinePlaceholder":260},[68,81536,81537],{"class":70,"line":1428},[68,81538,81539],{"class":335},"    \u002F\u002F 使用场景，用于查找数据\n",[68,81541,81542],{"class":70,"line":1519},[68,81543,81544],{"class":335},"    const arr1 = [\n",[68,81546,81547],{"class":70,"line":1525},[68,81548,79587],{"class":335},[68,81550,81551],{"class":70,"line":1537},[68,81552,81553],{"class":335},"        name: '小米',\n",[68,81555,81556],{"class":70,"line":1819},[68,81557,81558],{"class":335},"        price: 1999\n",[68,81560,81561],{"class":70,"line":1824},[68,81562,78093],{"class":335},[68,81564,81565],{"class":70,"line":1830},[68,81566,79587],{"class":335},[68,81568,81569],{"class":70,"line":1835},[68,81570,81571],{"class":335},"        name: '华为',\n",[68,81573,81574],{"class":70,"line":1849},[68,81575,81576],{"class":335},"        price: 3999\n",[68,81578,81579],{"class":70,"line":1854},[68,81580,52599],{"class":335},[68,81582,81583],{"class":70,"line":1860},[68,81584,53310],{"class":335},[68,81586,81587],{"class":70,"line":1881},[68,81588,81589],{"class":335},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[68,81591,81592],{"class":70,"line":1886},[68,81593,81594],{"class":335},"    \u002F\u002F const found1 = arr1.find(item => {\n",[68,81596,81597],{"class":70,"line":1900},[68,81598,81599],{"class":335},"    \u002F\u002F   if (item.name === '小米') {\n",[68,81601,81602],{"class":70,"line":1905},[68,81603,81604],{"class":335},"    \u002F\u002F     return item\n",[68,81606,81607],{"class":70,"line":1934},[68,81608,81609],{"class":335},"    \u002F\u002F   }\n",[68,81611,81612],{"class":70,"line":1939},[68,81613,63491],{"class":335},[68,81615,81616],{"class":70,"line":1956},[68,81617,81618],{"class":335},"    \u002F\u002F 另一种写法\n",[68,81620,81621],{"class":70,"line":1961},[68,81622,81623],{"class":335},"    const found1 = arr1.find(item => {\n",[68,81625,81626],{"class":70,"line":1966},[68,81627,81628],{"class":335},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[68,81630,81631],{"class":70,"line":1971},[68,81632,81633],{"class":335},"      return item.name = '小米'\n",[68,81635,81636],{"class":70,"line":1985},[68,81637,33662],{"class":335},[68,81639,81640],{"class":70,"line":1990},[68,81641,81642],{"class":335},"    console.log(found1)\n",[68,81644,81645,81647,81649],{"class":70,"line":2783},[68,81646,52618],{"class":335},[68,81648,52014],{"class":51501},[68,81650,51508],{"class":335},[68,81652,81653,81655,81657],{"class":70,"line":2797},[68,81654,51986],{"class":335},[68,81656,52001],{"class":51501},[68,81658,51508],{"class":335},[19,81660,81661],{},[48,81662],{"alt":63,"src":81663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81665,81666],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[23,81668,81669],{"start":92},[26,81670,81671],{},"every()返回的是布尔值",[19,81673,81674],{},[30,81675,81678],{"href":81676,"rel":81677},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[34],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81680,81681],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81683,81684],{},"some是只有有一个就没问题",[19,81686,81687],{},"every是必须全是才行",[58,81689,81693],{"className":81690,"code":81691,"language":81692,"meta":63,"style":63},"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",[65,81694,81695,81711,81725,81729,81738],{"__ignoreMap":63},[68,81696,81697,81699,81702,81704,81706,81709],{"class":70,"line":71},[68,81698,54650],{"class":331},[68,81700,81701],{"class":335}," isBigEnough(element, ",[68,81703,74259],{"class":331},[68,81705,12640],{"class":335},[68,81707,81708],{"class":331},"array",[68,81710,12647],{"class":335},[68,81712,81713,81716,81719,81721,81723],{"class":70,"line":92},[68,81714,81715],{"class":331},"  return",[68,81717,81718],{"class":335}," element ",[68,81720,1917],{"class":331},[68,81722,2244],{"class":82},[68,81724,1498],{"class":335},[68,81726,81727],{"class":70,"line":1387},[68,81728,1772],{"class":335},[68,81730,81731,81734,81736],{"class":70,"line":1402},[68,81732,81733],{"class":335},"[12, 5, 8, 130, 44].every(isBigEnough); ",[68,81735,33530],{"class":331},[68,81737,54717],{"class":335},[68,81739,81740,81743,81745],{"class":70,"line":1408},[68,81741,81742],{"class":335},"[12, 54, 18, 130, 44].every(isBigEnough); ",[68,81744,33530],{"class":331},[68,81746,58141],{"class":335},[58,81748,81750],{"className":53268,"code":81749,"language":53270,"meta":63,"style":63},"\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",[65,81751,81752,81760,81768,81773,81777,81782,81787,81795],{"__ignoreMap":63},[68,81753,81754,81756,81758],{"class":70,"line":71},[68,81755,1243],{"class":335},[68,81757,52001],{"class":51501},[68,81759,51508],{"class":335},[68,81761,81762,81764,81766],{"class":70,"line":92},[68,81763,52345],{"class":335},[68,81765,52014],{"class":51501},[68,81767,51508],{"class":335},[68,81769,81770],{"class":70,"line":1387},[68,81771,81772],{"class":335},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[68,81774,81775],{"class":70,"line":1402},[68,81776,78523],{"class":335},[68,81778,81779],{"class":70,"line":1408},[68,81780,81781],{"class":335},"    const flag = arr.every(item => item >= 10)\n",[68,81783,81784],{"class":70,"line":1422},[68,81785,81786],{"class":335},"    console.log(flag)    \u002F\u002Ftrue\n",[68,81788,81789,81791,81793],{"class":70,"line":1428},[68,81790,52618],{"class":335},[68,81792,52014],{"class":51501},[68,81794,51508],{"class":335},[68,81796,81797,81799,81801],{"class":70,"line":1519},[68,81798,51986],{"class":335},[68,81800,52001],{"class":51501},[68,81802,51508],{"class":335},[58,81804,81806],{"className":53268,"code":81805,"language":53270,"meta":63,"style":63},"\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",[65,81807,81808,81816,81824,81828,81833,81838,81843,81851],{"__ignoreMap":63},[68,81809,81810,81812,81814],{"class":70,"line":71},[68,81811,1243],{"class":335},[68,81813,52001],{"class":51501},[68,81815,51508],{"class":335},[68,81817,81818,81820,81822],{"class":70,"line":92},[68,81819,52345],{"class":335},[68,81821,52014],{"class":51501},[68,81823,51508],{"class":335},[68,81825,81826],{"class":70,"line":1387},[68,81827,81772],{"class":335},[68,81829,81830],{"class":70,"line":1402},[68,81831,81832],{"class":335},"    const arr = [10, 0, 5]\n",[68,81834,81835],{"class":70,"line":1408},[68,81836,81837],{"class":335},"    const flag = arr.some(item => item >= 10)\n",[68,81839,81840],{"class":70,"line":1422},[68,81841,81842],{"class":335},"    console.log(flag)   \u002F\u002Ftrue\n",[68,81844,81845,81847,81849],{"class":70,"line":1428},[68,81846,52618],{"class":335},[68,81848,52014],{"class":51501},[68,81850,51508],{"class":335},[68,81852,81853,81855,81857],{"class":70,"line":1519},[68,81854,51986],{"class":335},[68,81856,52001],{"class":51501},[68,81858,51508],{"class":335},[23115,81860,81862],{"id":81861},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81864,81865],{},[48,81866],{"alt":63,"src":81867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[58,81869,81871],{"className":50834,"code":81870,"language":50836,"meta":63,"style":63},"\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",[65,81872,81873,81883,81897,81901,81909,81923,81943,81955,81963,81970,81982,81994,82006,82018,82028,82038,82042,82050,82058,82062,82070,82082,82090,82112,82117,82122,82155,82163,82171,82175],{"__ignoreMap":63},[68,81874,81875,81877,81879,81881],{"class":70,"line":71},[68,81876,51498],{"class":335},[68,81878,51502],{"class":51501},[68,81880,51505],{"class":74},[68,81882,51508],{"class":335},[68,81884,81885,81887,81889,81891,81893,81895],{"class":70,"line":92},[68,81886,1243],{"class":335},[68,81888,50836],{"class":51501},[68,81890,51517],{"class":74},[68,81892,381],{"class":335},[68,81894,51522],{"class":78},[68,81896,51508],{"class":335},[68,81898,81899],{"class":70,"line":1387},[68,81900,2606],{"emptyLinePlaceholder":260},[68,81902,81903,81905,81907],{"class":70,"line":1402},[68,81904,1243],{"class":335},[68,81906,51535],{"class":51501},[68,81908,51508],{"class":335},[68,81910,81911,81913,81915,81917,81919,81921],{"class":70,"line":1408},[68,81912,52345],{"class":335},[68,81914,51545],{"class":51501},[68,81916,51548],{"class":74},[68,81918,381],{"class":335},[68,81920,51553],{"class":78},[68,81922,51508],{"class":335},[68,81924,81925,81927,81929,81931,81933,81935,81937,81939,81941],{"class":70,"line":1422},[68,81926,52345],{"class":335},[68,81928,51545],{"class":51501},[68,81930,15125],{"class":74},[68,81932,381],{"class":335},[68,81934,51592],{"class":78},[68,81936,51572],{"class":74},[68,81938,381],{"class":335},[68,81940,51599],{"class":78},[68,81942,51508],{"class":335},[68,81944,81945,81947,81949,81951,81953],{"class":70,"line":1428},[68,81946,52345],{"class":335},[68,81948,51608],{"class":51501},[68,81950,51611],{"class":335},[68,81952,51608],{"class":51501},[68,81954,51508],{"class":335},[68,81956,81957,81959,81961],{"class":70,"line":1519},[68,81958,52345],{"class":335},[68,81960,250],{"class":51501},[68,81962,51508],{"class":335},[68,81964,81965,81968],{"class":70,"line":1525},[68,81966,81967],{"class":51501},"    div",[68,81969,15777],{"class":335},[68,81971,81972,81974,81976,81978,81980],{"class":70,"line":1537},[68,81973,54972],{"class":82},[68,81975,51638],{"class":335},[68,81977,1929],{"class":82},[68,81979,51693],{"class":331},[68,81981,1498],{"class":335},[68,81983,81984,81986,81988,81990,81992],{"class":70,"line":1819},[68,81985,54986],{"class":82},[68,81987,51638],{"class":335},[68,81989,734],{"class":82},[68,81991,51693],{"class":331},[68,81993,1498],{"class":335},[68,81995,81996,81998,82000,82002,82004],{"class":70,"line":1824},[68,81997,57560],{"class":82},[68,81999,51638],{"class":335},[68,82001,734],{"class":82},[68,82003,51693],{"class":331},[68,82005,1498],{"class":335},[68,82007,82008,82010,82012,82014,82016],{"class":70,"line":1830},[68,82009,65334],{"class":82},[68,82011,51638],{"class":335},[68,82013,831],{"class":82},[68,82015,51693],{"class":331},[68,82017,1498],{"class":335},[68,82019,82020,82022,82024,82026],{"class":70,"line":1835},[68,82021,57487],{"class":82},[68,82023,51638],{"class":335},[68,82025,51793],{"class":82},[68,82027,1498],{"class":335},[68,82029,82030,82032,82034,82036],{"class":70,"line":1849},[68,82031,55085],{"class":82},[68,82033,51638],{"class":335},[68,82035,51846],{"class":82},[68,82037,1498],{"class":335},[68,82039,82040],{"class":70,"line":1854},[68,82041,2393],{"class":335},[68,82043,82044,82046,82048],{"class":70,"line":1860},[68,82045,52618],{"class":335},[68,82047,250],{"class":51501},[68,82049,51508],{"class":335},[68,82051,82052,82054,82056],{"class":70,"line":1881},[68,82053,51986],{"class":335},[68,82055,51535],{"class":51501},[68,82057,51508],{"class":335},[68,82059,82060],{"class":70,"line":1886},[68,82061,2606],{"emptyLinePlaceholder":260},[68,82063,82064,82066,82068],{"class":70,"line":1900},[68,82065,1243],{"class":335},[68,82067,52001],{"class":51501},[68,82069,51508],{"class":335},[68,82071,82072,82074,82076,82078,82080],{"class":70,"line":1905},[68,82073,52345],{"class":335},[68,82075,51812],{"class":51501},[68,82077,55515],{"class":335},[68,82079,51812],{"class":51501},[68,82081,51508],{"class":335},[68,82083,82084,82086,82088],{"class":70,"line":1934},[68,82085,52345],{"class":335},[68,82087,52014],{"class":51501},[68,82089,51508],{"class":335},[68,82091,82092,82094,82097,82099,82102,82105,82107,82110],{"class":70,"line":1939},[68,82093,11426],{"class":331},[68,82095,82096],{"class":82}," spec",[68,82098,13769],{"class":331},[68,82100,82101],{"class":335}," { size: ",[68,82103,82104],{"class":78},"'40cm*40cm'",[68,82106,55665],{"class":335},[68,82108,82109],{"class":78},"'黑色'",[68,82111,55805],{"class":335},[68,82113,82114],{"class":70,"line":1956},[68,82115,82116],{"class":393},"    \u002F\u002F const arr = Object.values(spec)\n",[68,82118,82119],{"class":70,"line":1961},[68,82120,82121],{"class":393},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[68,82123,82124,82126,82128,82130,82133,82135,82137,82140,82143,82146,82148,82150,82153],{"class":70,"line":1966},[68,82125,52608],{"class":335},[68,82127,54600],{"class":74},[68,82129,336],{"class":335},[68,82131,82132],{"class":78},"'div'",[68,82134,74450],{"class":335},[68,82136,381],{"class":331},[68,82138,82139],{"class":335}," Object.",[68,82141,82142],{"class":74},"values",[68,82144,82145],{"class":335},"(spec).",[68,82147,74424],{"class":74},[68,82149,336],{"class":335},[68,82151,82152],{"class":78},"'\u002F'",[68,82154,342],{"class":335},[68,82156,82157,82159,82161],{"class":70,"line":1971},[68,82158,52618],{"class":335},[68,82160,52014],{"class":51501},[68,82162,51508],{"class":335},[68,82164,82165,82167,82169],{"class":70,"line":1985},[68,82166,51986],{"class":335},[68,82168,52001],{"class":51501},[68,82170,51508],{"class":335},[68,82172,82173],{"class":70,"line":1990},[68,82174,2606],{"emptyLinePlaceholder":260},[68,82176,82177,82179,82181],{"class":70,"line":2783},[68,82178,51986],{"class":335},[68,82180,50836],{"class":51501},[68,82182,51508],{"class":335},[19,82184,82185],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23115,82187,82189],{"id":82188},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82191,82192],{},"静态方法，将伪数组转换为真数组",[19,82194,82195],{},[48,82196],{"alt":63,"src":82197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[58,82199,82201],{"className":53268,"code":82200,"language":53270,"meta":63,"style":63},"\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",[65,82202,82203,82211,82219,82231,82243,82255,82263,82271,82276,82281,82286,82291,82299],{"__ignoreMap":63},[68,82204,82205,82207,82209],{"class":70,"line":71},[68,82206,1243],{"class":335},[68,82208,52001],{"class":51501},[68,82210,51508],{"class":335},[68,82212,82213,82215,82217],{"class":70,"line":92},[68,82214,52345],{"class":335},[68,82216,42],{"class":51501},[68,82218,51508],{"class":335},[68,82220,82221,82223,82225,82227,82229],{"class":70,"line":1387},[68,82222,51542],{"class":335},[68,82224,26],{"class":51501},[68,82226,55515],{"class":335},[68,82228,26],{"class":51501},[68,82230,51508],{"class":335},[68,82232,82233,82235,82237,82239,82241],{"class":70,"line":1402},[68,82234,51542],{"class":335},[68,82236,26],{"class":51501},[68,82238,55515],{"class":335},[68,82240,26],{"class":51501},[68,82242,51508],{"class":335},[68,82244,82245,82247,82249,82251,82253],{"class":70,"line":1408},[68,82246,51542],{"class":335},[68,82248,26],{"class":51501},[68,82250,55515],{"class":335},[68,82252,26],{"class":51501},[68,82254,51508],{"class":335},[68,82256,82257,82259,82261],{"class":70,"line":1422},[68,82258,52618],{"class":335},[68,82260,42],{"class":51501},[68,82262,51508],{"class":335},[68,82264,82265,82267,82269],{"class":70,"line":1428},[68,82266,52345],{"class":335},[68,82268,52014],{"class":51501},[68,82270,51508],{"class":335},[68,82272,82273],{"class":70,"line":1519},[68,82274,82275],{"class":335},"    const lis = document.querySelectorAll('li')\n",[68,82277,82278],{"class":70,"line":1525},[68,82279,82280],{"class":335},"    const liss = Array.from(lis)\n",[68,82282,82283],{"class":70,"line":1537},[68,82284,82285],{"class":335},"    liss.pop()\n",[68,82287,82288],{"class":70,"line":1819},[68,82289,82290],{"class":335},"    console.log(liss)\n",[68,82292,82293,82295,82297],{"class":70,"line":1824},[68,82294,52618],{"class":335},[68,82296,52014],{"class":51501},[68,82298,51508],{"class":335},[68,82300,82301,82303,82305],{"class":70,"line":1830},[68,82302,51986],{"class":335},[68,82304,52001],{"class":51501},[68,82306,51508],{"class":335},[19,82308,82309],{},[48,82310],{"alt":63,"src":82311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22203,82313,82315],{"id":82314},"_41053-string","4.10.5.3 String",[19,82317,82318],{},[48,82319],{"alt":63,"src":82320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23115,82322,82324],{"id":82323},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[58,82326,82328],{"className":53268,"code":82327,"language":53270,"meta":63,"style":63},"\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",[65,82329,82330,82338,82346,82351,82356,82361,82365,82370,82375,82380,82388],{"__ignoreMap":63},[68,82331,82332,82334,82336],{"class":70,"line":71},[68,82333,1243],{"class":335},[68,82335,52001],{"class":51501},[68,82337,51508],{"class":335},[68,82339,82340,82342,82344],{"class":70,"line":92},[68,82341,52345],{"class":335},[68,82343,52014],{"class":51501},[68,82345,51508],{"class":335},[68,82347,82348],{"class":70,"line":1387},[68,82349,82350],{"class":335},"    \u002F\u002F 把字符串转化为数组\n",[68,82352,82353],{"class":70,"line":1402},[68,82354,82355],{"class":335},"    const str = 'pink,red'\n",[68,82357,82358],{"class":70,"line":1408},[68,82359,82360],{"class":335},"    const arr = str.split(',')\n",[68,82362,82363],{"class":70,"line":1422},[68,82364,80839],{"class":335},[68,82366,82367],{"class":70,"line":1428},[68,82368,82369],{"class":335},"    const str1 = '2025-8-25'\n",[68,82371,82372],{"class":70,"line":1519},[68,82373,82374],{"class":335},"    const arr1 = str1.split('-')\n",[68,82376,82377],{"class":70,"line":1525},[68,82378,82379],{"class":335},"    console.log(arr1)\n",[68,82381,82382,82384,82386],{"class":70,"line":1537},[68,82383,52618],{"class":335},[68,82385,52014],{"class":51501},[68,82387,51508],{"class":335},[68,82389,82390,82392,82394],{"class":70,"line":1819},[68,82391,51986],{"class":335},[68,82393,52001],{"class":51501},[68,82395,51508],{"class":335},[23115,82397,82399],{"id":82398},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82401,5387],{},[19,82403,82404],{},"substring(indexStart)",[19,82406,82407],{},"substring(indexStart, indexEnd)",[42,82409,82410,82421,82433,82443],{},[26,82411,82412,82413,82416,82417,82420],{},"如果省略了 ",[65,82414,82415],{},"indexEnd","，则 ",[65,82418,82419],{},"substring()"," 提取字符直到字符串的末尾",[26,82422,82423,82424,82427,82428,82416,82430,82432],{},"如果 ",[65,82425,82426],{},"indexStart"," 等于 ",[65,82429,82415],{},[65,82431,82419],{}," 返回一个空字符串",[26,82434,82423,82435,82437,82438,82416,82440,82442],{},[65,82436,82426],{}," 大于 ",[65,82439,82415],{},[65,82441,82419],{}," 的效果就像交换了这两个参数一样",[26,82444,82445],{},"结束的索引号不包含想要截取的部分",[58,82447,82449],{"className":81690,"code":82448,"language":81692,"meta":63,"style":63},"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",[65,82450,82451,82463,82467,82501,82531,82535,82566,82570,82597,82627,82657,82661,82692],{"__ignoreMap":63},[68,82452,82453,82456,82458,82461],{"class":70,"line":71},[68,82454,82455],{"class":335},"const anyString ",[68,82457,381],{"class":331},[68,82459,82460],{"class":78}," \"Mozilla\"",[68,82462,1498],{"class":335},[68,82464,82465],{"class":70,"line":92},[68,82466,2606],{"emptyLinePlaceholder":260},[68,82468,82469,82472,82474,82476,82478,82481,82483,82486,82488,82490,82492,82494,82496,82498],{"class":70,"line":1387},[68,82470,82471],{"class":82},"console",[68,82473,891],{"class":335},[68,82475,58448],{"class":82},[68,82477,336],{"class":335},[68,82479,82480],{"class":82},"anyString",[68,82482,891],{"class":335},[68,82484,82485],{"class":82},"substring",[68,82487,336],{"class":335},[68,82489,525],{"class":82},[68,82491,12640],{"class":335},[68,82493,551],{"class":82},[68,82495,75454],{"class":335},[68,82497,33530],{"class":331},[68,82499,82500],{"class":78}," 'M'\n",[68,82502,82503,82505,82507,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527,82529],{"class":70,"line":1402},[68,82504,82471],{"class":82},[68,82506,891],{"class":335},[68,82508,58448],{"class":82},[68,82510,336],{"class":335},[68,82512,82480],{"class":82},[68,82514,891],{"class":335},[68,82516,82485],{"class":82},[68,82518,336],{"class":335},[68,82520,551],{"class":82},[68,82522,12640],{"class":335},[68,82524,525],{"class":82},[68,82526,75454],{"class":335},[68,82528,33530],{"class":331},[68,82530,82500],{"class":78},[68,82532,82533],{"class":70,"line":1408},[68,82534,2606],{"emptyLinePlaceholder":260},[68,82536,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563],{"class":70,"line":1422},[68,82538,82471],{"class":82},[68,82540,891],{"class":335},[68,82542,58448],{"class":82},[68,82544,336],{"class":335},[68,82546,82480],{"class":82},[68,82548,891],{"class":335},[68,82550,82485],{"class":82},[68,82552,336],{"class":335},[68,82554,525],{"class":82},[68,82556,12640],{"class":335},[68,82558,677],{"class":82},[68,82560,75454],{"class":335},[68,82562,33530],{"class":331},[68,82564,82565],{"class":78}," 'Mozill'\n",[68,82567,82568],{"class":70,"line":1428},[68,82569,2606],{"emptyLinePlaceholder":260},[68,82571,82572,82574,82576,82578,82580,82582,82584,82586,82588,82590,82592,82594],{"class":70,"line":1519},[68,82573,82471],{"class":82},[68,82575,891],{"class":335},[68,82577,58448],{"class":82},[68,82579,336],{"class":335},[68,82581,82480],{"class":82},[68,82583,891],{"class":335},[68,82585,82485],{"class":82},[68,82587,336],{"class":335},[68,82589,626],{"class":82},[68,82591,75454],{"class":335},[68,82593,33530],{"class":331},[68,82595,82596],{"class":78}," 'lla'\n",[68,82598,82599,82601,82603,82605,82607,82609,82611,82613,82615,82617,82619,82621,82623,82625],{"class":70,"line":1525},[68,82600,82471],{"class":82},[68,82602,891],{"class":335},[68,82604,58448],{"class":82},[68,82606,336],{"class":335},[68,82608,82480],{"class":82},[68,82610,891],{"class":335},[68,82612,82485],{"class":82},[68,82614,336],{"class":335},[68,82616,626],{"class":82},[68,82618,12640],{"class":335},[68,82620,702],{"class":82},[68,82622,75510],{"class":335},[68,82624,33530],{"class":331},[68,82626,82596],{"class":78},[68,82628,82629,82631,82633,82635,82637,82639,82641,82643,82645,82647,82649,82651,82653,82655],{"class":70,"line":1537},[68,82630,82471],{"class":82},[68,82632,891],{"class":335},[68,82634,58448],{"class":82},[68,82636,336],{"class":335},[68,82638,82480],{"class":82},[68,82640,891],{"class":335},[68,82642,82485],{"class":82},[68,82644,336],{"class":335},[68,82646,702],{"class":82},[68,82648,12640],{"class":335},[68,82650,626],{"class":82},[68,82652,75454],{"class":335},[68,82654,33530],{"class":331},[68,82656,82596],{"class":78},[68,82658,82659],{"class":70,"line":1819},[68,82660,2606],{"emptyLinePlaceholder":260},[68,82662,82663,82665,82667,82669,82671,82673,82675,82677,82679,82681,82683,82685,82687,82689],{"class":70,"line":1824},[68,82664,82471],{"class":82},[68,82666,891],{"class":335},[68,82668,58448],{"class":82},[68,82670,336],{"class":335},[68,82672,82480],{"class":82},[68,82674,891],{"class":335},[68,82676,82485],{"class":82},[68,82678,336],{"class":335},[68,82680,525],{"class":82},[68,82682,12640],{"class":335},[68,82684,702],{"class":82},[68,82686,75454],{"class":335},[68,82688,33530],{"class":331},[68,82690,82691],{"class":78}," 'Mozilla'\n",[68,82693,82694,82696,82698,82700,82702,82704,82706,82708,82710,82712,82714,82716,82718,82720],{"class":70,"line":1830},[68,82695,82471],{"class":82},[68,82697,891],{"class":335},[68,82699,58448],{"class":82},[68,82701,336],{"class":335},[68,82703,82480],{"class":82},[68,82705,891],{"class":335},[68,82707,82485],{"class":82},[68,82709,336],{"class":335},[68,82711,525],{"class":82},[68,82713,12640],{"class":335},[68,82715,779],{"class":82},[68,82717,75454],{"class":335},[68,82719,33530],{"class":331},[68,82721,82691],{"class":78},[23115,82723,82725],{"id":82724},"_410533-startswith","4.10.5.3.3 startsWith",[19,82727,82728,82731,82732,82737,82738,82740,82741],{},[65,82729,82730],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[483,82733,82734],{},[65,82735,82736],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[65,82739,1570],{}," 或 ",[65,82742,66221],{},[58,82744,82746],{"className":77696,"code":82745,"language":77698,"meta":63,"style":63},"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",[65,82747,82748,82760,82779,82784,82804],{"__ignoreMap":63},[68,82749,82750,82752,82755,82757],{"class":70,"line":71},[68,82751,6997],{"class":331},[68,82753,82754],{"class":335}," str1 ",[68,82756,381],{"class":331},[68,82758,82759],{"class":78}," \"Saturday night plans\"\n",[68,82761,82762,82764,82766,82769,82772,82774,82777],{"class":70,"line":92},[68,82763,77733],{"class":335},[68,82765,58448],{"class":74},[68,82767,82768],{"class":335},"(str1.",[68,82770,82771],{"class":74},"startsWith",[68,82773,336],{"class":335},[68,82775,82776],{"class":78},"\"Sat\"",[68,82778,30698],{"class":335},[68,82780,82781],{"class":70,"line":1387},[68,82782,82783],{"class":393},"\u002F\u002F Expected output: true\n",[68,82785,82786,82788,82790,82792,82794,82796,82798,82800,82802],{"class":70,"line":1402},[68,82787,77733],{"class":335},[68,82789,58448],{"class":74},[68,82791,82768],{"class":335},[68,82793,82771],{"class":74},[68,82795,336],{"class":335},[68,82797,82776],{"class":78},[68,82799,12640],{"class":335},[68,82801,406],{"class":82},[68,82803,30698],{"class":335},[68,82805,82806],{"class":70,"line":1408},[68,82807,82808],{"class":393},"\u002F\u002F Expected output: false\n",[58,82810,82812],{"className":50834,"code":82811,"language":50836,"meta":63,"style":63},"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",[65,82813,82814,82819,82824,82828,82833,82838],{"__ignoreMap":63},[68,82815,82816],{"class":70,"line":71},[68,82817,82818],{"class":335},"startsWith(searchString)\n",[68,82820,82821],{"class":70,"line":92},[68,82822,82823],{"class":335},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[68,82825,82826],{"class":70,"line":1387},[68,82827,2606],{"emptyLinePlaceholder":260},[68,82829,82830],{"class":70,"line":1402},[68,82831,82832],{"class":335},"const str3 = 'pink老师上课中'\n",[68,82834,82835],{"class":70,"line":1408},[68,82836,82837],{"class":335},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[68,82839,82840],{"class":70,"line":1422},[68,82841,82842],{"class":335},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23115,82844,82846],{"id":82845},"_410534-includes","4.10.5.3.4 includes",[19,82848,82849],{},"includes(searchString) includes(searchString, position)",[23,82851,82852],{},[26,82853,82854],{},"searchString:",[19,82856,82857,82858,82860,82861,82866,82867,82872,82873,21705,82876,82879,82880,82883],{},"一个要在 ",[65,82859,1507],{}," 中查找的字符串。",[30,82862,82865],{"href":82863,"rel":82864},"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",[34],"不能是正则表达式","。所有非正则表达式的值都会被",[30,82868,82871],{"href":82869,"rel":82870},"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",[34],"强制转换为字符串","，因此如果该参数被省略或传入 ",[65,82874,82875],{},"undefined",[65,82877,82878],{},"includes()"," 方法会在字符串中搜索 ",[65,82881,82882],{},"\"undefined\"","，这通常不是你想要的",[23,82885,82886],{"start":92},[26,82887,82888,1192],{},[65,82889,82890],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82892,82893,82894,82897,82898],{},"在字符串中开始搜索 ",[65,82895,82896],{},"searchString"," 的位置。默认值为 ",[65,82899,525],{},[23,82901,82902],{"start":1387},[26,82903,82904],{},"返回值：",[19,82906,82907,82908,82910,82911,82915,82916],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[65,82909,82896],{}," 为空字符串的情况），则返回 ",[483,82912,82913],{},[65,82914,1570],{}," ，否则返回 ",[483,82917,82918],{},[65,82919,66221],{},[23,82921,82922],{"start":1402},[26,82923,82924],{},"异常：",[19,82926,82423,82927,14000,82929,82933],{},[65,82928,82896],{},[30,82930,82932],{"href":82863,"rel":82931},[34],"是一个正则表达式","，则会抛出",[19,82935,82936],{},"只要是有就是true，不需要非得以谁开头结尾",[58,82938,82940],{"className":77696,"code":82939,"language":77698,"meta":63,"style":63},"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",[65,82941,82942,82953,82976,82995,83015,83037,83056],{"__ignoreMap":63},[68,82943,82944,82946,82948,82950],{"class":70,"line":71},[68,82945,6997],{"class":331},[68,82947,79976],{"class":335},[68,82949,381],{"class":331},[68,82951,82952],{"class":78}," \"To be, or not to be, that is the question.\"\n",[68,82954,82955,82957,82959,82962,82965,82967,82970,82973],{"class":70,"line":92},[68,82956,77733],{"class":335},[68,82958,58448],{"class":74},[68,82960,82961],{"class":335},"(str.",[68,82963,82964],{"class":74},"includes",[68,82966,336],{"class":335},[68,82968,82969],{"class":78},"\"To be\"",[68,82971,82972],{"class":335},"))",[68,82974,82975],{"class":393},"  \u002F\u002F true\n",[68,82977,82978,82980,82982,82984,82986,82988,82991,82993],{"class":70,"line":1387},[68,82979,77733],{"class":335},[68,82981,58448],{"class":74},[68,82983,82961],{"class":335},[68,82985,82964],{"class":74},[68,82987,336],{"class":335},[68,82989,82990],{"class":78},"\"question\"",[68,82992,82972],{"class":335},[68,82994,82975],{"class":393},[68,82996,82997,82999,83001,83003,83005,83007,83010,83012],{"class":70,"line":1402},[68,82998,77733],{"class":335},[68,83000,58448],{"class":74},[68,83002,82961],{"class":335},[68,83004,82964],{"class":74},[68,83006,336],{"class":335},[68,83008,83009],{"class":78},"\"nonexistent\"",[68,83011,82972],{"class":335},[68,83013,83014],{"class":393},"  \u002F\u002F false\n",[68,83016,83017,83019,83021,83023,83025,83027,83029,83031,83033,83035],{"class":70,"line":1408},[68,83018,77733],{"class":335},[68,83020,58448],{"class":74},[68,83022,82961],{"class":335},[68,83024,82964],{"class":74},[68,83026,336],{"class":335},[68,83028,82969],{"class":78},[68,83030,12640],{"class":335},[68,83032,551],{"class":82},[68,83034,82972],{"class":335},[68,83036,83014],{"class":393},[68,83038,83039,83041,83043,83045,83047,83049,83052,83054],{"class":70,"line":1422},[68,83040,77733],{"class":335},[68,83042,58448],{"class":74},[68,83044,82961],{"class":335},[68,83046,82964],{"class":74},[68,83048,336],{"class":335},[68,83050,83051],{"class":78},"\"TO BE\"",[68,83053,82972],{"class":335},[68,83055,83014],{"class":393},[68,83057,83058,83060,83062,83064,83066,83068,83070,83072],{"class":70,"line":1428},[68,83059,77733],{"class":335},[68,83061,58448],{"class":74},[68,83063,82961],{"class":335},[68,83065,82964],{"class":74},[68,83067,336],{"class":335},[68,83069,7857],{"class":78},[68,83071,82972],{"class":335},[68,83073,82975],{"class":393},[23115,83075,83077],{"id":83076},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[58,83079,83081],{"className":53268,"code":83080,"language":53270,"meta":63,"style":63},"\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",[65,83082,83083,83091,83099,83104,83109,83114,83119,83124,83132],{"__ignoreMap":63},[68,83084,83085,83087,83089],{"class":70,"line":71},[68,83086,1243],{"class":335},[68,83088,52001],{"class":51501},[68,83090,51508],{"class":335},[68,83092,83093,83095,83097],{"class":70,"line":92},[68,83094,52345],{"class":335},[68,83096,52014],{"class":51501},[68,83098,51508],{"class":335},[68,83100,83101],{"class":70,"line":1387},[68,83102,83103],{"class":335},"    const num = 10\n",[68,83105,83106],{"class":70,"line":1402},[68,83107,83108],{"class":335},"    \u002F\u002F 强制转换\n",[68,83110,83111],{"class":70,"line":1408},[68,83112,83113],{"class":335},"    console.log(String(num))\n",[68,83115,83116],{"class":70,"line":1422},[68,83117,83118],{"class":335},"    \u002F\u002F toString()方法转换\n",[68,83120,83121],{"class":70,"line":1428},[68,83122,83123],{"class":335},"    console.log(num.toString())\n",[68,83125,83126,83128,83130],{"class":70,"line":1519},[68,83127,52618],{"class":335},[68,83129,52014],{"class":51501},[68,83131,51508],{"class":335},[68,83133,83134,83136,83138],{"class":70,"line":1525},[68,83135,51986],{"class":335},[68,83137,52001],{"class":51501},[68,83139,51508],{"class":335},[23115,83141,83143],{"id":83142},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83145,83146],{},[48,83147],{"alt":63,"src":83148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[58,83150,83152],{"className":50834,"code":83151,"language":50836,"meta":63,"style":63},"\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",[65,83153,83154,83164,83178,83182,83190,83204,83224,83236,83244,83248,83256,83268,83276,83288,83293,83298,83303,83350,83366,83374,83382,83386],{"__ignoreMap":63},[68,83155,83156,83158,83160,83162],{"class":70,"line":71},[68,83157,51498],{"class":335},[68,83159,51502],{"class":51501},[68,83161,51505],{"class":74},[68,83163,51508],{"class":335},[68,83165,83166,83168,83170,83172,83174,83176],{"class":70,"line":92},[68,83167,1243],{"class":335},[68,83169,50836],{"class":51501},[68,83171,51517],{"class":74},[68,83173,381],{"class":335},[68,83175,51522],{"class":78},[68,83177,51508],{"class":335},[68,83179,83180],{"class":70,"line":1387},[68,83181,2606],{"emptyLinePlaceholder":260},[68,83183,83184,83186,83188],{"class":70,"line":1402},[68,83185,1243],{"class":335},[68,83187,51535],{"class":51501},[68,83189,51508],{"class":335},[68,83191,83192,83194,83196,83198,83200,83202],{"class":70,"line":1408},[68,83193,52345],{"class":335},[68,83195,51545],{"class":51501},[68,83197,51548],{"class":74},[68,83199,381],{"class":335},[68,83201,51553],{"class":78},[68,83203,51508],{"class":335},[68,83205,83206,83208,83210,83212,83214,83216,83218,83220,83222],{"class":70,"line":1422},[68,83207,52345],{"class":335},[68,83209,51545],{"class":51501},[68,83211,15125],{"class":74},[68,83213,381],{"class":335},[68,83215,51592],{"class":78},[68,83217,51572],{"class":74},[68,83219,381],{"class":335},[68,83221,51599],{"class":78},[68,83223,51508],{"class":335},[68,83225,83226,83228,83230,83232,83234],{"class":70,"line":1428},[68,83227,52345],{"class":335},[68,83229,51608],{"class":51501},[68,83231,51611],{"class":335},[68,83233,51608],{"class":51501},[68,83235,51508],{"class":335},[68,83237,83238,83240,83242],{"class":70,"line":1519},[68,83239,51986],{"class":335},[68,83241,51535],{"class":51501},[68,83243,51508],{"class":335},[68,83245,83246],{"class":70,"line":1525},[68,83247,2606],{"emptyLinePlaceholder":260},[68,83249,83250,83252,83254],{"class":70,"line":1537},[68,83251,1243],{"class":335},[68,83253,52001],{"class":51501},[68,83255,51508],{"class":335},[68,83257,83258,83260,83262,83264,83266],{"class":70,"line":1819},[68,83259,52345],{"class":335},[68,83261,51812],{"class":51501},[68,83263,55515],{"class":335},[68,83265,51812],{"class":51501},[68,83267,51508],{"class":335},[68,83269,83270,83272,83274],{"class":70,"line":1824},[68,83271,52345],{"class":335},[68,83273,52014],{"class":51501},[68,83275,51508],{"class":335},[68,83277,83278,83280,83283,83285],{"class":70,"line":1830},[68,83279,11426],{"class":331},[68,83281,83282],{"class":82}," gift",[68,83284,13769],{"class":331},[68,83286,83287],{"class":78}," '50g的茶叶，清洗球'\n",[68,83289,83290],{"class":70,"line":1835},[68,83291,83292],{"class":393},"    \u002F\u002F 1.把字符串拆分为数组\n",[68,83294,83295],{"class":70,"line":1849},[68,83296,83297],{"class":393},"    \u002F\u002F console.log(gift.split(','))\n",[68,83299,83300],{"class":70,"line":1854},[68,83301,83302],{"class":393},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[68,83304,83305,83307,83309,83311,83314,83317,83319,83322,83324,83326,83328,83330,83332,83335,83337,83340,83342,83344,83346,83348],{"class":70,"line":1860},[68,83306,11426],{"class":331},[68,83308,74120],{"class":82},[68,83310,13769],{"class":331},[68,83312,83313],{"class":335}," gift.",[68,83315,83316],{"class":74},"split",[68,83318,336],{"class":335},[68,83320,83321],{"class":78},"'，'",[68,83323,31027],{"class":335},[68,83325,74245],{"class":74},[68,83327,336],{"class":335},[68,83329,79996],{"class":5421},[68,83331,79999],{"class":331},[68,83333,83334],{"class":78}," `\u003Cspan>【赠品】${",[68,83336,79996],{"class":335},[68,83338,83339],{"class":78},"}\u003C\u002Fspan>\u003Cbr>`",[68,83341,31027],{"class":335},[68,83343,74424],{"class":74},[68,83345,336],{"class":335},[68,83347,74429],{"class":78},[68,83349,342],{"class":335},[68,83351,83352,83354,83356,83358,83360,83362,83364],{"class":70,"line":1881},[68,83353,52608],{"class":335},[68,83355,54600],{"class":74},[68,83357,336],{"class":335},[68,83359,82132],{"class":78},[68,83361,74450],{"class":335},[68,83363,381],{"class":331},[68,83365,74186],{"class":335},[68,83367,83368,83370,83372],{"class":70,"line":1886},[68,83369,52618],{"class":335},[68,83371,52014],{"class":51501},[68,83373,51508],{"class":335},[68,83375,83376,83378,83380],{"class":70,"line":1900},[68,83377,51986],{"class":335},[68,83379,52001],{"class":51501},[68,83381,51508],{"class":335},[68,83383,83384],{"class":70,"line":1905},[68,83385,2606],{"emptyLinePlaceholder":260},[68,83387,83388,83390,83392],{"class":70,"line":1934},[68,83389,51986],{"class":335},[68,83391,50836],{"class":51501},[68,83393,51508],{"class":335},[22203,83395,83397],{"id":83396},"_41054-number","4.10.5.4 Number",[19,83399,83400],{},[48,83401],{"alt":63,"src":83402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83404,83405],{},"整数也可以进行toFixed来保留小数",[19,83407,83408],{},"比如：",[19,83410,83411],{},"const price=10",[19,83413,83414],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22203,83416,83418],{"id":83417},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83420,83421],{},[48,83422],{"alt":63,"src":83423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[58,83425,83427],{"className":50834,"code":83426,"language":50836,"meta":63,"style":63},"\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",[65,83428,83429,83439,83453,83457,83465,83479,83499,83511,83519,83525,83535,83545,83555,83559,83563,83569,83581,83595,83599,83603,83609,83621,83637,83647,83663,83667,83671,83677,83687,83697,83701,83705,83713,83725,83737,83749,83753,83757,83765,83777,83781,83785,83796,83806,83818,83830,83840,83844,83848,83856,83865,83877,83887,83897,83901,83905,83913,83922,83929,83939,83951,83955,83959,83968,83978,83989,84001,84013,84017,84021,84030,84040,84051,84055,84059,84065,84077,84089,84099,84109,84127,84139,84143,84147,84156,84168,84178,84188,84200,84204,84212,84220,84224,84232,84246,84254,84268,84296,84304,84312,84322,84326,84334,84342,84351,84359,84368,84378,84382,84386,84394,84402,84411,84419,84427,84440,84444,84448,84456,84464,84473,84481,84489,84504,84508,84512,84520,84528,84537,84545,84553,84567,84575,84579,84583,84588,84614,84619,84656,84661,84684,84689,84743,84748,84784,84788,84794,84799,84808,84822,84831,84850,84859,84869,84874,84879,84892,84897,84951,84977,84985,84993,84997],{"__ignoreMap":63},[68,83430,83431,83433,83435,83437],{"class":70,"line":71},[68,83432,51498],{"class":335},[68,83434,51502],{"class":51501},[68,83436,51505],{"class":74},[68,83438,51508],{"class":335},[68,83440,83441,83443,83445,83447,83449,83451],{"class":70,"line":92},[68,83442,1243],{"class":335},[68,83444,50836],{"class":51501},[68,83446,51517],{"class":74},[68,83448,381],{"class":335},[68,83450,51522],{"class":78},[68,83452,51508],{"class":335},[68,83454,83455],{"class":70,"line":1387},[68,83456,2606],{"emptyLinePlaceholder":260},[68,83458,83459,83461,83463],{"class":70,"line":1402},[68,83460,1243],{"class":335},[68,83462,51535],{"class":51501},[68,83464,51508],{"class":335},[68,83466,83467,83469,83471,83473,83475,83477],{"class":70,"line":1408},[68,83468,52345],{"class":335},[68,83470,51545],{"class":51501},[68,83472,51548],{"class":74},[68,83474,381],{"class":335},[68,83476,51553],{"class":78},[68,83478,51508],{"class":335},[68,83480,83481,83483,83485,83487,83489,83491,83493,83495,83497],{"class":70,"line":1422},[68,83482,52345],{"class":335},[68,83484,51545],{"class":51501},[68,83486,15125],{"class":74},[68,83488,381],{"class":335},[68,83490,51592],{"class":78},[68,83492,51572],{"class":74},[68,83494,381],{"class":335},[68,83496,51599],{"class":78},[68,83498,51508],{"class":335},[68,83500,83501,83503,83505,83507,83509],{"class":70,"line":1428},[68,83502,52345],{"class":335},[68,83504,51608],{"class":51501},[68,83506,51611],{"class":335},[68,83508,51608],{"class":51501},[68,83510,51508],{"class":335},[68,83512,83513,83515,83517],{"class":70,"line":1519},[68,83514,52345],{"class":335},[68,83516,250],{"class":51501},[68,83518,51508],{"class":335},[68,83520,83521,83523],{"class":70,"line":1525},[68,83522,6608],{"class":51501},[68,83524,15777],{"class":335},[68,83526,83527,83529,83531,83533],{"class":70,"line":1537},[68,83528,54896],{"class":82},[68,83530,51638],{"class":335},[68,83532,525],{"class":82},[68,83534,1498],{"class":335},[68,83536,83537,83539,83541,83543],{"class":70,"line":1819},[68,83538,54907],{"class":82},[68,83540,51638],{"class":335},[68,83542,525],{"class":82},[68,83544,1498],{"class":335},[68,83546,83547,83549,83551,83553],{"class":70,"line":1824},[68,83548,72797],{"class":82},[68,83550,51638],{"class":335},[68,83552,60706],{"class":82},[68,83554,1498],{"class":335},[68,83556,83557],{"class":70,"line":1830},[68,83558,2393],{"class":335},[68,83560,83561],{"class":70,"line":1835},[68,83562,2606],{"emptyLinePlaceholder":260},[68,83564,83565,83567],{"class":70,"line":1849},[68,83566,62324],{"class":74},[68,83568,15777],{"class":335},[68,83570,83571,83573,83575,83577,83579],{"class":70,"line":1854},[68,83572,54972],{"class":82},[68,83574,51638],{"class":335},[68,83576,78775],{"class":82},[68,83578,51693],{"class":331},[68,83580,1498],{"class":335},[68,83582,83583,83585,83587,83589,83591,83593],{"class":70,"line":1860},[68,83584,54907],{"class":82},[68,83586,51638],{"class":335},[68,83588,644],{"class":82},[68,83590,51693],{"class":331},[68,83592,51757],{"class":82},[68,83594,1498],{"class":335},[68,83596,83597],{"class":70,"line":1881},[68,83598,2393],{"class":335},[68,83600,83601],{"class":70,"line":1886},[68,83602,2606],{"emptyLinePlaceholder":260},[68,83604,83605,83607],{"class":70,"line":1900},[68,83606,78826],{"class":74},[68,83608,15777],{"class":335},[68,83610,83611,83613,83615,83617,83619],{"class":70,"line":1905},[68,83612,54896],{"class":82},[68,83614,51638],{"class":335},[68,83616,908],{"class":82},[68,83618,51693],{"class":331},[68,83620,1498],{"class":335},[68,83622,83623,83625,83627,83629,83631,83633,83635],{"class":70,"line":1934},[68,83624,62061],{"class":82},[68,83626,51638],{"class":335},[68,83628,28325],{"class":82},[68,83630,78881],{"class":82},[68,83632,78884],{"class":82},[68,83634,1028],{"class":331},[68,83636,1498],{"class":335},[68,83638,83639,83641,83643,83645],{"class":70,"line":1939},[68,83640,55210],{"class":82},[68,83642,51638],{"class":335},[68,83644,51678],{"class":82},[68,83646,1498],{"class":335},[68,83648,83649,83651,83653,83655,83657,83659,83661],{"class":70,"line":1956},[68,83650,62178],{"class":82},[68,83652,51638],{"class":335},[68,83654,551],{"class":82},[68,83656,51693],{"class":331},[68,83658,51722],{"class":82},[68,83660,62445],{"class":82},[68,83662,1498],{"class":335},[68,83664,83665],{"class":70,"line":1961},[68,83666,2393],{"class":335},[68,83668,83669],{"class":70,"line":1966},[68,83670,2606],{"emptyLinePlaceholder":260},[68,83672,83673,83675],{"class":70,"line":1971},[68,83674,78944],{"class":74},[68,83676,15777],{"class":335},[68,83678,83679,83681,83683,83685],{"class":70,"line":1985},[68,83680,62226],{"class":82},[68,83682,51638],{"class":335},[68,83684,62231],{"class":82},[68,83686,1498],{"class":335},[68,83688,83689,83691,83693,83695],{"class":70,"line":1990},[68,83690,55085],{"class":82},[68,83692,51638],{"class":335},[68,83694,62019],{"class":82},[68,83696,1498],{"class":335},[68,83698,83699],{"class":70,"line":2783},[68,83700,2393],{"class":335},[68,83702,83703],{"class":70,"line":2797},[68,83704,2606],{"emptyLinePlaceholder":260},[68,83706,83707,83709,83711],{"class":70,"line":2805},[68,83708,78826],{"class":74},[68,83710,55816],{"class":51501},[68,83712,15777],{"class":335},[68,83714,83715,83717,83719,83721,83723],{"class":70,"line":2810},[68,83716,54972],{"class":82},[68,83718,51638],{"class":335},[68,83720,945],{"class":82},[68,83722,51693],{"class":331},[68,83724,1498],{"class":335},[68,83726,83727,83729,83731,83733,83735],{"class":70,"line":2816},[68,83728,54986],{"class":82},[68,83730,51638],{"class":335},[68,83732,945],{"class":82},[68,83734,51693],{"class":331},[68,83736,1498],{"class":335},[68,83738,83739,83741,83743,83745,83747],{"class":70,"line":2822},[68,83740,61951],{"class":82},[68,83742,51638],{"class":335},[68,83744,652],{"class":82},[68,83746,51693],{"class":331},[68,83748,1498],{"class":335},[68,83750,83751],{"class":70,"line":2827},[68,83752,2393],{"class":335},[68,83754,83755],{"class":70,"line":8153},[68,83756,2606],{"emptyLinePlaceholder":260},[68,83758,83759,83761,83763],{"class":70,"line":8177},[68,83760,78826],{"class":74},[68,83762,62505],{"class":74},[68,83764,15777],{"class":335},[68,83766,83767,83769,83771,83773,83775],{"class":70,"line":8182},[68,83768,54972],{"class":82},[68,83770,51638],{"class":335},[68,83772,1929],{"class":82},[68,83774,51693],{"class":331},[68,83776,1498],{"class":335},[68,83778,83779],{"class":70,"line":8188},[68,83780,2393],{"class":335},[68,83782,83783],{"class":70,"line":8215},[68,83784,2606],{"emptyLinePlaceholder":260},[68,83786,83787,83789,83791,83794],{"class":70,"line":8220},[68,83788,78826],{"class":74},[68,83790,62505],{"class":74},[68,83792,83793],{"class":74}," .tag",[68,83795,15777],{"class":335},[68,83797,83798,83800,83802,83804],{"class":70,"line":8226},[68,83799,55210],{"class":82},[68,83801,51638],{"class":335},[68,83803,61070],{"class":82},[68,83805,1498],{"class":335},[68,83807,83808,83810,83812,83814,83816],{"class":70,"line":8238},[68,83809,54896],{"class":82},[68,83811,51638],{"class":335},[68,83813,412],{"class":82},[68,83815,51693],{"class":331},[68,83817,1498],{"class":335},[68,83819,83820,83822,83824,83826,83828],{"class":70,"line":8250},[68,83821,55123],{"class":82},[68,83823,51638],{"class":335},[68,83825,831],{"class":82},[68,83827,51693],{"class":331},[68,83829,1498],{"class":335},[68,83831,83832,83834,83836,83838],{"class":70,"line":8262},[68,83833,57617],{"class":82},[68,83835,51638],{"class":335},[68,83837,62271],{"class":82},[68,83839,1498],{"class":335},[68,83841,83842],{"class":70,"line":9921},[68,83843,2393],{"class":335},[68,83845,83846],{"class":70,"line":9946},[68,83847,2606],{"emptyLinePlaceholder":260},[68,83849,83850,83852,83854],{"class":70,"line":9969},[68,83851,78826],{"class":74},[68,83853,79118],{"class":74},[68,83855,31667],{"class":335},[68,83857,83858,83860,83863],{"class":70,"line":9993},[68,83859,78826],{"class":74},[68,83861,83862],{"class":74}," .sub-total",[68,83864,15777],{"class":335},[68,83866,83867,83869,83871,83873,83875],{"class":70,"line":9998},[68,83868,55123],{"class":82},[68,83870,51638],{"class":335},[68,83872,983],{"class":82},[68,83874,51693],{"class":331},[68,83876,1498],{"class":335},[68,83878,83879,83881,83883,83885],{"class":70,"line":10003},[68,83880,57617],{"class":82},[68,83882,51638],{"class":335},[68,83884,79141],{"class":82},[68,83886,1498],{"class":335},[68,83888,83889,83891,83893,83895],{"class":70,"line":10008},[68,83890,62038],{"class":82},[68,83892,51638],{"class":335},[68,83894,551],{"class":82},[68,83896,1498],{"class":335},[68,83898,83899],{"class":70,"line":10017},[68,83900,2393],{"class":335},[68,83902,83903],{"class":70,"line":10022},[68,83904,2606],{"emptyLinePlaceholder":260},[68,83906,83907,83909,83911],{"class":70,"line":10028},[68,83908,78826],{"class":74},[68,83910,79158],{"class":74},[68,83912,31667],{"class":335},[68,83914,83915,83917,83920],{"class":70,"line":10049},[68,83916,78826],{"class":74},[68,83918,83919],{"class":74}," .sub-total::before",[68,83921,31667],{"class":335},[68,83923,83924,83927],{"class":70,"line":10055},[68,83925,83926],{"class":74},"    .amount::before",[68,83928,15777],{"class":335},[68,83930,83931,83933,83935,83937],{"class":70,"line":10069},[68,83932,79165],{"class":82},[68,83934,51638],{"class":335},[68,83936,79170],{"class":78},[68,83938,1498],{"class":335},[68,83940,83941,83943,83945,83947,83949],{"class":70,"line":10075},[68,83942,55123],{"class":82},[68,83944,51638],{"class":335},[68,83946,831],{"class":82},[68,83948,51693],{"class":331},[68,83950,1498],{"class":335},[68,83952,83953],{"class":70,"line":10102},[68,83954,2393],{"class":335},[68,83956,83957],{"class":70,"line":10111},[68,83958,2606],{"emptyLinePlaceholder":260},[68,83960,83961,83963,83966],{"class":70,"line":10117},[68,83962,78826],{"class":74},[68,83964,83965],{"class":74}," .spec",[68,83967,15777],{"class":335},[68,83969,83970,83972,83974,83976],{"class":70,"line":10125},[68,83971,62038],{"class":82},[68,83973,51638],{"class":335},[68,83975,412],{"class":82},[68,83977,1498],{"class":335},[68,83979,83980,83982,83984,83987],{"class":70,"line":10130},[68,83981,57617],{"class":82},[68,83983,51638],{"class":335},[68,83985,83986],{"class":82},"#888",[68,83988,1498],{"class":335},[68,83990,83991,83993,83995,83997,83999],{"class":70,"line":16809},[68,83992,55123],{"class":82},[68,83994,51638],{"class":335},[68,83996,882],{"class":82},[68,83998,51693],{"class":331},[68,84000,1498],{"class":335},[68,84002,84003,84005,84007,84009,84011],{"class":70,"line":16815},[68,84004,62201],{"class":82},[68,84006,51638],{"class":335},[68,84008,1033],{"class":82},[68,84010,51693],{"class":331},[68,84012,1498],{"class":335},[68,84014,84015],{"class":70,"line":16838},[68,84016,2393],{"class":335},[68,84018,84019],{"class":70,"line":16844},[68,84020,2606],{"emptyLinePlaceholder":260},[68,84022,84023,84025,84028],{"class":70,"line":16867},[68,84024,78826],{"class":74},[68,84026,84027],{"class":74}," .count",[68,84029,15777],{"class":335},[68,84031,84032,84034,84036,84038],{"class":70,"line":16881},[68,84033,62038],{"class":82},[68,84035,51638],{"class":335},[68,84037,551],{"class":82},[68,84039,1498],{"class":335},[68,84041,84042,84044,84046,84049],{"class":70,"line":16901},[68,84043,57617],{"class":82},[68,84045,51638],{"class":335},[68,84047,84048],{"class":82},"#aaa",[68,84050,1498],{"class":335},[68,84052,84053],{"class":70,"line":16907},[68,84054,2393],{"class":335},[68,84056,84057],{"class":70,"line":16918},[68,84058,2606],{"emptyLinePlaceholder":260},[68,84060,84061,84063],{"class":70,"line":16941},[68,84062,72676],{"class":74},[68,84064,15777],{"class":335},[68,84066,84067,84069,84071,84073,84075],{"class":70,"line":16963},[68,84068,54972],{"class":82},[68,84070,51638],{"class":335},[68,84072,78775],{"class":82},[68,84074,51693],{"class":331},[68,84076,1498],{"class":335},[68,84078,84079,84081,84083,84085,84087],{"class":70,"line":16968},[68,84080,54907],{"class":82},[68,84082,51638],{"class":335},[68,84084,525],{"class":82},[68,84086,51757],{"class":82},[68,84088,1498],{"class":335},[68,84090,84091,84093,84095,84097],{"class":70,"line":16974},[68,84092,55210],{"class":82},[68,84094,51638],{"class":335},[68,84096,51678],{"class":82},[68,84098,1498],{"class":335},[68,84100,84101,84103,84105,84107],{"class":70,"line":16988},[68,84102,55221],{"class":82},[68,84104,51638],{"class":335},[68,84106,51781],{"class":82},[68,84108,1498],{"class":335},[68,84110,84111,84114,84116,84118,84120,84122,84125],{"class":70,"line":17001},[68,84112,84113],{"class":82},"      border-top",[68,84115,51638],{"class":335},[68,84117,551],{"class":82},[68,84119,51693],{"class":331},[68,84121,51722],{"class":82},[68,84123,84124],{"class":82}," #4e4e4e",[68,84126,1498],{"class":335},[68,84128,84129,84131,84133,84135,84137],{"class":70,"line":17006},[68,84130,54896],{"class":82},[68,84132,51638],{"class":335},[68,84134,1033],{"class":82},[68,84136,51693],{"class":331},[68,84138,1498],{"class":335},[68,84140,84141],{"class":70,"line":17020},[68,84142,2393],{"class":335},[68,84144,84145],{"class":70,"line":17025},[68,84146,2606],{"emptyLinePlaceholder":260},[68,84148,84149,84151,84154],{"class":70,"line":17031},[68,84150,72676],{"class":74},[68,84152,84153],{"class":74}," .amount",[68,84155,15777],{"class":335},[68,84157,84158,84160,84162,84164,84166],{"class":70,"line":17036},[68,84159,55123],{"class":82},[68,84161,51638],{"class":335},[68,84163,983],{"class":82},[68,84165,51693],{"class":331},[68,84167,1498],{"class":335},[68,84169,84170,84172,84174,84176],{"class":70,"line":17050},[68,84171,57617],{"class":82},[68,84173,51638],{"class":335},[68,84175,79141],{"class":82},[68,84177,1498],{"class":335},[68,84179,84180,84182,84184,84186],{"class":70,"line":17055},[68,84181,62535],{"class":82},[68,84183,51638],{"class":335},[68,84185,51690],{"class":82},[68,84187,1498],{"class":335},[68,84189,84190,84192,84194,84196,84198],{"class":70,"line":17060},[68,84191,61951],{"class":82},[68,84193,51638],{"class":335},[68,84195,989],{"class":82},[68,84197,51693],{"class":331},[68,84199,1498],{"class":335},[68,84201,84202],{"class":70,"line":17074},[68,84203,2393],{"class":335},[68,84205,84206,84208,84210],{"class":70,"line":17086},[68,84207,52618],{"class":335},[68,84209,250],{"class":51501},[68,84211,51508],{"class":335},[68,84213,84214,84216,84218],{"class":70,"line":17091},[68,84215,51986],{"class":335},[68,84217,51535],{"class":51501},[68,84219,51508],{"class":335},[68,84221,84222],{"class":70,"line":17104},[68,84223,2606],{"emptyLinePlaceholder":260},[68,84225,84226,84228,84230],{"class":70,"line":17109},[68,84227,1243],{"class":335},[68,84229,52001],{"class":51501},[68,84231,51508],{"class":335},[68,84233,84234,84236,84238,84240,84242,84244],{"class":70,"line":17114},[68,84235,52345],{"class":335},[68,84237,51812],{"class":51501},[68,84239,53687],{"class":74},[68,84241,381],{"class":335},[68,84243,62809],{"class":78},[68,84245,51508],{"class":335},[68,84247,84248,84250,84252],{"class":70,"line":17119},[68,84249,52618],{"class":335},[68,84251,51812],{"class":51501},[68,84253,51508],{"class":335},[68,84255,84256,84258,84260,84262,84264,84266],{"class":70,"line":17132},[68,84257,52345],{"class":335},[68,84259,51812],{"class":51501},[68,84261,53687],{"class":74},[68,84263,381],{"class":335},[68,84265,62781],{"class":78},[68,84267,51508],{"class":335},[68,84269,84270,84272,84274,84277,84279,84281,84283,84286,84288,84290,84292,84294],{"class":70,"line":17137},[68,84271,51542],{"class":335},[68,84273,51812],{"class":51501},[68,84275,84276],{"class":335},">合计：\u003C",[68,84278,68],{"class":51501},[68,84280,53687],{"class":74},[68,84282,381],{"class":335},[68,84284,84285],{"class":78},"\"amount\"",[68,84287,55515],{"class":335},[68,84289,68],{"class":51501},[68,84291,55515],{"class":335},[68,84293,51812],{"class":51501},[68,84295,51508],{"class":335},[68,84297,84298,84300,84302],{"class":70,"line":32834},[68,84299,52618],{"class":335},[68,84301,51812],{"class":51501},[68,84303,51508],{"class":335},[68,84305,84306,84308,84310],{"class":70,"line":32840},[68,84307,52345],{"class":335},[68,84309,52014],{"class":51501},[68,84311,51508],{"class":335},[68,84313,84314,84316,84318,84320],{"class":70,"line":32846},[68,84315,11426],{"class":331},[68,84317,79578],{"class":82},[68,84319,13769],{"class":331},[68,84321,55648],{"class":335},[68,84323,84324],{"class":70,"line":32852},[68,84325,79587],{"class":335},[68,84327,84328,84330,84332],{"class":70,"line":32858},[68,84329,79592],{"class":335},[68,84331,79595],{"class":78},[68,84333,31667],{"class":335},[68,84335,84336,84338,84340],{"class":70,"line":32869},[68,84337,79602],{"class":335},[68,84339,79605],{"class":78},[68,84341,31667],{"class":335},[68,84343,84344,84346,84349],{"class":70,"line":32875},[68,84345,79612],{"class":335},[68,84347,84348],{"class":82},"289.9",[68,84350,31667],{"class":335},[68,84352,84353,84355,84357],{"class":70,"line":32895},[68,84354,79622],{"class":335},[68,84356,79625],{"class":78},[68,84358,31667],{"class":335},[68,84360,84361,84364,84366],{"class":70,"line":32901},[68,84362,84363],{"class":335},"        count: ",[68,84365,412],{"class":82},[68,84367,31667],{"class":335},[68,84369,84370,84373,84376],{"class":70,"line":32912},[68,84371,84372],{"class":335},"        spec: { color: ",[68,84374,84375],{"class":78},"'白色'",[68,84377,55805],{"class":335},[68,84379,84380],{"class":70,"line":32918},[68,84381,78093],{"class":335},[68,84383,84384],{"class":70,"line":32924},[68,84385,79587],{"class":335},[68,84387,84388,84390,84392],{"class":70,"line":32930},[68,84389,79592],{"class":335},[68,84391,79686],{"class":78},[68,84393,31667],{"class":335},[68,84395,84396,84398,84400],{"class":70,"line":32936},[68,84397,79602],{"class":335},[68,84399,79695],{"class":78},[68,84401,31667],{"class":335},[68,84403,84404,84406,84409],{"class":70,"line":32942},[68,84405,79612],{"class":335},[68,84407,84408],{"class":82},"109.8",[68,84410,31667],{"class":335},[68,84412,84413,84415,84417],{"class":70,"line":32948},[68,84414,79622],{"class":335},[68,84416,79713],{"class":78},[68,84418,31667],{"class":335},[68,84420,84421,84423,84425],{"class":70,"line":32954},[68,84422,84363],{"class":335},[68,84424,406],{"class":82},[68,84426,31667],{"class":335},[68,84428,84429,84432,84434,84436,84438],{"class":70,"line":32974},[68,84430,84431],{"class":335},"        spec: { size: ",[68,84433,82104],{"class":78},[68,84435,55665],{"class":335},[68,84437,82109],{"class":78},[68,84439,55805],{"class":335},[68,84441,84442],{"class":70,"line":32980},[68,84443,78093],{"class":335},[68,84445,84446],{"class":70,"line":32996},[68,84447,79587],{"class":335},[68,84449,84450,84452,84454],{"class":70,"line":33002},[68,84451,79592],{"class":335},[68,84453,79730],{"class":78},[68,84455,31667],{"class":335},[68,84457,84458,84460,84462],{"class":70,"line":33016},[68,84459,79602],{"class":335},[68,84461,79739],{"class":78},[68,84463,31667],{"class":335},[68,84465,84466,84468,84471],{"class":70,"line":33022},[68,84467,79612],{"class":335},[68,84469,84470],{"class":82},"488",[68,84472,31667],{"class":335},[68,84474,84475,84477,84479],{"class":70,"line":33037},[68,84476,79622],{"class":335},[68,84478,79757],{"class":78},[68,84480,31667],{"class":335},[68,84482,84483,84485,84487],{"class":70,"line":33043},[68,84484,84363],{"class":335},[68,84486,551],{"class":82},[68,84488,31667],{"class":335},[68,84490,84491,84493,84496,84499,84502],{"class":70,"line":33052},[68,84492,84372],{"class":335},[68,84494,84495],{"class":78},"'青色'",[68,84497,84498],{"class":335},", sum: ",[68,84500,84501],{"class":78},"'一大四小'",[68,84503,55805],{"class":335},[68,84505,84506],{"class":70,"line":33058},[68,84507,78093],{"class":335},[68,84509,84510],{"class":70,"line":33067},[68,84511,79587],{"class":335},[68,84513,84514,84516,84518],{"class":70,"line":33073},[68,84515,79592],{"class":335},[68,84517,79774],{"class":78},[68,84519,31667],{"class":335},[68,84521,84522,84524,84526],{"class":70,"line":33079},[68,84523,79602],{"class":335},[68,84525,79783],{"class":78},[68,84527,31667],{"class":335},[68,84529,84530,84532,84535],{"class":70,"line":33088},[68,84531,79612],{"class":335},[68,84533,84534],{"class":82},"139",[68,84536,31667],{"class":335},[68,84538,84539,84541,84543],{"class":70,"line":33094},[68,84540,79622],{"class":335},[68,84542,79801],{"class":78},[68,84544,31667],{"class":335},[68,84546,84547,84549,84551],{"class":70,"line":33105},[68,84548,84363],{"class":335},[68,84550,551],{"class":82},[68,84552,31667],{"class":335},[68,84554,84555,84557,84560,84562,84565],{"class":70,"line":33111},[68,84556,84431],{"class":335},[68,84558,84559],{"class":78},"'小号'",[68,84561,55665],{"class":335},[68,84563,84564],{"class":78},"'紫色'",[68,84566,55671],{"class":335},[68,84568,84569,84572],{"class":70,"line":33130},[68,84570,84571],{"class":335},"        gift: ",[68,84573,84574],{"class":78},"'50g茶叶,清洗球'\n",[68,84576,84577],{"class":70,"line":33136},[68,84578,52599],{"class":335},[68,84580,84581],{"class":70,"line":33147},[68,84582,53310],{"class":335},[68,84584,84585],{"class":70,"line":33153},[68,84586,84587],{"class":393},"    \u002F\u002F  1.根据数据渲染页面\n",[68,84589,84590,84592,84594,84596,84598,84600,84602,84604,84606,84608,84610,84612],{"class":70,"line":33173},[68,84591,52608],{"class":335},[68,84593,54600],{"class":74},[68,84595,336],{"class":335},[68,84597,80102],{"class":78},[68,84599,74450],{"class":335},[68,84601,381],{"class":331},[68,84603,80249],{"class":335},[68,84605,74245],{"class":74},[68,84607,336],{"class":335},[68,84609,79996],{"class":5421},[68,84611,79999],{"class":331},[68,84613,15777],{"class":335},[68,84615,84616],{"class":70,"line":33189},[68,84617,84618],{"class":393},"      \u002F\u002F 对象解构\n",[68,84620,84621,84623,84625,84627,84629,84631,84633,84636,84638,84640,84642,84645,84647,84650,84652,84654],{"class":70,"line":33195},[68,84622,58429],{"class":331},[68,84624,80008],{"class":335},[68,84626,80021],{"class":82},[68,84628,12640],{"class":335},[68,84630,80011],{"class":82},[68,84632,12640],{"class":335},[68,84634,84635],{"class":82},"count",[68,84637,12640],{"class":335},[68,84639,80016],{"class":82},[68,84641,12640],{"class":335},[68,84643,84644],{"class":82},"spec",[68,84646,12640],{"class":335},[68,84648,84649],{"class":82},"gift",[68,84651,80024],{"class":335},[68,84653,381],{"class":331},[68,84655,80029],{"class":335},[68,84657,84658],{"class":70,"line":33209},[68,84659,84660],{"class":393},"      \u002F\u002F 规格文字模块处理\n",[68,84662,84663,84665,84668,84670,84672,84674,84676,84678,84680,84682],{"class":70,"line":33215},[68,84664,58429],{"class":331},[68,84666,84667],{"class":82}," text",[68,84669,13769],{"class":331},[68,84671,82139],{"class":335},[68,84673,82142],{"class":74},[68,84675,82145],{"class":335},[68,84677,74424],{"class":74},[68,84679,336],{"class":335},[68,84681,82152],{"class":78},[68,84683,342],{"class":335},[68,84685,84686],{"class":70,"line":33221},[68,84687,84688],{"class":393},"      \u002F\u002F 处理赠品模块\n",[68,84690,84691,84693,84695,84697,84700,84702,84704,84706,84708,84711,84713,84715,84717,84719,84721,84724,84726,84729,84731,84733,84735,84737,84739,84741],{"class":70,"line":33232},[68,84692,58429],{"class":331},[68,84694,74120],{"class":82},[68,84696,13769],{"class":331},[68,84698,84699],{"class":335}," gift ",[68,84701,1319],{"class":331},[68,84703,83313],{"class":335},[68,84705,83316],{"class":74},[68,84707,336],{"class":335},[68,84709,84710],{"class":78},"','",[68,84712,31027],{"class":335},[68,84714,74245],{"class":74},[68,84716,336],{"class":335},[68,84718,79996],{"class":5421},[68,84720,79999],{"class":331},[68,84722,84723],{"class":78}," `\u003Cspan class=\"tag\">【赠品】${",[68,84725,79996],{"class":335},[68,84727,84728],{"class":78},"}\u003C\u002Fspan>`",[68,84730,31027],{"class":335},[68,84732,74424],{"class":74},[68,84734,336],{"class":335},[68,84736,74429],{"class":78},[68,84738,13919],{"class":335},[68,84740,1192],{"class":331},[68,84742,70305],{"class":78},[68,84744,84745],{"class":70,"line":33238},[68,84746,84747],{"class":393},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[68,84749,84750,84752,84755,84757,84760,84762,84764,84766,84769,84771,84773,84775,84778,84780,84782],{"class":70,"line":33244},[68,84751,58429],{"class":331},[68,84753,84754],{"class":82}," subtotal",[68,84756,13769],{"class":331},[68,84758,84759],{"class":335}," ((price ",[68,84761,788],{"class":331},[68,84763,5959],{"class":82},[68,84765,6723],{"class":331},[68,84767,84768],{"class":335}," count) ",[68,84770,917],{"class":331},[68,84772,5959],{"class":82},[68,84774,31027],{"class":335},[68,84776,84777],{"class":74},"toFixed",[68,84779,336],{"class":335},[68,84781,412],{"class":82},[68,84783,342],{"class":335},[68,84785,84786],{"class":70,"line":33254},[68,84787,2606],{"emptyLinePlaceholder":260},[68,84789,84790,84792],{"class":70,"line":33260},[68,84791,74183],{"class":331},[68,84793,70369],{"class":78},[68,84795,84796],{"class":70,"line":33271},[68,84797,84798],{"class":78},"        \u003Cdiv class=\"item\">\n",[68,84800,84801,84804,84806],{"class":70,"line":33277},[68,84802,84803],{"class":78},"          \u003Cimg src=\"${",[68,84805,80021],{"class":335},[68,84807,80053],{"class":78},[68,84809,84810,84813,84815,84818,84820],{"class":70,"line":33287},[68,84811,84812],{"class":78},"          \u003Cp class=\"name\">${",[68,84814,80011],{"class":335},[68,84816,84817],{"class":78},"}${",[68,84819,1507],{"class":335},[68,84821,80063],{"class":78},[68,84823,84824,84827,84829],{"class":70,"line":33292},[68,84825,84826],{"class":78},"          \u003Cp class=\"spec\">${",[68,84828,5393],{"class":335},[68,84830,80063],{"class":78},[68,84832,84833,84836,84838,84840,84842,84844,84846,84848],{"class":70,"line":33298},[68,84834,84835],{"class":78},"          \u003Cp class=\"price\">${",[68,84837,80016],{"class":335},[68,84839,891],{"class":78},[68,84841,84777],{"class":74},[68,84843,336],{"class":78},[68,84845,412],{"class":82},[68,84847,762],{"class":78},[68,84849,80063],{"class":78},[68,84851,84852,84855,84857],{"class":70,"line":33347},[68,84853,84854],{"class":78},"          \u003Cp class=\"count\">x${",[68,84856,84635],{"class":335},[68,84858,80063],{"class":78},[68,84860,84861,84864,84867],{"class":70,"line":33394},[68,84862,84863],{"class":78},"          \u003Cp class=\"sub-total\">${",[68,84865,84866],{"class":335},"subtotal",[68,84868,80063],{"class":78},[68,84870,84871],{"class":70,"line":33399},[68,84872,84873],{"class":78},"        \u003C\u002Fdiv> \n",[68,84875,84876],{"class":70,"line":33405},[68,84877,84878],{"class":78},"             `\n",[68,84880,84881,84884,84886,84888,84890],{"class":70,"line":33424},[68,84882,84883],{"class":335},"    }).",[68,84885,74424],{"class":74},[68,84887,336],{"class":335},[68,84889,74429],{"class":78},[68,84891,342],{"class":335},[68,84893,84894],{"class":70,"line":33430},[68,84895,84896],{"class":393},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[68,84898,84899,84901,84903,84905,84907,84910,84912,84915,84917,84919,84921,84924,84927,84929,84932,84934,84936,84938,84941,84943,84945,84947,84949],{"class":70,"line":33450},[68,84900,11426],{"class":331},[68,84902,62986],{"class":82},[68,84904,13769],{"class":331},[68,84906,80249],{"class":335},[68,84908,84909],{"class":74},"reduce",[68,84911,2582],{"class":335},[68,84913,84914],{"class":5421},"prev",[68,84916,12640],{"class":335},[68,84918,79996],{"class":5421},[68,84920,13919],{"class":335},[68,84922,84923],{"class":331},"=>",[68,84925,84926],{"class":335}," prev ",[68,84928,814],{"class":331},[68,84930,84931],{"class":335}," (item.price ",[68,84933,788],{"class":331},[68,84935,5959],{"class":82},[68,84937,6723],{"class":331},[68,84939,84940],{"class":335}," item.count) ",[68,84942,917],{"class":331},[68,84944,5959],{"class":82},[68,84946,12640],{"class":335},[68,84948,525],{"class":82},[68,84950,342],{"class":335},[68,84952,84953,84955,84957,84959,84962,84964,84966,84969,84971,84973,84975],{"class":70,"line":33456},[68,84954,52608],{"class":335},[68,84956,54600],{"class":74},[68,84958,336],{"class":335},[68,84960,84961],{"class":78},"'.amount'",[68,84963,74450],{"class":335},[68,84965,381],{"class":331},[68,84967,84968],{"class":335}," total.",[68,84970,84777],{"class":74},[68,84972,336],{"class":335},[68,84974,412],{"class":82},[68,84976,342],{"class":335},[68,84978,84979,84981,84983],{"class":70,"line":33462},[68,84980,52618],{"class":335},[68,84982,52014],{"class":51501},[68,84984,51508],{"class":335},[68,84986,84987,84989,84991],{"class":70,"line":33472},[68,84988,51986],{"class":335},[68,84990,52001],{"class":51501},[68,84992,51508],{"class":335},[68,84994,84995],{"class":70,"line":33477},[68,84996,2606],{"emptyLinePlaceholder":260},[68,84998,84999,85001,85003],{"class":70,"line":33483},[68,85000,51986],{"class":335},[68,85002,50836],{"class":51501},[68,85004,51508],{"class":335},[14,85006,85008],{"id":85007},"_411-编程思想","4.11 编程思想",[301,85010,85012],{"id":85011},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85014,85015,85018],{},[483,85016,85017],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85020,85021],{},"调用就可以了",[19,85023,85024],{},[48,85025],{"alt":63,"src":85026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[301,85028,85030],{"id":85029},"_4112-面向对象","4.11.2 面向对象",[19,85032,85033],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85035,85036],{},[48,85037],{"alt":63,"src":85038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85040,85041],{},"面向对象的特性：",[42,85043,85044,85047,85050],{},[26,85045,85046],{},"封装性",[26,85048,85049],{},"继承性",[26,85051,85052],{},"多态性",[301,85054,85056],{"id":85055},"_4113-两者比较","4.11.3 两者比较",[19,85058,85059],{},[48,85060],{"alt":63,"src":85061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85063,85065],{"id":85064},"_412-构造函数回顾","4.12 构造函数回顾",[19,85067,85068],{},[48,85069],{"alt":63,"src":85070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85072,85073],{},[48,85074],{"alt":63,"src":85075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85077,85078],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85080,85081],{},[48,85082],{"alt":63,"src":85083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85085,85087],{"id":85086},"_413-原型","4.13 原型",[301,85089,85091],{"id":85090},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85093,85094],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85096,85097],{},[48,85098],{"alt":63,"src":85099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85101,85102],{},[48,85103],{"alt":63,"src":85104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85106,85107],{},"原型是构造函数的属性，它也是一个对象",[19,85109,85110],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85112,85113],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[58,85115,85117],{"className":53268,"code":85116,"language":53270,"meta":63,"style":63},"\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",[65,85118,85119,85127,85132,85140,85145,85150,85155,85160,85165,85169,85173,85177,85182,85187,85191,85196,85201,85206,85211,85216,85220,85228],{"__ignoreMap":63},[68,85120,85121,85123,85125],{"class":70,"line":71},[68,85122,1243],{"class":335},[68,85124,52001],{"class":51501},[68,85126,51508],{"class":335},[68,85128,85129],{"class":70,"line":92},[68,85130,85131],{"class":393},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[68,85133,85134,85136,85138],{"class":70,"line":1387},[68,85135,52345],{"class":335},[68,85137,52014],{"class":51501},[68,85139,51508],{"class":335},[68,85141,85142],{"class":70,"line":1402},[68,85143,85144],{"class":335},"    function Star(uname, age) {\n",[68,85146,85147],{"class":70,"line":1408},[68,85148,85149],{"class":335},"      this.uname = uname,\n",[68,85151,85152],{"class":70,"line":1422},[68,85153,85154],{"class":335},"        this.age = age\n",[68,85156,85157],{"class":70,"line":1428},[68,85158,85159],{"class":335},"      \u002F\u002F this.sing = function () {\n",[68,85161,85162],{"class":70,"line":1519},[68,85163,85164],{"class":335},"      \u002F\u002F   console.log('唱歌')\n",[68,85166,85167],{"class":70,"line":1525},[68,85168,2606],{"emptyLinePlaceholder":260},[68,85170,85171],{"class":70,"line":1537},[68,85172,60238],{"class":335},[68,85174,85175],{"class":70,"line":1819},[68,85176,2393],{"class":335},[68,85178,85179],{"class":70,"line":1824},[68,85180,85181],{"class":335},"    Star.prototype.sing = function () {\n",[68,85183,85184],{"class":70,"line":1830},[68,85185,85186],{"class":335},"      console.log('唱歌')\n",[68,85188,85189],{"class":70,"line":1835},[68,85190,2393],{"class":335},[68,85192,85193],{"class":70,"line":1849},[68,85194,85195],{"class":335},"    \u002F\u002F console.dir(Star.prototype)\n",[68,85197,85198],{"class":70,"line":1854},[68,85199,85200],{"class":335},"    const pink = new Star('pink', 18)\n",[68,85202,85203],{"class":70,"line":1860},[68,85204,85205],{"class":335},"    const red = new Star('red', 20)\n",[68,85207,85208],{"class":70,"line":1881},[68,85209,85210],{"class":335},"    pink.sing()\n",[68,85212,85213],{"class":70,"line":1886},[68,85214,85215],{"class":335},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[68,85217,85218],{"class":70,"line":1900},[68,85219,2606],{"emptyLinePlaceholder":260},[68,85221,85222,85224,85226],{"class":70,"line":1905},[68,85223,52618],{"class":335},[68,85225,52014],{"class":51501},[68,85227,51508],{"class":335},[68,85229,85230,85232,85234],{"class":70,"line":1934},[68,85231,51986],{"class":335},[68,85233,52001],{"class":51501},[68,85235,51508],{"class":335},[19,85237,85238],{},[48,85239],{"alt":63,"src":85240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[58,85242,85244],{"className":53268,"code":85243,"language":53270,"meta":63,"style":63},"\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",[65,85245,85246,85254,85262,85267,85272,85277,85282,85286,85291,85296,85301,85305,85310,85314,85318,85323,85327,85335],{"__ignoreMap":63},[68,85247,85248,85250,85252],{"class":70,"line":71},[68,85249,1243],{"class":335},[68,85251,52001],{"class":51501},[68,85253,51508],{"class":335},[68,85255,85256,85258,85260],{"class":70,"line":92},[68,85257,52345],{"class":335},[68,85259,52014],{"class":51501},[68,85261,51508],{"class":335},[68,85263,85264],{"class":70,"line":1387},[68,85265,85266],{"class":335},"    let that\n",[68,85268,85269],{"class":70,"line":1402},[68,85270,85271],{"class":335},"    function Star(uname) {\n",[68,85273,85274],{"class":70,"line":1408},[68,85275,85276],{"class":335},"      this.uname = uname\n",[68,85278,85279],{"class":70,"line":1422},[68,85280,85281],{"class":335},"      that = this\n",[68,85283,85284],{"class":70,"line":1428},[68,85285,2393],{"class":335},[68,85287,85288],{"class":70,"line":1519},[68,85289,85290],{"class":335},"    \u002F\u002F 实例对象是 ldh\n",[68,85292,85293],{"class":70,"line":1525},[68,85294,85295],{"class":335},"    const ldh = new Star('刘德华')\n",[68,85297,85298],{"class":70,"line":1537},[68,85299,85300],{"class":335},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[68,85302,85303],{"class":70,"line":1819},[68,85304,2606],{"emptyLinePlaceholder":260},[68,85306,85307],{"class":70,"line":1824},[68,85308,85309],{"class":335},"    Star.sing = function () {\n",[68,85311,85312],{"class":70,"line":1830},[68,85313,85186],{"class":335},[68,85315,85316],{"class":70,"line":1835},[68,85317,2393],{"class":335},[68,85319,85320],{"class":70,"line":1849},[68,85321,85322],{"class":335},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[68,85324,85325],{"class":70,"line":1854},[68,85326,2606],{"emptyLinePlaceholder":260},[68,85328,85329,85331,85333],{"class":70,"line":1860},[68,85330,52618],{"class":335},[68,85332,52014],{"class":51501},[68,85334,51508],{"class":335},[68,85336,85337,85339,85341],{"class":70,"line":1881},[68,85338,51986],{"class":335},[68,85340,52001],{"class":51501},[68,85342,51508],{"class":335},[19,85344,85345],{},"构造函数的this指向的是实例对象；",[19,85347,85348],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[301,85350,85352],{"id":85351},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85354,85355],{},[48,85356],{"alt":63,"src":85357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[58,85359,85361],{"className":53268,"code":85360,"language":53270,"meta":63,"style":63},"\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",[65,85362,85363,85371,85379,85384,85389,85394,85399,85404,85409,85414,85419,85424,85429,85433,85438,85443,85448,85453,85457,85462,85467,85472,85477,85481,85486,85491,85496,85501,85505,85510,85514,85522],{"__ignoreMap":63},[68,85364,85365,85367,85369],{"class":70,"line":71},[68,85366,1243],{"class":335},[68,85368,52001],{"class":51501},[68,85370,51508],{"class":335},[68,85372,85373,85375,85377],{"class":70,"line":92},[68,85374,52345],{"class":335},[68,85376,52014],{"class":51501},[68,85378,51508],{"class":335},[68,85380,85381],{"class":70,"line":1387},[68,85382,85383],{"class":335},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[68,85385,85386],{"class":70,"line":1402},[68,85387,85388],{"class":335},"    const arr = [1, 2, 3]\n",[68,85390,85391],{"class":70,"line":1408},[68,85392,85393],{"class":335},"    \u002F\u002F 自己定义数组的扩展方法\n",[68,85395,85396],{"class":70,"line":1422},[68,85397,85398],{"class":335},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[68,85400,85401],{"class":70,"line":1428},[68,85402,85403],{"class":335},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[68,85405,85406],{"class":70,"line":1519},[68,85407,85408],{"class":335},"    \u002F\u002F ①.最大值\n",[68,85410,85411],{"class":70,"line":1525},[68,85412,85413],{"class":335},"    Array.prototype.max = function () {\n",[68,85415,85416],{"class":70,"line":1537},[68,85417,85418],{"class":335},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[68,85420,85421],{"class":70,"line":1819},[68,85422,85423],{"class":335},"      return Math.max(...this)\n",[68,85425,85426],{"class":70,"line":1824},[68,85427,85428],{"class":335},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[68,85430,85431],{"class":70,"line":1830},[68,85432,2393],{"class":335},[68,85434,85435],{"class":70,"line":1835},[68,85436,85437],{"class":335},"    console.log(arr.max())\n",[68,85439,85440],{"class":70,"line":1849},[68,85441,85442],{"class":335},"    \u002F\u002F ②最小值\n",[68,85444,85445],{"class":70,"line":1854},[68,85446,85447],{"class":335},"    Array.prototype.min = function () {\n",[68,85449,85450],{"class":70,"line":1860},[68,85451,85452],{"class":335},"      return Math.min(...this)\n",[68,85454,85455],{"class":70,"line":1881},[68,85456,2393],{"class":335},[68,85458,85459],{"class":70,"line":1886},[68,85460,85461],{"class":335},"    console.log(arr.min())\n",[68,85463,85464],{"class":70,"line":1900},[68,85465,85466],{"class":335},"    \u002F\u002F③求和\n",[68,85468,85469],{"class":70,"line":1905},[68,85470,85471],{"class":335},"    Array.prototype.sum = function () {\n",[68,85473,85474],{"class":70,"line":1934},[68,85475,85476],{"class":335},"      return this.reduce((prev, current) => prev + current, 0)\n",[68,85478,85479],{"class":70,"line":1939},[68,85480,2393],{"class":335},[68,85482,85483],{"class":70,"line":1956},[68,85484,85485],{"class":335},"    console.log(arr.sum())\n",[68,85487,85488],{"class":70,"line":1961},[68,85489,85490],{"class":335},"    \u002F\u002F ③排序\n",[68,85492,85493],{"class":70,"line":1966},[68,85494,85495],{"class":335},"    Array.prototype.rever = function () {\n",[68,85497,85498],{"class":70,"line":1971},[68,85499,85500],{"class":335},"      return this.reverse()\n",[68,85502,85503],{"class":70,"line":1985},[68,85504,2393],{"class":335},[68,85506,85507],{"class":70,"line":1990},[68,85508,85509],{"class":335},"    console.log(arr.rever())\n",[68,85511,85512],{"class":70,"line":2783},[68,85513,2606],{"emptyLinePlaceholder":260},[68,85515,85516,85518,85520],{"class":70,"line":2797},[68,85517,52618],{"class":335},[68,85519,52014],{"class":51501},[68,85521,51508],{"class":335},[68,85523,85524,85526,85528],{"class":70,"line":2805},[68,85525,51986],{"class":335},[68,85527,52001],{"class":51501},[68,85529,51508],{"class":335},[19,85531,85532],{},[48,85533],{"alt":63,"src":85534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[301,85536,85538],{"id":85537},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85540,85541],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85543,85544],{},[48,85545],{"alt":63,"src":85546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[58,85548,85550],{"className":53268,"code":85549,"language":53270,"meta":63,"style":63},"\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",[65,85551,85552,85560,85568,85573,85578,85582,85587,85592,85597,85605],{"__ignoreMap":63},[68,85553,85554,85556,85558],{"class":70,"line":71},[68,85555,1243],{"class":335},[68,85557,52001],{"class":51501},[68,85559,51508],{"class":335},[68,85561,85562,85564,85566],{"class":70,"line":92},[68,85563,52345],{"class":335},[68,85565,52014],{"class":51501},[68,85567,51508],{"class":335},[68,85569,85570],{"class":70,"line":1387},[68,85571,85572],{"class":335},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[68,85574,85575],{"class":70,"line":1402},[68,85576,85577],{"class":335},"    function Star() {\n",[68,85579,85580],{"class":70,"line":1408},[68,85581,2393],{"class":335},[68,85583,85584],{"class":70,"line":1422},[68,85585,85586],{"class":335},"    const ldh = new Star()\n",[68,85588,85589],{"class":70,"line":1428},[68,85590,85591],{"class":335},"    console.log(Star.prototype)\n",[68,85593,85594],{"class":70,"line":1519},[68,85595,85596],{"class":335},"    console.log(Star.prototype.constructor === Star)\n",[68,85598,85599,85601,85603],{"class":70,"line":1525},[68,85600,52618],{"class":335},[68,85602,52014],{"class":51501},[68,85604,51508],{"class":335},[68,85606,85607,85609,85611],{"class":70,"line":1537},[68,85608,51986],{"class":335},[68,85610,52001],{"class":51501},[68,85612,51508],{"class":335},[19,85614,85615],{},[48,85616],{"alt":63,"src":85617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85619,85620],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[58,85622,85624],{"className":53268,"code":85623,"language":53270,"meta":63,"style":63},"  \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",[65,85625,85626,85634,85638,85642,85646,85651,85656,85661,85665,85670,85675,85680,85685,85690,85695,85699,85703,85708,85713,85718,85722,85727,85732,85736,85740,85744],{"__ignoreMap":63},[68,85627,85628,85630,85632],{"class":70,"line":71},[68,85629,52345],{"class":335},[68,85631,52014],{"class":51501},[68,85633,51508],{"class":335},[68,85635,85636],{"class":70,"line":92},[68,85637,85572],{"class":335},[68,85639,85640],{"class":70,"line":1387},[68,85641,85577],{"class":335},[68,85643,85644],{"class":70,"line":1402},[68,85645,2393],{"class":335},[68,85647,85648],{"class":70,"line":1408},[68,85649,85650],{"class":335},"    \u002F\u002F const ldh = new Star()\n",[68,85652,85653],{"class":70,"line":1422},[68,85654,85655],{"class":335},"    \u002F\u002F console.log(Star.prototype)\n",[68,85657,85658],{"class":70,"line":1428},[68,85659,85660],{"class":335},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[68,85662,85663],{"class":70,"line":1519},[68,85664,2606],{"emptyLinePlaceholder":260},[68,85666,85667],{"class":70,"line":1525},[68,85668,85669],{"class":335},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[68,85671,85672],{"class":70,"line":1537},[68,85673,85674],{"class":335},"    \u002F\u002F Star.prototype.sing = function () {\n",[68,85676,85677],{"class":70,"line":1819},[68,85678,85679],{"class":335},"    \u002F\u002F   console.log('唱歌')\n",[68,85681,85682],{"class":70,"line":1824},[68,85683,85684],{"class":335},"    \u002F\u002F }\n",[68,85686,85687],{"class":70,"line":1830},[68,85688,85689],{"class":335},"    \u002F\u002F Star.prototype.dance = function () {\n",[68,85691,85692],{"class":70,"line":1835},[68,85693,85694],{"class":335},"    \u002F\u002F   console.log('跳舞')\n",[68,85696,85697],{"class":70,"line":1849},[68,85698,85684],{"class":335},[68,85700,85701],{"class":70,"line":1854},[68,85702,85591],{"class":335},[68,85704,85705],{"class":70,"line":1860},[68,85706,85707],{"class":335},"    Star.prototype = {\n",[68,85709,85710],{"class":70,"line":1881},[68,85711,85712],{"class":335},"      sing: function () {\n",[68,85714,85715],{"class":70,"line":1886},[68,85716,85717],{"class":335},"        console.log('唱歌')\n",[68,85719,85720],{"class":70,"line":1900},[68,85721,78093],{"class":335},[68,85723,85724],{"class":70,"line":1905},[68,85725,85726],{"class":335},"      dance: function () {\n",[68,85728,85729],{"class":70,"line":1934},[68,85730,85731],{"class":335},"        console.log('跳舞')\n",[68,85733,85734],{"class":70,"line":1939},[68,85735,52599],{"class":335},[68,85737,85738],{"class":70,"line":1956},[68,85739,2393],{"class":335},[68,85741,85742],{"class":70,"line":1961},[68,85743,85591],{"class":335},[68,85745,85746,85748,85750],{"class":70,"line":1966},[68,85747,52618],{"class":335},[68,85749,52014],{"class":51501},[68,85751,51508],{"class":335},[19,85753,85754],{},"进行输出结果后会发现：",[19,85756,85757],{},[48,85758],{"alt":63,"src":85759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85761,85762],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85764,85765],{},"所以，要重新指回创造这个原型对象的构造函数",[58,85767,85769],{"className":71414,"code":85768,"language":71416,"meta":63,"style":63},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[65,85770,85771,85785,85790,85795,85806,85819,85824,85835,85849,85853],{"__ignoreMap":63},[68,85772,85773,85776,85778,85781,85783],{"class":70,"line":71},[68,85774,85775],{"class":82},"Star",[68,85777,891],{"class":335},[68,85779,85780],{"class":82},"prototype",[68,85782,13769],{"class":331},[68,85784,15777],{"class":335},[68,85786,85787],{"class":70,"line":92},[68,85788,85789],{"class":393},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[68,85791,85792],{"class":70,"line":1387},[68,85793,85794],{"class":335},"  constructor: Star,\n",[68,85796,85797,85800,85802,85804],{"class":70,"line":1402},[68,85798,85799],{"class":74},"  sing",[68,85801,51638],{"class":335},[68,85803,54650],{"class":331},[68,85805,54653],{"class":335},[68,85807,85808,85810,85812,85814,85817],{"class":70,"line":1408},[68,85809,73954],{"class":335},[68,85811,58448],{"class":74},[68,85813,336],{"class":335},[68,85815,85816],{"class":78},"'唱歌'",[68,85818,342],{"class":335},[68,85820,85821],{"class":70,"line":1422},[68,85822,85823],{"class":335},"   },\n",[68,85825,85826,85829,85831,85833],{"class":70,"line":1428},[68,85827,85828],{"class":74},"   dance",[68,85830,51638],{"class":335},[68,85832,54650],{"class":331},[68,85834,54653],{"class":335},[68,85836,85837,85840,85842,85844,85847],{"class":70,"line":1519},[68,85838,85839],{"class":335},"     console.",[68,85841,58448],{"class":74},[68,85843,336],{"class":335},[68,85845,85846],{"class":78},"'跳舞'",[68,85848,342],{"class":335},[68,85850,85851],{"class":70,"line":1525},[68,85852,4515],{"class":335},[68,85854,85855],{"class":70,"line":1537},[68,85856,1772],{"class":335},[19,85858,85859],{},[48,85860],{"alt":63,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85863,85864],{},"总结1：",[19,85866,85867],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85869,85870],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85872,85873],{},"constructor指的是他的来源",[19,85875,85876],{},[48,85877],{"alt":63,"src":85878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85880,85881],{},[48,85882],{"alt":63,"src":85883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85885,85886],{},"总结2：",[19,85888,85889],{},[48,85890],{"alt":63,"src":85891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85893,85894],{},[48,85895],{"alt":63,"src":85896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85898,85899],{},[48,85900],{"alt":63,"src":85901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[301,85903,85905],{"id":85904},"_4134-对象原型","4.13.4 对象原型",[19,85907,85908],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85910,85911],{},"对象原型就是__proto__这个属性",[19,85913,85914],{},[48,85915],{"alt":63,"src":85916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85918,85919],{},[48,85920],{"alt":63,"src":85921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85923,85924],{},[48,85925],{"alt":63,"src":85926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85928,85929],{},[48,85930],{"alt":63,"src":85931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[58,85933,85935],{"className":53268,"code":85934,"language":53270,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[65,85936,85937,85945,85953,85957,85961,85965,85970,85978],{"__ignoreMap":63},[68,85938,85939,85941,85943],{"class":70,"line":71},[68,85940,1243],{"class":335},[68,85942,52001],{"class":51501},[68,85944,51508],{"class":335},[68,85946,85947,85949,85951],{"class":70,"line":92},[68,85948,52345],{"class":335},[68,85950,52014],{"class":51501},[68,85952,51508],{"class":335},[68,85954,85955],{"class":70,"line":1387},[68,85956,85577],{"class":335},[68,85958,85959],{"class":70,"line":1402},[68,85960,2393],{"class":335},[68,85962,85963],{"class":70,"line":1408},[68,85964,85586],{"class":335},[68,85966,85967],{"class":70,"line":1422},[68,85968,85969],{"class":335},"    console.log(ldh)\n",[68,85971,85972,85974,85976],{"class":70,"line":1428},[68,85973,52618],{"class":335},[68,85975,52014],{"class":51501},[68,85977,51508],{"class":335},[68,85979,85980,85982,85984],{"class":70,"line":1519},[68,85981,51986],{"class":335},[68,85983,52001],{"class":51501},[68,85985,51508],{"class":335},[19,85987,85988],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85990,85991],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85993,85994],{},[48,85995],{"alt":63,"src":85996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85998,85999],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86001,86002],{},"对象原型指向原型对象",[19,86004,86005],{},[48,86006],{"alt":63,"src":86007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86009,86010],{},[48,86011],{"alt":63,"src":86012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86014,86015],{},[48,86016],{"alt":63,"src":86017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[301,86019,86021],{"id":86020},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86023,86024],{},[48,86025],{"alt":63,"src":86026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[23,86028,86029,86032,86035,86038],{},[26,86030,86031],{},"构造函数通过new的形式实例化得到实例对象",[26,86033,86034],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[26,86036,86037],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[26,86039,86040],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86042,86043],{},[48,86044],{"alt":63,"src":86045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86047,86048],{},"题目梳理：",[19,86050,86051],{},[48,86052],{"alt":63,"src":86053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[301,86055,86057],{"id":86056},"_4136-原型继承","4.13.6 原型继承",[19,86059,86060],{},[48,86061],{"alt":63,"src":86062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86064,86065],{},[48,86066],{"alt":63,"src":86067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86069,86070],{},[48,86071],{"alt":63,"src":86072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86074,86075],{},[48,86076],{"alt":63,"src":86077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86079,86080],{},[48,86081],{"alt":63,"src":86082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86084,86085],{},[48,86086],{"alt":63,"src":86087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86089,86090],{},[48,86091],{"alt":63,"src":86092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86094,86095],{},[48,86096],{"alt":63,"src":86097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86099,86100],{},"回顾：构造函数每次new得到对象都是不同的",[301,86102,86104],{"id":86103},"_4137-原型链","4.13.7 原型链",[19,86106,86107],{},[48,86108],{"alt":63,"src":86109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86111,86112],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86114,86115],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86117,86118],{},"大哥是Object",[19,86120,86121],{},[48,86122],{"alt":63,"src":86123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86125,86126],{},[48,86127],{"alt":63,"src":86128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86130,86131],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86133,86134],{},"万物皆对象",[301,86136,86138],{"id":86137},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86140,86141],{},"模态框",[19,86143,86144],{},"以后遇见这个效果直接使用这个就行",[19,86146,86147],{},[48,86148],{"alt":63,"src":86149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86151,86152],{},[48,86153],{"alt":63,"src":86154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86156,86157],{},[48,86158],{"alt":63,"src":86159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86161,86162],{},[48,86163],{"alt":63,"src":86164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86166,86167],{},"补充知识点：",[23,86169,86170],{},[26,86171,86172],{},"append()",[19,86174,86175],{},[48,86176],{"alt":63,"src":86177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[58,86179,86181],{"className":50834,"code":86180,"language":50836,"meta":63,"style":63},"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",[65,86182,86183,86188,86193,86198,86202,86206,86210,86215,86220,86225,86229],{"__ignoreMap":63},[68,86184,86185],{"class":70,"line":71},[68,86186,86187],{"class":335},"append(param1)\n",[68,86189,86190],{"class":70,"line":92},[68,86191,86192],{"class":335},"append(param1, param2)\n",[68,86194,86195],{"class":70,"line":1387},[68,86196,86197],{"class":335},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[68,86199,86200],{"class":70,"line":1402},[68,86201,2606],{"emptyLinePlaceholder":260},[68,86203,86204],{"class":70,"line":1408},[68,86205,2606],{"emptyLinePlaceholder":260},[68,86207,86208],{"class":70,"line":1422},[68,86209,2606],{"emptyLinePlaceholder":260},[68,86211,86212],{"class":70,"line":1428},[68,86213,86214],{"class":335},"let div = document.createElement(\"div\");\n",[68,86216,86217],{"class":70,"line":1519},[68,86218,86219],{"class":335},"let p = document.createElement(\"p\");\n",[68,86221,86222],{"class":70,"line":1525},[68,86223,86224],{"class":335},"div.append(p);\n",[68,86226,86227],{"class":70,"line":1537},[68,86228,2606],{"emptyLinePlaceholder":260},[68,86230,86231,86234,86236],{"class":70,"line":1819},[68,86232,86233],{"class":335},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[68,86235,19],{"class":51501},[68,86237,86238],{"class":335},"> ]\n",[23,86240,86241],{"start":92},[26,86242,86243],{},"remove()",[19,86245,86246],{},"自己删自己",[19,86248,86249],{},[48,86250],{"alt":63,"src":86251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[58,86253,86255],{"className":50834,"code":86254,"language":50836,"meta":63,"style":63},"\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",[65,86256,86257,86267,86281,86285,86293,86307,86327,86339,86347,86354,86366,86379,86414,86426,86437,86449,86461,86473,86500,86510,86514,86518,86527,86539,86553,86563,86575,86579,86583,86593,86604,86614,86624,86637,86650,86660,86664,86668,86677,86687,86699,86703,86707,86716,86726,86736,86748,86752,86756,86766,86782,86793,86803,86813,86825,86837,86849,86853,86857,86870,86881,86885,86893,86901,86905,86913,86933,86953,86961,86966,86992,86997,87002,87021,87026,87038,87043,87054,87064,87074,87079,87084,87088,87093,87098,87103,87123,87128,87148,87153,87167,87172,87177,87182,87198,87202,87207,87236,87241,87246,87251,87262,87266,87270,87274,87279,87304,87309,87334,87339,87348,87352,87357,87382,87386,87411,87415,87424,87428,87433,87451,87461,87465,87473,87481,87485],{"__ignoreMap":63},[68,86258,86259,86261,86263,86265],{"class":70,"line":71},[68,86260,51498],{"class":335},[68,86262,51502],{"class":51501},[68,86264,51505],{"class":74},[68,86266,51508],{"class":335},[68,86268,86269,86271,86273,86275,86277,86279],{"class":70,"line":92},[68,86270,1243],{"class":335},[68,86272,50836],{"class":51501},[68,86274,51517],{"class":74},[68,86276,381],{"class":335},[68,86278,51522],{"class":78},[68,86280,51508],{"class":335},[68,86282,86283],{"class":70,"line":1387},[68,86284,2606],{"emptyLinePlaceholder":260},[68,86286,86287,86289,86291],{"class":70,"line":1402},[68,86288,1243],{"class":335},[68,86290,51535],{"class":51501},[68,86292,51508],{"class":335},[68,86294,86295,86297,86299,86301,86303,86305],{"class":70,"line":1408},[68,86296,52345],{"class":335},[68,86298,51545],{"class":51501},[68,86300,51548],{"class":74},[68,86302,381],{"class":335},[68,86304,51553],{"class":78},[68,86306,51508],{"class":335},[68,86308,86309,86311,86313,86315,86317,86319,86321,86323,86325],{"class":70,"line":1422},[68,86310,52345],{"class":335},[68,86312,51545],{"class":51501},[68,86314,15125],{"class":74},[68,86316,381],{"class":335},[68,86318,51592],{"class":78},[68,86320,51572],{"class":74},[68,86322,381],{"class":335},[68,86324,51599],{"class":78},[68,86326,51508],{"class":335},[68,86328,86329,86331,86333,86335,86337],{"class":70,"line":1428},[68,86330,52345],{"class":335},[68,86332,51608],{"class":51501},[68,86334,51611],{"class":335},[68,86336,51608],{"class":51501},[68,86338,51508],{"class":335},[68,86340,86341,86343,86345],{"class":70,"line":1519},[68,86342,52345],{"class":335},[68,86344,250],{"class":51501},[68,86346,51508],{"class":335},[68,86348,86349,86352],{"class":70,"line":1525},[68,86350,86351],{"class":74},"    .modal",[68,86353,15777],{"class":335},[68,86355,86356,86358,86360,86362,86364],{"class":70,"line":1537},[68,86357,54972],{"class":82},[68,86359,51638],{"class":335},[68,86361,4179],{"class":82},[68,86363,51693],{"class":331},[68,86365,1498],{"class":335},[68,86367,86368,86371,86373,86375,86377],{"class":70,"line":1819},[68,86369,86370],{"class":82},"      min-height",[68,86372,51638],{"class":335},[68,86374,644],{"class":82},[68,86376,51693],{"class":331},[68,86378,1498],{"class":335},[68,86380,86381,86383,86385,86387,86389,86391,86393,86395,86397,86399,86401,86403,86405,86407,86409,86412],{"class":70,"line":1824},[68,86382,78951],{"class":82},[68,86384,51638],{"class":335},[68,86386,525],{"class":82},[68,86388,4299],{"class":82},[68,86390,2244],{"class":82},[68,86392,51693],{"class":331},[68,86394,78968],{"class":82},[68,86396,336],{"class":335},[68,86398,525],{"class":82},[68,86400,12640],{"class":335},[68,86402,525],{"class":82},[68,86404,12640],{"class":335},[68,86406,525],{"class":82},[68,86408,12640],{"class":335},[68,86410,86411],{"class":82},"0.1",[68,86413,2925],{"class":335},[68,86415,86416,86418,86420,86422,86424],{"class":70,"line":1830},[68,86417,55335],{"class":82},[68,86419,51638],{"class":335},[68,86421,626],{"class":82},[68,86423,51693],{"class":331},[68,86425,1498],{"class":335},[68,86427,86428,86430,86432,86435],{"class":70,"line":1835},[68,86429,54960],{"class":82},[68,86431,51638],{"class":335},[68,86433,86434],{"class":82},"fixed",[68,86436,1498],{"class":335},[68,86438,86439,86442,86444,86447],{"class":70,"line":1849},[68,86440,86441],{"class":82},"      z-index",[68,86443,51638],{"class":335},[68,86445,86446],{"class":82},"999",[68,86448,1498],{"class":335},[68,86450,86451,86453,86455,86457,86459],{"class":70,"line":1854},[68,86452,55039],{"class":82},[68,86454,51638],{"class":335},[68,86456,989],{"class":82},[68,86458,661],{"class":331},[68,86460,1498],{"class":335},[68,86462,86463,86465,86467,86469,86471],{"class":70,"line":1860},[68,86464,55148],{"class":82},[68,86466,51638],{"class":335},[68,86468,989],{"class":82},[68,86470,661],{"class":331},[68,86472,1498],{"class":335},[68,86474,86475,86477,86479,86481,86483,86486,86488,86490,86492,86494,86496,86498],{"class":70,"line":1881},[68,86476,78992],{"class":82},[68,86478,51638],{"class":335},[68,86480,78997],{"class":82},[68,86482,336],{"class":335},[68,86484,86485],{"class":82},"-50",[68,86487,661],{"class":331},[68,86489,12640],{"class":335},[68,86491,86485],{"class":82},[68,86493,661],{"class":331},[68,86495,12640],{"class":335},[68,86497,525],{"class":82},[68,86499,2925],{"class":335},[68,86501,86502,86504,86506,86508],{"class":70,"line":1886},[68,86503,55085],{"class":82},[68,86505,51638],{"class":335},[68,86507,61043],{"class":82},[68,86509,1498],{"class":335},[68,86511,86512],{"class":70,"line":1900},[68,86513,2393],{"class":335},[68,86515,86516],{"class":70,"line":1905},[68,86517,2606],{"emptyLinePlaceholder":260},[68,86519,86520,86522,86525],{"class":70,"line":1934},[68,86521,86351],{"class":74},[68,86523,86524],{"class":74}," .header",[68,86526,15777],{"class":335},[68,86528,86529,86531,86533,86535,86537],{"class":70,"line":1939},[68,86530,57560],{"class":82},[68,86532,51638],{"class":335},[68,86534,734],{"class":82},[68,86536,51693],{"class":331},[68,86538,1498],{"class":335},[68,86540,86541,86543,86545,86547,86549,86551],{"class":70,"line":1956},[68,86542,54896],{"class":82},[68,86544,51638],{"class":335},[68,86546,525],{"class":82},[68,86548,2244],{"class":82},[68,86550,51693],{"class":331},[68,86552,1498],{"class":335},[68,86554,86555,86557,86559,86561],{"class":70,"line":1961},[68,86556,54960],{"class":82},[68,86558,51638],{"class":335},[68,86560,54965],{"class":82},[68,86562,1498],{"class":335},[68,86564,86565,86567,86569,86571,86573],{"class":70,"line":1966},[68,86566,55123],{"class":82},[68,86568,51638],{"class":335},[68,86570,1033],{"class":82},[68,86572,51693],{"class":331},[68,86574,1498],{"class":335},[68,86576,86577],{"class":70,"line":1971},[68,86578,2393],{"class":335},[68,86580,86581],{"class":70,"line":1985},[68,86582,2606],{"emptyLinePlaceholder":260},[68,86584,86585,86587,86589,86591],{"class":70,"line":1990},[68,86586,86351],{"class":74},[68,86588,86524],{"class":74},[68,86590,3238],{"class":51501},[68,86592,15777],{"class":335},[68,86594,86595,86598,86600,86602],{"class":70,"line":2783},[68,86596,86597],{"class":82},"      font-style",[68,86599,51638],{"class":335},[68,86601,64042],{"class":82},[68,86603,1498],{"class":335},[68,86605,86606,86608,86610,86612],{"class":70,"line":2797},[68,86607,57617],{"class":82},[68,86609,51638],{"class":335},[68,86611,62271],{"class":82},[68,86613,1498],{"class":335},[68,86615,86616,86618,86620,86622],{"class":70,"line":2805},[68,86617,54960],{"class":82},[68,86619,51638],{"class":335},[68,86621,55032],{"class":82},[68,86623,1498],{"class":335},[68,86625,86626,86629,86631,86633,86635],{"class":70,"line":2810},[68,86627,86628],{"class":82},"      right",[68,86630,51638],{"class":335},[68,86632,908],{"class":82},[68,86634,51693],{"class":331},[68,86636,1498],{"class":335},[68,86638,86639,86641,86643,86646,86648],{"class":70,"line":2816},[68,86640,55148],{"class":82},[68,86642,51638],{"class":335},[68,86644,86645],{"class":82},"-2",[68,86647,51693],{"class":331},[68,86649,1498],{"class":335},[68,86651,86652,86654,86656,86658],{"class":70,"line":2822},[68,86653,62226],{"class":82},[68,86655,51638],{"class":335},[68,86657,62231],{"class":82},[68,86659,1498],{"class":335},[68,86661,86662],{"class":70,"line":2827},[68,86663,2393],{"class":335},[68,86665,86666],{"class":70,"line":8153},[68,86667,2606],{"emptyLinePlaceholder":260},[68,86669,86670,86672,86675],{"class":70,"line":8177},[68,86671,86351],{"class":74},[68,86673,86674],{"class":74}," .body",[68,86676,15777],{"class":335},[68,86678,86679,86681,86683,86685],{"class":70,"line":8182},[68,86680,57487],{"class":82},[68,86682,51638],{"class":335},[68,86684,51793],{"class":82},[68,86686,1498],{"class":335},[68,86688,86689,86691,86693,86695,86697],{"class":70,"line":8188},[68,86690,54896],{"class":82},[68,86692,51638],{"class":335},[68,86694,779],{"class":82},[68,86696,51693],{"class":331},[68,86698,1498],{"class":335},[68,86700,86701],{"class":70,"line":8215},[68,86702,2393],{"class":335},[68,86704,86705],{"class":70,"line":8220},[68,86706,2606],{"emptyLinePlaceholder":260},[68,86708,86709,86711,86714],{"class":70,"line":8226},[68,86710,86351],{"class":74},[68,86712,86713],{"class":74}," .footer",[68,86715,15777],{"class":335},[68,86717,86718,86720,86722,86724],{"class":70,"line":8238},[68,86719,55210],{"class":82},[68,86721,51638],{"class":335},[68,86723,51678],{"class":82},[68,86725,1498],{"class":335},[68,86727,86728,86730,86732,86734],{"class":70,"line":8250},[68,86729,55221],{"class":82},[68,86731,51638],{"class":335},[68,86733,51781],{"class":82},[68,86735,1498],{"class":335},[68,86737,86738,86740,86742,86744,86746],{"class":70,"line":8262},[68,86739,54896],{"class":82},[68,86741,51638],{"class":335},[68,86743,779],{"class":82},[68,86745,51693],{"class":331},[68,86747,1498],{"class":335},[68,86749,86750],{"class":70,"line":9921},[68,86751,2393],{"class":335},[68,86753,86754],{"class":70,"line":9946},[68,86755,2606],{"emptyLinePlaceholder":260},[68,86757,86758,86760,86762,86764],{"class":70,"line":9969},[68,86759,86351],{"class":74},[68,86761,86713],{"class":74},[68,86763,1606],{"class":51501},[68,86765,15777],{"class":335},[68,86767,86768,86770,86772,86774,86776,86778,86780],{"class":70,"line":9993},[68,86769,54896],{"class":82},[68,86771,51638],{"class":335},[68,86773,406],{"class":82},[68,86775,51693],{"class":331},[68,86777,2289],{"class":82},[68,86779,51693],{"class":331},[68,86781,1498],{"class":335},[68,86783,86784,86786,86788,86791],{"class":70,"line":9998},[68,86785,61922],{"class":82},[68,86787,51638],{"class":335},[68,86789,86790],{"class":82},"#ccc",[68,86792,1498],{"class":335},[68,86794,86795,86797,86799,86801],{"class":70,"line":10003},[68,86796,64171],{"class":82},[68,86798,51638],{"class":335},[68,86800,54938],{"class":82},[68,86802,1498],{"class":335},[68,86804,86805,86807,86809,86811],{"class":70,"line":10008},[68,86806,57617],{"class":82},[68,86808,51638],{"class":335},[68,86810,61043],{"class":82},[68,86812,1498],{"class":335},[68,86814,86815,86817,86819,86821,86823],{"class":70,"line":10017},[68,86816,55335],{"class":82},[68,86818,51638],{"class":335},[68,86820,412],{"class":82},[68,86822,51693],{"class":331},[68,86824,1498],{"class":335},[68,86826,86827,86829,86831,86833,86835],{"class":70,"line":10022},[68,86828,61951],{"class":82},[68,86830,51638],{"class":335},[68,86832,779],{"class":82},[68,86834,51693],{"class":331},[68,86836,1498],{"class":335},[68,86838,86839,86841,86843,86845,86847],{"class":70,"line":10028},[68,86840,55123],{"class":82},[68,86842,51638],{"class":335},[68,86844,882],{"class":82},[68,86846,51693],{"class":331},[68,86848,1498],{"class":335},[68,86850,86851],{"class":70,"line":10049},[68,86852,2393],{"class":335},[68,86854,86855],{"class":70,"line":10055},[68,86856,2606],{"emptyLinePlaceholder":260},[68,86858,86859,86861,86863,86865,86868],{"class":70,"line":10069},[68,86860,86351],{"class":74},[68,86862,86713],{"class":74},[68,86864,1606],{"class":51501},[68,86866,86867],{"class":74},".submit",[68,86869,15777],{"class":335},[68,86871,86872,86874,86876,86879],{"class":70,"line":10075},[68,86873,55085],{"class":82},[68,86875,51638],{"class":335},[68,86877,86878],{"class":82},"#369",[68,86880,1498],{"class":335},[68,86882,86883],{"class":70,"line":10102},[68,86884,2393],{"class":335},[68,86886,86887,86889,86891],{"class":70,"line":10111},[68,86888,52618],{"class":335},[68,86890,250],{"class":51501},[68,86892,51508],{"class":335},[68,86894,86895,86897,86899],{"class":70,"line":10117},[68,86896,51986],{"class":335},[68,86898,51535],{"class":51501},[68,86900,51508],{"class":335},[68,86902,86903],{"class":70,"line":10125},[68,86904,2606],{"emptyLinePlaceholder":260},[68,86906,86907,86909,86911],{"class":70,"line":10130},[68,86908,1243],{"class":335},[68,86910,52001],{"class":51501},[68,86912,51508],{"class":335},[68,86914,86915,86917,86919,86921,86923,86926,86929,86931],{"class":70,"line":16809},[68,86916,52345],{"class":335},[68,86918,54088],{"class":51501},[68,86920,15164],{"class":74},[68,86922,381],{"class":335},[68,86924,86925],{"class":78},"\"delete\"",[68,86927,86928],{"class":335},">删除\u003C\u002F",[68,86930,54088],{"class":51501},[68,86932,51508],{"class":335},[68,86934,86935,86937,86939,86941,86943,86946,86949,86951],{"class":70,"line":16815},[68,86936,52345],{"class":335},[68,86938,54088],{"class":51501},[68,86940,15164],{"class":74},[68,86942,381],{"class":335},[68,86944,86945],{"class":78},"\"login\"",[68,86947,86948],{"class":335},">登录\u003C\u002F",[68,86950,54088],{"class":51501},[68,86952,51508],{"class":335},[68,86954,86955,86957,86959],{"class":70,"line":16838},[68,86956,52345],{"class":335},[68,86958,52014],{"class":51501},[68,86960,51508],{"class":335},[68,86962,86963],{"class":70,"line":16844},[68,86964,86965],{"class":393},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[68,86967,86968,86970,86973,86975,86977,86979,86981,86983,86986,86988,86990],{"class":70,"line":16867},[68,86969,70285],{"class":331},[68,86971,86972],{"class":74}," Modal",[68,86974,336],{"class":335},[68,86976,51608],{"class":5421},[68,86978,13769],{"class":331},[68,86980,70131],{"class":78},[68,86982,12640],{"class":335},[68,86984,86985],{"class":5421},"message",[68,86987,13769],{"class":331},[68,86989,70131],{"class":78},[68,86991,12647],{"class":335},[68,86993,86994],{"class":70,"line":16881},[68,86995,86996],{"class":393},"      \u002F\u002F 创建Model 模态框盒子\n",[68,86998,86999],{"class":70,"line":16901},[68,87000,87001],{"class":393},"      \u002F\u002F 1.1 创建div标签\n",[68,87003,87004,87006,87009,87011,87013,87015,87017,87019],{"class":70,"line":16907},[68,87005,70252],{"class":82},[68,87007,87008],{"class":335},".modalBox ",[68,87010,381],{"class":331},[68,87012,54597],{"class":335},[68,87014,70352],{"class":74},[68,87016,336],{"class":335},[68,87018,82132],{"class":78},[68,87020,342],{"class":335},[68,87022,87023],{"class":70,"line":16918},[68,87024,87025],{"class":393},"      \u002F\u002F 1.2 给div 添加类名为model\n",[68,87027,87028,87030,87033,87035],{"class":70,"line":16941},[68,87029,70252],{"class":82},[68,87031,87032],{"class":335},".modalBox.className ",[68,87034,381],{"class":331},[68,87036,87037],{"class":78}," 'modal'\n",[68,87039,87040],{"class":70,"line":16963},[68,87041,87042],{"class":393},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[68,87044,87045,87047,87050,87052],{"class":70,"line":16968},[68,87046,70252],{"class":82},[68,87048,87049],{"class":335},".modalBox.innerHTML ",[68,87051,381],{"class":331},[68,87053,70369],{"class":78},[68,87055,87056,87059,87061],{"class":70,"line":16974},[68,87057,87058],{"class":78},"        \u003Cdiv class=\"header\">${",[68,87060,51608],{"class":335},[68,87062,87063],{"class":78},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[68,87065,87066,87069,87071],{"class":70,"line":16988},[68,87067,87068],{"class":78},"        \u003Cdiv class=\"body\">${",[68,87070,86985],{"class":335},[68,87072,87073],{"class":78},"}\u003C\u002Fdiv>\n",[68,87075,87076],{"class":70,"line":17001},[68,87077,87078],{"class":78},"      `\n",[68,87080,87081],{"class":70,"line":17006},[68,87082,87083],{"class":393},"      \u002F\u002F console.log(this.modalBox)\n",[68,87085,87086],{"class":70,"line":17020},[68,87087,2393],{"class":335},[68,87089,87090],{"class":70,"line":17025},[68,87091,87092],{"class":393},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[68,87094,87095],{"class":70,"line":17031},[68,87096,87097],{"class":393},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[68,87099,87100],{"class":70,"line":17036},[68,87101,87102],{"class":393},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[68,87104,87105,87108,87110,87112,87114,87117,87119,87121],{"class":70,"line":17050},[68,87106,87107],{"class":82},"    Modal",[68,87109,891],{"class":335},[68,87111,85780],{"class":82},[68,87113,891],{"class":335},[68,87115,87116],{"class":74},"open",[68,87118,13769],{"class":331},[68,87120,59119],{"class":331},[68,87122,54653],{"class":335},[68,87124,87125],{"class":70,"line":17055},[68,87126,87127],{"class":393},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[68,87129,87130,87132,87135,87137,87139,87141,87143,87146],{"class":70,"line":17060},[68,87131,58429],{"class":331},[68,87133,87134],{"class":82}," box",[68,87136,13769],{"class":331},[68,87138,54597],{"class":335},[68,87140,54600],{"class":74},[68,87142,336],{"class":335},[68,87144,87145],{"class":78},"'.modal'",[68,87147,342],{"class":335},[68,87149,87150],{"class":70,"line":17074},[68,87151,87152],{"class":393},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[68,87154,87155,87158,87160,87163,87165],{"class":70,"line":17086},[68,87156,87157],{"class":335},"      box ",[68,87159,1922],{"class":331},[68,87161,87162],{"class":335}," box.",[68,87164,57207],{"class":74},[68,87166,2182],{"class":335},[68,87168,87169],{"class":70,"line":17091},[68,87170,87171],{"class":393},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[68,87173,87174],{"class":70,"line":17104},[68,87175,87176],{"class":393},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[68,87178,87179],{"class":70,"line":17109},[68,87180,87181],{"class":393},"      \u002F\u002F append可以增加对象\n",[68,87183,87184,87187,87190,87192,87195],{"class":70,"line":17114},[68,87185,87186],{"class":335},"      document.body.",[68,87188,87189],{"class":74},"append",[68,87191,336],{"class":335},[68,87193,87194],{"class":82},"this",[68,87196,87197],{"class":335},".modalBox)\n",[68,87199,87200],{"class":70,"line":17119},[68,87201,2606],{"emptyLinePlaceholder":260},[68,87203,87204],{"class":70,"line":17132},[68,87205,87206],{"class":393},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[68,87208,87209,87211,87214,87216,87218,87221,87223,87225,87227,87229,87232,87234],{"class":70,"line":17137},[68,87210,70252],{"class":82},[68,87212,87213],{"class":335},".modalBox.",[68,87215,54600],{"class":74},[68,87217,336],{"class":335},[68,87219,87220],{"class":78},"'i'",[68,87222,31027],{"class":335},[68,87224,58014],{"class":74},[68,87226,336],{"class":335},[68,87228,58019],{"class":78},[68,87230,87231],{"class":335},", () ",[68,87233,84923],{"class":331},[68,87235,15777],{"class":335},[68,87237,87238],{"class":70,"line":32834},[68,87239,87240],{"class":393},"        \u002F\u002F 这个地方需要用到箭头函数\n",[68,87242,87243],{"class":70,"line":32840},[68,87244,87245],{"class":393},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[68,87247,87248],{"class":70,"line":32846},[68,87249,87250],{"class":393},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[68,87252,87253,87255,87257,87260],{"class":70,"line":32852},[68,87254,64927],{"class":82},[68,87256,891],{"class":335},[68,87258,87259],{"class":74},"close",[68,87261,2182],{"class":335},[68,87263,87264],{"class":70,"line":32858},[68,87265,65016],{"class":335},[68,87267,87268],{"class":70,"line":32869},[68,87269,2393],{"class":335},[68,87271,87272],{"class":70,"line":32875},[68,87273,2606],{"emptyLinePlaceholder":260},[68,87275,87276],{"class":70,"line":32895},[68,87277,87278],{"class":393},"    \u002F\u002F 测试一下 点击 删除按钮\n",[68,87280,87281,87283,87285,87287,87290,87292,87294,87296,87298,87300,87302],{"class":70,"line":32901},[68,87282,52608],{"class":335},[68,87284,54600],{"class":74},[68,87286,336],{"class":335},[68,87288,87289],{"class":78},"'#delete'",[68,87291,31027],{"class":335},[68,87293,58014],{"class":74},[68,87295,336],{"class":335},[68,87297,58019],{"class":78},[68,87299,87231],{"class":335},[68,87301,84923],{"class":331},[68,87303,15777],{"class":335},[68,87305,87306],{"class":70,"line":32912},[68,87307,87308],{"class":393},"      \u002F\u002F 先调用Model构造函数\n",[68,87310,87311,87313,87316,87318,87320,87322,87324,87327,87329,87332],{"class":70,"line":32918},[68,87312,58429],{"class":331},[68,87314,87315],{"class":82}," del",[68,87317,13769],{"class":331},[68,87319,11783],{"class":331},[68,87321,86972],{"class":74},[68,87323,336],{"class":335},[68,87325,87326],{"class":78},"'温馨的提示'",[68,87328,12640],{"class":335},[68,87330,87331],{"class":78},"'您没有删除权限操作'",[68,87333,342],{"class":335},[68,87335,87336],{"class":70,"line":32924},[68,87337,87338],{"class":393},"      \u002F\u002F 实例对象调用open方法\n",[68,87340,87341,87344,87346],{"class":70,"line":32930},[68,87342,87343],{"class":335},"      del.",[68,87345,87116],{"class":74},[68,87347,2182],{"class":335},[68,87349,87350],{"class":70,"line":32936},[68,87351,33662],{"class":335},[68,87353,87354],{"class":70,"line":32942},[68,87355,87356],{"class":393},"    \u002F\u002F 测试一下 点击 登录按钮\n",[68,87358,87359,87361,87363,87365,87368,87370,87372,87374,87376,87378,87380],{"class":70,"line":32948},[68,87360,52608],{"class":335},[68,87362,54600],{"class":74},[68,87364,336],{"class":335},[68,87366,87367],{"class":78},"'#login'",[68,87369,31027],{"class":335},[68,87371,58014],{"class":74},[68,87373,336],{"class":335},[68,87375,58019],{"class":78},[68,87377,87231],{"class":335},[68,87379,84923],{"class":331},[68,87381,15777],{"class":335},[68,87383,87384],{"class":70,"line":32954},[68,87385,87308],{"class":393},[68,87387,87388,87390,87393,87395,87397,87399,87401,87404,87406,87409],{"class":70,"line":32974},[68,87389,58429],{"class":331},[68,87391,87392],{"class":82}," log",[68,87394,13769],{"class":331},[68,87396,11783],{"class":331},[68,87398,86972],{"class":74},[68,87400,336],{"class":335},[68,87402,87403],{"class":78},"'友情提示'",[68,87405,12640],{"class":335},[68,87407,87408],{"class":78},"'您还没有登录呢'",[68,87410,342],{"class":335},[68,87412,87413],{"class":70,"line":32980},[68,87414,87338],{"class":393},[68,87416,87417,87420,87422],{"class":70,"line":32996},[68,87418,87419],{"class":335},"      log.",[68,87421,87116],{"class":74},[68,87423,2182],{"class":335},[68,87425,87426],{"class":70,"line":33002},[68,87427,33662],{"class":335},[68,87429,87430],{"class":70,"line":33016},[68,87431,87432],{"class":393},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[68,87434,87435,87437,87439,87441,87443,87445,87447,87449],{"class":70,"line":33022},[68,87436,87107],{"class":82},[68,87438,891],{"class":335},[68,87440,85780],{"class":82},[68,87442,891],{"class":335},[68,87444,87259],{"class":74},[68,87446,13769],{"class":331},[68,87448,59119],{"class":331},[68,87450,54653],{"class":335},[68,87452,87453,87455,87457,87459],{"class":70,"line":33037},[68,87454,70252],{"class":82},[68,87456,87213],{"class":335},[68,87458,57207],{"class":74},[68,87460,2182],{"class":335},[68,87462,87463],{"class":70,"line":33043},[68,87464,2393],{"class":335},[68,87466,87467,87469,87471],{"class":70,"line":33052},[68,87468,52618],{"class":335},[68,87470,52014],{"class":51501},[68,87472,51508],{"class":335},[68,87474,87475,87477,87479],{"class":70,"line":33058},[68,87476,51986],{"class":335},[68,87478,52001],{"class":51501},[68,87480,51508],{"class":335},[68,87482,87483],{"class":70,"line":33067},[68,87484,2606],{"emptyLinePlaceholder":260},[68,87486,87487,87489,87491],{"class":70,"line":33073},[68,87488,51986],{"class":335},[68,87490,50836],{"class":51501},[68,87492,51508],{"class":335},[19,87494,87495],{},[48,87496],{"alt":63,"src":87497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87499,87501],{"id":87500},"_414-深浅拷贝","4.14 深浅拷贝",[301,87503,87505],{"id":87504},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87507,87508],{},[48,87509],{"alt":63,"src":87510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87512,87513],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87515,87516],{},[48,87517],{"alt":63,"src":87518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87520,87521],{},[48,87522],{"alt":63,"src":87523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87525,87526],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87528,87529],{},[48,87530],{"alt":63,"src":87531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87533,11537],{},[19,87535,87536],{},[48,87537],{"alt":63,"src":87538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[301,87540,87542],{"id":87541},"_4142-深拷贝","4.14.2 深拷贝",[19,87544,87545],{},"深拷贝：拷贝的是对象，不是地址",[19,87547,87548],{},"常用的三种方法：",[23,87550,87551,87554,87557],{},[26,87552,87553],{},"通过递归实现深拷贝",[26,87555,87556],{},"lodash\u002FcloneDeep",[26,87558,87559],{},"通过JSON.stringify()实现",[22203,87561,87563],{"id":87562},"_41421-递归函数","4.14.2.1 递归函数",[19,87565,87566],{},[48,87567],{"alt":63,"src":87568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[23,87570,87571],{},[26,87572,87573],{},"死递归占溢出：",[58,87575,87577],{"className":53268,"code":87576,"language":53270,"meta":63,"style":63},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[65,87578,87579,87587,87595,87599,87604,87608,87613,87621],{"__ignoreMap":63},[68,87580,87581,87583,87585],{"class":70,"line":71},[68,87582,1243],{"class":335},[68,87584,52001],{"class":51501},[68,87586,51508],{"class":335},[68,87588,87589,87591,87593],{"class":70,"line":92},[68,87590,52345],{"class":335},[68,87592,52014],{"class":51501},[68,87594,51508],{"class":335},[68,87596,87597],{"class":70,"line":1387},[68,87598,77344],{"class":335},[68,87600,87601],{"class":70,"line":1402},[68,87602,87603],{"class":335},"      fn()\n",[68,87605,87606],{"class":70,"line":1408},[68,87607,2393],{"class":335},[68,87609,87610],{"class":70,"line":1422},[68,87611,87612],{"class":335},"    fn()\n",[68,87614,87615,87617,87619],{"class":70,"line":1428},[68,87616,52618],{"class":335},[68,87618,52014],{"class":51501},[68,87620,51508],{"class":335},[68,87622,87623,87625,87627],{"class":70,"line":1519},[68,87624,51986],{"class":335},[68,87626,52001],{"class":51501},[68,87628,51508],{"class":335},[23,87630,87631],{"start":92},[26,87632,87633],{},"递归函数要加判断条件：",[19,87635,87636],{},[48,87637],{"alt":63,"src":87638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[23,87640,87641],{"start":1387},[26,87642,87643],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[58,87645,87647],{"className":50834,"code":87646,"language":50836,"meta":63,"style":63},"\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",[65,87648,87649,87659,87673,87677,87685,87699,87719,87731,87739,87743,87751,87763,87771,87779,87804,87816,87820,87827,87835,87843,87847],{"__ignoreMap":63},[68,87650,87651,87653,87655,87657],{"class":70,"line":71},[68,87652,51498],{"class":335},[68,87654,51502],{"class":51501},[68,87656,51505],{"class":74},[68,87658,51508],{"class":335},[68,87660,87661,87663,87665,87667,87669,87671],{"class":70,"line":92},[68,87662,1243],{"class":335},[68,87664,50836],{"class":51501},[68,87666,51517],{"class":74},[68,87668,381],{"class":335},[68,87670,51522],{"class":78},[68,87672,51508],{"class":335},[68,87674,87675],{"class":70,"line":1387},[68,87676,2606],{"emptyLinePlaceholder":260},[68,87678,87679,87681,87683],{"class":70,"line":1402},[68,87680,1243],{"class":335},[68,87682,51535],{"class":51501},[68,87684,51508],{"class":335},[68,87686,87687,87689,87691,87693,87695,87697],{"class":70,"line":1408},[68,87688,52345],{"class":335},[68,87690,51545],{"class":51501},[68,87692,51548],{"class":74},[68,87694,381],{"class":335},[68,87696,51553],{"class":78},[68,87698,51508],{"class":335},[68,87700,87701,87703,87705,87707,87709,87711,87713,87715,87717],{"class":70,"line":1422},[68,87702,52345],{"class":335},[68,87704,51545],{"class":51501},[68,87706,15125],{"class":74},[68,87708,381],{"class":335},[68,87710,51592],{"class":78},[68,87712,51572],{"class":74},[68,87714,381],{"class":335},[68,87716,51599],{"class":78},[68,87718,51508],{"class":335},[68,87720,87721,87723,87725,87727,87729],{"class":70,"line":1428},[68,87722,52345],{"class":335},[68,87724,51608],{"class":51501},[68,87726,51611],{"class":335},[68,87728,51608],{"class":51501},[68,87730,51508],{"class":335},[68,87732,87733,87735,87737],{"class":70,"line":1519},[68,87734,51986],{"class":335},[68,87736,51535],{"class":51501},[68,87738,51508],{"class":335},[68,87740,87741],{"class":70,"line":1525},[68,87742,2606],{"emptyLinePlaceholder":260},[68,87744,87745,87747,87749],{"class":70,"line":1537},[68,87746,1243],{"class":335},[68,87748,52001],{"class":51501},[68,87750,51508],{"class":335},[68,87752,87753,87755,87757,87759,87761],{"class":70,"line":1819},[68,87754,52345],{"class":335},[68,87756,51812],{"class":51501},[68,87758,55515],{"class":335},[68,87760,51812],{"class":51501},[68,87762,51508],{"class":335},[68,87764,87765,87767,87769],{"class":70,"line":1824},[68,87766,52345],{"class":335},[68,87768,52014],{"class":51501},[68,87770,51508],{"class":335},[68,87772,87773,87775,87777],{"class":70,"line":1830},[68,87774,70285],{"class":331},[68,87776,73974],{"class":74},[68,87778,11058],{"class":335},[68,87780,87781,87783,87785,87787,87789,87791,87793,87795,87797,87799,87802],{"class":70,"line":1835},[68,87782,55972],{"class":335},[68,87784,54600],{"class":74},[68,87786,336],{"class":335},[68,87788,82132],{"class":78},[68,87790,74450],{"class":335},[68,87792,381],{"class":331},[68,87794,11783],{"class":331},[68,87796,73990],{"class":74},[68,87798,17466],{"class":335},[68,87800,87801],{"class":74},"toLocaleString",[68,87803,2182],{"class":335},[68,87805,87806,87809,87812,87814],{"class":70,"line":1849},[68,87807,87808],{"class":74},"      setTimeout",[68,87810,87811],{"class":335},"(getTime, ",[68,87813,6615],{"class":82},[68,87815,342],{"class":335},[68,87817,87818],{"class":70,"line":1854},[68,87819,2393],{"class":335},[68,87821,87822,87825],{"class":70,"line":1860},[68,87823,87824],{"class":74},"    getTime",[68,87826,2182],{"class":335},[68,87828,87829,87831,87833],{"class":70,"line":1881},[68,87830,52618],{"class":335},[68,87832,52014],{"class":51501},[68,87834,51508],{"class":335},[68,87836,87837,87839,87841],{"class":70,"line":1886},[68,87838,51986],{"class":335},[68,87840,52001],{"class":51501},[68,87842,51508],{"class":335},[68,87844,87845],{"class":70,"line":1900},[68,87846,2606],{"emptyLinePlaceholder":260},[68,87848,87849,87851,87853],{"class":70,"line":1905},[68,87850,51986],{"class":335},[68,87852,50836],{"class":51501},[68,87854,51508],{"class":335},[19,87856,87857],{},[48,87858],{"alt":63,"src":87859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[23,87861,87862],{"start":1402},[26,87863,87553],{},[19,87865,87866],{},[48,87867],{"alt":63,"src":87868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87870,87871],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87873,39390],{},[19,87875,87876],{},"这个是简易版的递归函数深拷贝",[19,87878,87879],{},"一定要注意先数组再对象，因为万物皆可对象",[58,87881,87883],{"className":50834,"code":87882,"language":50836,"meta":63,"style":63},"\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",[65,87884,87885,87895,87909,87913,87921,87935,87955,87967,87975,87979,87987,87995,88005,88014,88022,88038,88042,88050,88054,88058,88070,88075,88094,88110,88115,88120,88125,88140,88145,88150,88159,88167,88184,88192,88198,88206,88211,88216,88225,88229,88233,88237,88248,88257,88267,88281,88291,88299,88307,88315,88319],{"__ignoreMap":63},[68,87886,87887,87889,87891,87893],{"class":70,"line":71},[68,87888,51498],{"class":335},[68,87890,51502],{"class":51501},[68,87892,51505],{"class":74},[68,87894,51508],{"class":335},[68,87896,87897,87899,87901,87903,87905,87907],{"class":70,"line":92},[68,87898,1243],{"class":335},[68,87900,50836],{"class":51501},[68,87902,51517],{"class":74},[68,87904,381],{"class":335},[68,87906,51522],{"class":78},[68,87908,51508],{"class":335},[68,87910,87911],{"class":70,"line":1387},[68,87912,2606],{"emptyLinePlaceholder":260},[68,87914,87915,87917,87919],{"class":70,"line":1402},[68,87916,1243],{"class":335},[68,87918,51535],{"class":51501},[68,87920,51508],{"class":335},[68,87922,87923,87925,87927,87929,87931,87933],{"class":70,"line":1408},[68,87924,52345],{"class":335},[68,87926,51545],{"class":51501},[68,87928,51548],{"class":74},[68,87930,381],{"class":335},[68,87932,51553],{"class":78},[68,87934,51508],{"class":335},[68,87936,87937,87939,87941,87943,87945,87947,87949,87951,87953],{"class":70,"line":1422},[68,87938,52345],{"class":335},[68,87940,51545],{"class":51501},[68,87942,15125],{"class":74},[68,87944,381],{"class":335},[68,87946,51592],{"class":78},[68,87948,51572],{"class":74},[68,87950,381],{"class":335},[68,87952,51599],{"class":78},[68,87954,51508],{"class":335},[68,87956,87957,87959,87961,87963,87965],{"class":70,"line":1428},[68,87958,52345],{"class":335},[68,87960,51608],{"class":51501},[68,87962,51611],{"class":335},[68,87964,51608],{"class":51501},[68,87966,51508],{"class":335},[68,87968,87969,87971,87973],{"class":70,"line":1519},[68,87970,51986],{"class":335},[68,87972,51535],{"class":51501},[68,87974,51508],{"class":335},[68,87976,87977],{"class":70,"line":1525},[68,87978,2606],{"emptyLinePlaceholder":260},[68,87980,87981,87983,87985],{"class":70,"line":1537},[68,87982,1243],{"class":335},[68,87984,52001],{"class":51501},[68,87986,51508],{"class":335},[68,87988,87989,87991,87993],{"class":70,"line":1819},[68,87990,52345],{"class":335},[68,87992,52014],{"class":51501},[68,87994,51508],{"class":335},[68,87996,87997,87999,88001,88003],{"class":70,"line":1824},[68,87998,11426],{"class":331},[68,88000,70172],{"class":82},[68,88002,13769],{"class":331},[68,88004,15777],{"class":335},[68,88006,88007,88009,88012],{"class":70,"line":1830},[68,88008,71817],{"class":335},[68,88010,88011],{"class":78},"'pink'",[68,88013,31667],{"class":335},[68,88015,88016,88018,88020],{"class":70,"line":1835},[68,88017,71827],{"class":335},[68,88019,983],{"class":82},[68,88021,31667],{"class":335},[68,88023,88024,88027,88030,88032,88035],{"class":70,"line":1849},[68,88025,88026],{"class":335},"      hobby: [",[68,88028,88029],{"class":78},"'乒乓球'",[68,88031,12640],{"class":335},[68,88033,88034],{"class":78},"'足球'",[68,88036,88037],{"class":335},"],\n",[68,88039,88040],{"class":70,"line":1854},[68,88041,78073],{"class":335},[68,88043,88044,88047],{"class":70,"line":1860},[68,88045,88046],{"class":335},"        baby: ",[68,88048,88049],{"class":78},"'小pink'\n",[68,88051,88052],{"class":70,"line":1881},[68,88053,52599],{"class":335},[68,88055,88056],{"class":70,"line":1886},[68,88057,2393],{"class":335},[68,88059,88060,88062,88065,88067],{"class":70,"line":1900},[68,88061,11426],{"class":331},[68,88063,88064],{"class":82}," o",[68,88066,13769],{"class":331},[68,88068,88069],{"class":335}," {}\n",[68,88071,88072],{"class":70,"line":1905},[68,88073,88074],{"class":393},"    \u002F\u002F 拷贝函数\n",[68,88076,88077,88079,88082,88084,88087,88089,88092],{"class":70,"line":1934},[68,88078,70285],{"class":331},[68,88080,88081],{"class":74}," deepCopy",[68,88083,336],{"class":335},[68,88085,88086],{"class":5421},"newObj",[68,88088,12640],{"class":335},[68,88090,88091],{"class":5421},"oldObj",[68,88093,12647],{"class":335},[68,88095,88096,88098,88100,88102,88105,88107],{"class":70,"line":1939},[68,88097,52485],{"class":331},[68,88099,1865],{"class":335},[68,88101,52048],{"class":331},[68,88103,88104],{"class":335}," k ",[68,88106,26247],{"class":331},[68,88108,88109],{"class":335}," oldObj) {\n",[68,88111,88112],{"class":70,"line":1956},[68,88113,88114],{"class":393},"        \u002F\u002F 处理数组的问题\n",[68,88116,88117],{"class":70,"line":1961},[68,88118,88119],{"class":393},"        \u002F\u002F 判断是否属于数组\n",[68,88121,88122],{"class":70,"line":1966},[68,88123,88124],{"class":393},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[68,88126,88127,88129,88132,88135,88138],{"class":70,"line":1971},[68,88128,2703],{"class":331},[68,88130,88131],{"class":335}," (oldObj[k] ",[68,88133,88134],{"class":331},"instanceof",[68,88136,88137],{"class":74}," Array",[68,88139,12647],{"class":335},[68,88141,88142],{"class":70,"line":1985},[68,88143,88144],{"class":393},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[68,88146,88147],{"class":70,"line":1990},[68,88148,88149],{"class":393},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[68,88151,88152,88155,88157],{"class":70,"line":2783},[68,88153,88154],{"class":335},"          newObj[k] ",[68,88156,381],{"class":331},[68,88158,52039],{"class":335},[68,88160,88161,88164],{"class":70,"line":2797},[68,88162,88163],{"class":74},"          deepCopy",[68,88165,88166],{"class":335},"(newObj[k], oldObj[k])\n",[68,88168,88169,88171,88173,88175,88177,88179,88182],{"class":70,"line":2805},[68,88170,80281],{"class":335},[68,88172,1908],{"class":331},[68,88174,1911],{"class":331},[68,88176,88131],{"class":335},[68,88178,88134],{"class":331},[68,88180,88181],{"class":74}," Object",[68,88183,12647],{"class":335},[68,88185,88186,88188,88190],{"class":70,"line":2810},[68,88187,88154],{"class":335},[68,88189,381],{"class":331},[68,88191,88069],{"class":335},[68,88193,88194,88196],{"class":70,"line":2816},[68,88195,88163],{"class":74},[68,88197,88166],{"class":335},[68,88199,88200,88202,88204],{"class":70,"line":2822},[68,88201,80281],{"class":335},[68,88203,1908],{"class":331},[68,88205,15777],{"class":335},[68,88207,88208],{"class":70,"line":2827},[68,88209,88210],{"class":393},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[68,88212,88213],{"class":70,"line":8153},[68,88214,88215],{"class":393},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[68,88217,88218,88220,88222],{"class":70,"line":8177},[68,88219,88154],{"class":335},[68,88221,381],{"class":331},[68,88223,88224],{"class":335}," oldObj[k]\n",[68,88226,88227],{"class":70,"line":8182},[68,88228,2735],{"class":335},[68,88230,88231],{"class":70,"line":8188},[68,88232,52599],{"class":335},[68,88234,88235],{"class":70,"line":8215},[68,88236,2393],{"class":335},[68,88238,88239,88242,88245],{"class":70,"line":8220},[68,88240,88241],{"class":74},"    deepCopy",[68,88243,88244],{"class":335},"(o, obj) ",[68,88246,88247],{"class":393},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[68,88249,88250,88252,88254],{"class":70,"line":8226},[68,88251,73954],{"class":335},[68,88253,58448],{"class":74},[68,88255,88256],{"class":335},"(o)\n",[68,88258,88259,88262,88264],{"class":70,"line":8238},[68,88260,88261],{"class":335},"    o.age ",[68,88263,381],{"class":331},[68,88265,88266],{"class":82}," 20\n",[68,88268,88269,88272,88274,88276,88278],{"class":70,"line":8250},[68,88270,88271],{"class":335},"    o.hobby[",[68,88273,525],{"class":82},[68,88275,4649],{"class":335},[68,88277,381],{"class":331},[68,88279,88280],{"class":78}," '篮球'\n",[68,88282,88283,88286,88288],{"class":70,"line":8262},[68,88284,88285],{"class":335},"    o.family ",[68,88287,381],{"class":331},[68,88289,88290],{"class":78}," '老pink'\n",[68,88292,88293,88295,88297],{"class":70,"line":9921},[68,88294,73954],{"class":335},[68,88296,58448],{"class":74},[68,88298,70237],{"class":335},[68,88300,88301,88303,88305],{"class":70,"line":9946},[68,88302,52618],{"class":335},[68,88304,52014],{"class":51501},[68,88306,51508],{"class":335},[68,88308,88309,88311,88313],{"class":70,"line":9969},[68,88310,51986],{"class":335},[68,88312,52001],{"class":51501},[68,88314,51508],{"class":335},[68,88316,88317],{"class":70,"line":9993},[68,88318,2606],{"emptyLinePlaceholder":260},[68,88320,88321,88323,88325],{"class":70,"line":9998},[68,88322,51986],{"class":335},[68,88324,50836],{"class":51501},[68,88326,51508],{"class":335},[19,88328,88329],{},[48,88330],{"alt":63,"src":88331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22203,88333,88335,88336],{"id":88334},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[483,88337,88338],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88340,88341],{},[30,88342,88343],{"href":88343,"rel":88344},"https:\u002F\u002Fwww.lodashjs.com\u002F",[34],[19,88346,88347],{},"lodash里边的方法都要加上一个下划线_",[19,88349,88350],{},"_.cloneDeep()",[58,88352,88354],{"className":50834,"code":88353,"language":50836,"meta":63,"style":63},"\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",[65,88355,88356,88366,88380,88384,88392,88406,88426,88438,88446,88450,88458,88463,88482,88490,88500,88508,88516,88528,88532,88538,88542,88546,88562,88570,88579,88587,88595,88603,88607],{"__ignoreMap":63},[68,88357,88358,88360,88362,88364],{"class":70,"line":71},[68,88359,51498],{"class":335},[68,88361,51502],{"class":51501},[68,88363,51505],{"class":74},[68,88365,51508],{"class":335},[68,88367,88368,88370,88372,88374,88376,88378],{"class":70,"line":92},[68,88369,1243],{"class":335},[68,88371,50836],{"class":51501},[68,88373,51517],{"class":74},[68,88375,381],{"class":335},[68,88377,51522],{"class":78},[68,88379,51508],{"class":335},[68,88381,88382],{"class":70,"line":1387},[68,88383,2606],{"emptyLinePlaceholder":260},[68,88385,88386,88388,88390],{"class":70,"line":1402},[68,88387,1243],{"class":335},[68,88389,51535],{"class":51501},[68,88391,51508],{"class":335},[68,88393,88394,88396,88398,88400,88402,88404],{"class":70,"line":1408},[68,88395,52345],{"class":335},[68,88397,51545],{"class":51501},[68,88399,51548],{"class":74},[68,88401,381],{"class":335},[68,88403,51553],{"class":78},[68,88405,51508],{"class":335},[68,88407,88408,88410,88412,88414,88416,88418,88420,88422,88424],{"class":70,"line":1422},[68,88409,52345],{"class":335},[68,88411,51545],{"class":51501},[68,88413,15125],{"class":74},[68,88415,381],{"class":335},[68,88417,51592],{"class":78},[68,88419,51572],{"class":74},[68,88421,381],{"class":335},[68,88423,51599],{"class":78},[68,88425,51508],{"class":335},[68,88427,88428,88430,88432,88434,88436],{"class":70,"line":1428},[68,88429,52345],{"class":335},[68,88431,51608],{"class":51501},[68,88433,51611],{"class":335},[68,88435,51608],{"class":51501},[68,88437,51508],{"class":335},[68,88439,88440,88442,88444],{"class":70,"line":1519},[68,88441,51986],{"class":335},[68,88443,51535],{"class":51501},[68,88445,51508],{"class":335},[68,88447,88448],{"class":70,"line":1525},[68,88449,2606],{"emptyLinePlaceholder":260},[68,88451,88452,88454,88456],{"class":70,"line":1537},[68,88453,1243],{"class":335},[68,88455,52001],{"class":51501},[68,88457,51508],{"class":335},[68,88459,88460],{"class":70,"line":1819},[68,88461,88462],{"class":393},"  \u003C!-- 先引用这个库 -->\n",[68,88464,88465,88467,88469,88471,88473,88476,88478,88480],{"class":70,"line":1824},[68,88466,52345],{"class":335},[68,88468,52014],{"class":51501},[68,88470,55440],{"class":74},[68,88472,381],{"class":335},[68,88474,88475],{"class":78},"\"lodash.min.js\"",[68,88477,55515],{"class":335},[68,88479,52014],{"class":51501},[68,88481,51508],{"class":335},[68,88483,88484,88486,88488],{"class":70,"line":1830},[68,88485,52345],{"class":335},[68,88487,52014],{"class":51501},[68,88489,51508],{"class":335},[68,88491,88492,88494,88496,88498],{"class":70,"line":1835},[68,88493,11426],{"class":331},[68,88495,70172],{"class":82},[68,88497,13769],{"class":331},[68,88499,15777],{"class":335},[68,88501,88502,88504,88506],{"class":70,"line":1849},[68,88503,71817],{"class":335},[68,88505,88011],{"class":78},[68,88507,31667],{"class":335},[68,88509,88510,88512,88514],{"class":70,"line":1854},[68,88511,71827],{"class":335},[68,88513,983],{"class":82},[68,88515,31667],{"class":335},[68,88517,88518,88520,88522,88524,88526],{"class":70,"line":1860},[68,88519,88026],{"class":335},[68,88521,88029],{"class":78},[68,88523,12640],{"class":335},[68,88525,88034],{"class":78},[68,88527,88037],{"class":335},[68,88529,88530],{"class":70,"line":1881},[68,88531,78073],{"class":335},[68,88533,88534,88536],{"class":70,"line":1886},[68,88535,88046],{"class":335},[68,88537,88049],{"class":78},[68,88539,88540],{"class":70,"line":1900},[68,88541,52599],{"class":335},[68,88543,88544],{"class":70,"line":1905},[68,88545,2393],{"class":335},[68,88547,88548,88550,88552,88554,88557,88560],{"class":70,"line":1934},[68,88549,11426],{"class":331},[68,88551,88064],{"class":82},[68,88553,13769],{"class":331},[68,88555,88556],{"class":335}," _.",[68,88558,88559],{"class":74},"cloneDeep",[68,88561,70237],{"class":335},[68,88563,88564,88566,88568],{"class":70,"line":1939},[68,88565,73954],{"class":335},[68,88567,58448],{"class":74},[68,88569,88256],{"class":335},[68,88571,88572,88575,88577],{"class":70,"line":1956},[68,88573,88574],{"class":335},"    o.family.baby ",[68,88576,381],{"class":331},[68,88578,88290],{"class":78},[68,88580,88581,88583,88585],{"class":70,"line":1961},[68,88582,73954],{"class":335},[68,88584,58448],{"class":74},[68,88586,70237],{"class":335},[68,88588,88589,88591,88593],{"class":70,"line":1966},[68,88590,52618],{"class":335},[68,88592,52014],{"class":51501},[68,88594,51508],{"class":335},[68,88596,88597,88599,88601],{"class":70,"line":1971},[68,88598,51986],{"class":335},[68,88600,52001],{"class":51501},[68,88602,51508],{"class":335},[68,88604,88605],{"class":70,"line":1985},[68,88606,2606],{"emptyLinePlaceholder":260},[68,88608,88609,88611,88613],{"class":70,"line":1990},[68,88610,51986],{"class":335},[68,88612,50836],{"class":51501},[68,88614,51508],{"class":335},[19,88616,88617],{},[48,88618],{"alt":63,"src":88619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22203,88621,88623],{"id":88622},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[58,88625,88627],{"className":50834,"code":88626,"language":50836,"meta":63,"style":63},"\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",[65,88628,88629,88639,88653,88657,88665,88679,88699,88711,88719,88723,88731,88739,88749,88757,88765,88777,88781,88787,88791,88795,88800,88805,88810,88836,88844,88853,88861,88869,88877,88881],{"__ignoreMap":63},[68,88630,88631,88633,88635,88637],{"class":70,"line":71},[68,88632,51498],{"class":335},[68,88634,51502],{"class":51501},[68,88636,51505],{"class":74},[68,88638,51508],{"class":335},[68,88640,88641,88643,88645,88647,88649,88651],{"class":70,"line":92},[68,88642,1243],{"class":335},[68,88644,50836],{"class":51501},[68,88646,51517],{"class":74},[68,88648,381],{"class":335},[68,88650,51522],{"class":78},[68,88652,51508],{"class":335},[68,88654,88655],{"class":70,"line":1387},[68,88656,2606],{"emptyLinePlaceholder":260},[68,88658,88659,88661,88663],{"class":70,"line":1402},[68,88660,1243],{"class":335},[68,88662,51535],{"class":51501},[68,88664,51508],{"class":335},[68,88666,88667,88669,88671,88673,88675,88677],{"class":70,"line":1408},[68,88668,52345],{"class":335},[68,88670,51545],{"class":51501},[68,88672,51548],{"class":74},[68,88674,381],{"class":335},[68,88676,51553],{"class":78},[68,88678,51508],{"class":335},[68,88680,88681,88683,88685,88687,88689,88691,88693,88695,88697],{"class":70,"line":1422},[68,88682,52345],{"class":335},[68,88684,51545],{"class":51501},[68,88686,15125],{"class":74},[68,88688,381],{"class":335},[68,88690,51592],{"class":78},[68,88692,51572],{"class":74},[68,88694,381],{"class":335},[68,88696,51599],{"class":78},[68,88698,51508],{"class":335},[68,88700,88701,88703,88705,88707,88709],{"class":70,"line":1428},[68,88702,52345],{"class":335},[68,88704,51608],{"class":51501},[68,88706,51611],{"class":335},[68,88708,51608],{"class":51501},[68,88710,51508],{"class":335},[68,88712,88713,88715,88717],{"class":70,"line":1519},[68,88714,51986],{"class":335},[68,88716,51535],{"class":51501},[68,88718,51508],{"class":335},[68,88720,88721],{"class":70,"line":1525},[68,88722,2606],{"emptyLinePlaceholder":260},[68,88724,88725,88727,88729],{"class":70,"line":1537},[68,88726,1243],{"class":335},[68,88728,52001],{"class":51501},[68,88730,51508],{"class":335},[68,88732,88733,88735,88737],{"class":70,"line":1819},[68,88734,52345],{"class":335},[68,88736,52014],{"class":51501},[68,88738,51508],{"class":335},[68,88740,88741,88743,88745,88747],{"class":70,"line":1824},[68,88742,11426],{"class":331},[68,88744,70172],{"class":82},[68,88746,13769],{"class":331},[68,88748,15777],{"class":335},[68,88750,88751,88753,88755],{"class":70,"line":1830},[68,88752,71817],{"class":335},[68,88754,88011],{"class":78},[68,88756,31667],{"class":335},[68,88758,88759,88761,88763],{"class":70,"line":1835},[68,88760,71827],{"class":335},[68,88762,983],{"class":82},[68,88764,31667],{"class":335},[68,88766,88767,88769,88771,88773,88775],{"class":70,"line":1849},[68,88768,88026],{"class":335},[68,88770,88029],{"class":78},[68,88772,12640],{"class":335},[68,88774,88034],{"class":78},[68,88776,88037],{"class":335},[68,88778,88779],{"class":70,"line":1854},[68,88780,78073],{"class":335},[68,88782,88783,88785],{"class":70,"line":1860},[68,88784,88046],{"class":335},[68,88786,88049],{"class":78},[68,88788,88789],{"class":70,"line":1881},[68,88790,52599],{"class":335},[68,88792,88793],{"class":70,"line":1886},[68,88794,2393],{"class":335},[68,88796,88797],{"class":70,"line":1900},[68,88798,88799],{"class":393},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[68,88801,88802],{"class":70,"line":1905},[68,88803,88804],{"class":393},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[68,88806,88807],{"class":70,"line":1934},[68,88808,88809],{"class":393},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[68,88811,88812,88814,88816,88818,88821,88823,88826,88828,88830,88832,88834],{"class":70,"line":1939},[68,88813,11426],{"class":331},[68,88815,88064],{"class":82},[68,88817,13769],{"class":331},[68,88819,88820],{"class":82}," JSON",[68,88822,891],{"class":335},[68,88824,88825],{"class":74},"parse",[68,88827,336],{"class":335},[68,88829,71865],{"class":82},[68,88831,891],{"class":335},[68,88833,71870],{"class":74},[68,88835,71873],{"class":335},[68,88837,88838,88840,88842],{"class":70,"line":1956},[68,88839,73954],{"class":335},[68,88841,58448],{"class":74},[68,88843,88256],{"class":335},[68,88845,88846,88848,88850],{"class":70,"line":1961},[68,88847,88574],{"class":335},[68,88849,381],{"class":331},[68,88851,88852],{"class":78}," '123'\n",[68,88854,88855,88857,88859],{"class":70,"line":1966},[68,88856,73954],{"class":335},[68,88858,58448],{"class":74},[68,88860,70237],{"class":335},[68,88862,88863,88865,88867],{"class":70,"line":1971},[68,88864,52618],{"class":335},[68,88866,52014],{"class":51501},[68,88868,51508],{"class":335},[68,88870,88871,88873,88875],{"class":70,"line":1985},[68,88872,51986],{"class":335},[68,88874,52001],{"class":51501},[68,88876,51508],{"class":335},[68,88878,88879],{"class":70,"line":1990},[68,88880,2606],{"emptyLinePlaceholder":260},[68,88882,88883,88885,88887],{"class":70,"line":2783},[68,88884,51986],{"class":335},[68,88886,50836],{"class":51501},[68,88888,51508],{"class":335},[19,88890,88891],{},[48,88892],{"alt":63,"src":88893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88895,88897],{"id":88896},"_415-异常处理","4.15 异常处理",[23,88899,88900],{},[26,88901,88902],{},"throw抛异常",[19,88904,88905],{},[48,88906],{"alt":63,"src":88907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[23,88909,88910],{"start":92},[26,88911,88912],{},"try\u002Fcatch 捕获错误信息",[19,88914,88915],{},[48,88916],{"alt":63,"src":88917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[58,88919,88921],{"className":50834,"code":88920,"language":50836,"meta":63,"style":63},"\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",[65,88922,88923,88933,88947,88951,88959,88973,88993,89005,89013,89017,89025,89037,89045,89054,89061,89066,89085,89094,89105,89110,89120,89125,89130,89135,89152,89156,89161,89168,89180,89184,89196,89200,89204,89209,89214,89221,89229,89237,89241],{"__ignoreMap":63},[68,88924,88925,88927,88929,88931],{"class":70,"line":71},[68,88926,51498],{"class":335},[68,88928,51502],{"class":51501},[68,88930,51505],{"class":74},[68,88932,51508],{"class":335},[68,88934,88935,88937,88939,88941,88943,88945],{"class":70,"line":92},[68,88936,1243],{"class":335},[68,88938,50836],{"class":51501},[68,88940,51517],{"class":74},[68,88942,381],{"class":335},[68,88944,51522],{"class":78},[68,88946,51508],{"class":335},[68,88948,88949],{"class":70,"line":1387},[68,88950,2606],{"emptyLinePlaceholder":260},[68,88952,88953,88955,88957],{"class":70,"line":1402},[68,88954,1243],{"class":335},[68,88956,51535],{"class":51501},[68,88958,51508],{"class":335},[68,88960,88961,88963,88965,88967,88969,88971],{"class":70,"line":1408},[68,88962,52345],{"class":335},[68,88964,51545],{"class":51501},[68,88966,51548],{"class":74},[68,88968,381],{"class":335},[68,88970,51553],{"class":78},[68,88972,51508],{"class":335},[68,88974,88975,88977,88979,88981,88983,88985,88987,88989,88991],{"class":70,"line":1422},[68,88976,52345],{"class":335},[68,88978,51545],{"class":51501},[68,88980,15125],{"class":74},[68,88982,381],{"class":335},[68,88984,51592],{"class":78},[68,88986,51572],{"class":74},[68,88988,381],{"class":335},[68,88990,51599],{"class":78},[68,88992,51508],{"class":335},[68,88994,88995,88997,88999,89001,89003],{"class":70,"line":1428},[68,88996,52345],{"class":335},[68,88998,51608],{"class":51501},[68,89000,51611],{"class":335},[68,89002,51608],{"class":51501},[68,89004,51508],{"class":335},[68,89006,89007,89009,89011],{"class":70,"line":1519},[68,89008,51986],{"class":335},[68,89010,51535],{"class":51501},[68,89012,51508],{"class":335},[68,89014,89015],{"class":70,"line":1525},[68,89016,2606],{"emptyLinePlaceholder":260},[68,89018,89019,89021,89023],{"class":70,"line":1537},[68,89020,1243],{"class":335},[68,89022,52001],{"class":51501},[68,89024,51508],{"class":335},[68,89026,89027,89029,89031,89033,89035],{"class":70,"line":1819},[68,89028,52345],{"class":335},[68,89030,19],{"class":51501},[68,89032,53695],{"class":335},[68,89034,19],{"class":51501},[68,89036,51508],{"class":335},[68,89038,89039,89041,89043],{"class":70,"line":1824},[68,89040,52345],{"class":335},[68,89042,52014],{"class":51501},[68,89044,51508],{"class":335},[68,89046,89047,89049,89052],{"class":70,"line":1830},[68,89048,70285],{"class":331},[68,89050,89051],{"class":74}," fn",[68,89053,11058],{"class":335},[68,89055,89056,89059],{"class":70,"line":1835},[68,89057,89058],{"class":331},"      try",[68,89060,15777],{"class":335},[68,89062,89063],{"class":70,"line":1849},[68,89064,89065],{"class":393},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[68,89067,89068,89070,89072,89074,89076,89078,89080,89083],{"class":70,"line":1854},[68,89069,61471],{"class":331},[68,89071,7030],{"class":82},[68,89073,13769],{"class":331},[68,89075,54597],{"class":335},[68,89077,54600],{"class":74},[68,89079,336],{"class":335},[68,89081,89082],{"class":78},"'.p'",[68,89084,342],{"class":335},[68,89086,89087,89090,89092],{"class":70,"line":1860},[68,89088,89089],{"class":335},"        p.style.color ",[68,89091,381],{"class":331},[68,89093,67252],{"class":78},[68,89095,89096,89099,89102],{"class":70,"line":1881},[68,89097,89098],{"class":335},"      } ",[68,89100,89101],{"class":331},"catch",[68,89103,89104],{"class":335}," (err) {\n",[68,89106,89107],{"class":70,"line":1886},[68,89108,89109],{"class":393},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[68,89111,89112,89115,89117],{"class":70,"line":1900},[68,89113,89114],{"class":335},"        console.",[68,89116,58448],{"class":74},[68,89118,89119],{"class":335},"(err.message)\n",[68,89121,89122],{"class":70,"line":1905},[68,89123,89124],{"class":393},"        \u002F\u002F 想要中断程序，需要加return\n",[68,89126,89127],{"class":70,"line":1934},[68,89128,89129],{"class":393},"        \u002F\u002F return\n",[68,89131,89132],{"class":70,"line":1939},[68,89133,89134],{"class":393},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[68,89136,89137,89140,89142,89145,89147,89150],{"class":70,"line":1956},[68,89138,89139],{"class":331},"        throw",[68,89141,11783],{"class":331},[68,89143,89144],{"class":74}," Error",[68,89146,336],{"class":335},[68,89148,89149],{"class":78},"'你看看，选择器错误了吧'",[68,89151,342],{"class":335},[68,89153,89154],{"class":70,"line":1961},[68,89155,52599],{"class":335},[68,89157,89158],{"class":70,"line":1966},[68,89159,89160],{"class":393},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[68,89162,89163,89166],{"class":70,"line":1971},[68,89164,89165],{"class":331},"      finally",[68,89167,15777],{"class":335},[68,89169,89170,89173,89175,89178],{"class":70,"line":1985},[68,89171,89172],{"class":74},"        alert",[68,89174,336],{"class":335},[68,89176,89177],{"class":78},"'弹出对话框'",[68,89179,342],{"class":335},[68,89181,89182],{"class":70,"line":1990},[68,89183,52599],{"class":335},[68,89185,89186,89188,89190,89192,89194],{"class":70,"line":2783},[68,89187,58445],{"class":335},[68,89189,58448],{"class":74},[68,89191,336],{"class":335},[68,89193,805],{"class":82},[68,89195,342],{"class":335},[68,89197,89198],{"class":70,"line":2797},[68,89199,2606],{"emptyLinePlaceholder":260},[68,89201,89202],{"class":70,"line":2805},[68,89203,2393],{"class":335},[68,89205,89206],{"class":70,"line":2810},[68,89207,89208],{"class":393},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[68,89210,89211],{"class":70,"line":2816},[68,89212,89213],{"class":393},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[68,89215,89216,89219],{"class":70,"line":2822},[68,89217,89218],{"class":74},"    fn",[68,89220,2182],{"class":335},[68,89222,89223,89225,89227],{"class":70,"line":2827},[68,89224,52618],{"class":335},[68,89226,52014],{"class":51501},[68,89228,51508],{"class":335},[68,89230,89231,89233,89235],{"class":70,"line":8153},[68,89232,51986],{"class":335},[68,89234,52001],{"class":51501},[68,89236,51508],{"class":335},[68,89238,89239],{"class":70,"line":8177},[68,89240,2606],{"emptyLinePlaceholder":260},[68,89242,89243,89245,89247],{"class":70,"line":8182},[68,89244,51986],{"class":335},[68,89246,50836],{"class":51501},[68,89248,51508],{"class":335},[19,89250,89251],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[23,89253,89254],{"start":1387},[26,89255,89256],{},"debugger",[19,89258,89259],{},[48,89260],{"alt":63,"src":89261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89263,89264],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89266,89268],{"id":89267},"_416-处理this","4.16 处理this",[301,89270,89272],{"id":89271},"_4161-this的指向","4.16.1 this的指向",[23,89274,89275],{},[26,89276,89277],{},"普通函数的this",[19,89279,89280],{},[48,89281],{"alt":63,"src":89282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[23,89284,89285],{"start":92},[26,89286,89287],{},"箭头函数的this",[19,89289,89290],{},[48,89291],{"alt":63,"src":89292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89294,89295],{},[48,89296],{"alt":63,"src":89297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89299,89300],{},[48,89301],{"alt":63,"src":89302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[301,89304,89306],{"id":89305},"_4162-this的改变","4.16.2 this的改变",[19,89308,89309],{},"call() apply() bind()",[23,89311,89312],{},[26,89313,89314],{},"call()",[19,89316,89317],{},[48,89318],{"alt":63,"src":89319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89321,89322],{},"两个作用：①调用函数；②改变this指向",[58,89324,89326],{"className":53268,"code":89325,"language":53270,"meta":63,"style":63},"\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",[65,89327,89328,89336,89344,89348,89353,89357,89362,89367,89372,89376,89381,89389],{"__ignoreMap":63},[68,89329,89330,89332,89334],{"class":70,"line":71},[68,89331,1243],{"class":335},[68,89333,52001],{"class":51501},[68,89335,51508],{"class":335},[68,89337,89338,89340,89342],{"class":70,"line":92},[68,89339,52345],{"class":335},[68,89341,52014],{"class":51501},[68,89343,51508],{"class":335},[68,89345,89346],{"class":70,"line":1387},[68,89347,71724],{"class":335},[68,89349,89350],{"class":70,"line":1402},[68,89351,89352],{"class":335},"      uname: 'pink'\n",[68,89354,89355],{"class":70,"line":1408},[68,89356,2393],{"class":335},[68,89358,89359],{"class":70,"line":1422},[68,89360,89361],{"class":335},"    function fn(x, y) {\n",[68,89363,89364],{"class":70,"line":1428},[68,89365,89366],{"class":335},"      console.log(this)  \u002F\u002Fwindow\n",[68,89368,89369],{"class":70,"line":1519},[68,89370,89371],{"class":335},"      console.log(x + y)\n",[68,89373,89374],{"class":70,"line":1525},[68,89375,2393],{"class":335},[68,89377,89378],{"class":70,"line":1537},[68,89379,89380],{"class":335},"    fn.call(obj, 1, 2)\n",[68,89382,89383,89385,89387],{"class":70,"line":1819},[68,89384,52618],{"class":335},[68,89386,52014],{"class":51501},[68,89388,51508],{"class":335},[68,89390,89391,89393,89395],{"class":70,"line":1824},[68,89392,51986],{"class":335},[68,89394,52001],{"class":51501},[68,89396,51508],{"class":335},[19,89398,89399],{},[48,89400],{"alt":63,"src":89401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[23,89403,89404],{"start":92},[26,89405,89406],{},"apply()",[19,89408,89409],{},[48,89410],{"alt":63,"src":89411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89413,89322],{},[19,89415,89416],{},"call传递的是普通参数，而apply必须传递的是数组",[58,89418,89420],{"className":50834,"code":89419,"language":50836,"meta":63,"style":63},"\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",[65,89421,89422,89432,89446,89450,89458,89472,89492,89504,89512,89516,89524,89532,89542,89549,89553,89558,89574,89586,89600,89604,89609,89628,89633,89637,89642,89647,89655,89660,89682,89687,89703,89719,89731,89735,89740,89759,89767,89775,89779],{"__ignoreMap":63},[68,89423,89424,89426,89428,89430],{"class":70,"line":71},[68,89425,51498],{"class":335},[68,89427,51502],{"class":51501},[68,89429,51505],{"class":74},[68,89431,51508],{"class":335},[68,89433,89434,89436,89438,89440,89442,89444],{"class":70,"line":92},[68,89435,1243],{"class":335},[68,89437,50836],{"class":51501},[68,89439,51517],{"class":74},[68,89441,381],{"class":335},[68,89443,51522],{"class":78},[68,89445,51508],{"class":335},[68,89447,89448],{"class":70,"line":1387},[68,89449,2606],{"emptyLinePlaceholder":260},[68,89451,89452,89454,89456],{"class":70,"line":1402},[68,89453,1243],{"class":335},[68,89455,51535],{"class":51501},[68,89457,51508],{"class":335},[68,89459,89460,89462,89464,89466,89468,89470],{"class":70,"line":1408},[68,89461,52345],{"class":335},[68,89463,51545],{"class":51501},[68,89465,51548],{"class":74},[68,89467,381],{"class":335},[68,89469,51553],{"class":78},[68,89471,51508],{"class":335},[68,89473,89474,89476,89478,89480,89482,89484,89486,89488,89490],{"class":70,"line":1422},[68,89475,52345],{"class":335},[68,89477,51545],{"class":51501},[68,89479,15125],{"class":74},[68,89481,381],{"class":335},[68,89483,51592],{"class":78},[68,89485,51572],{"class":74},[68,89487,381],{"class":335},[68,89489,51599],{"class":78},[68,89491,51508],{"class":335},[68,89493,89494,89496,89498,89500,89502],{"class":70,"line":1428},[68,89495,52345],{"class":335},[68,89497,51608],{"class":51501},[68,89499,51611],{"class":335},[68,89501,51608],{"class":51501},[68,89503,51508],{"class":335},[68,89505,89506,89508,89510],{"class":70,"line":1519},[68,89507,51986],{"class":335},[68,89509,51535],{"class":51501},[68,89511,51508],{"class":335},[68,89513,89514],{"class":70,"line":1525},[68,89515,2606],{"emptyLinePlaceholder":260},[68,89517,89518,89520,89522],{"class":70,"line":1537},[68,89519,1243],{"class":335},[68,89521,52001],{"class":51501},[68,89523,51508],{"class":335},[68,89525,89526,89528,89530],{"class":70,"line":1819},[68,89527,52345],{"class":335},[68,89529,52014],{"class":51501},[68,89531,51508],{"class":335},[68,89533,89534,89536,89538,89540],{"class":70,"line":1824},[68,89535,11426],{"class":331},[68,89537,70172],{"class":82},[68,89539,13769],{"class":331},[68,89541,15777],{"class":335},[68,89543,89544,89546],{"class":70,"line":1830},[68,89545,71827],{"class":335},[68,89547,89548],{"class":82},"18\n",[68,89550,89551],{"class":70,"line":1835},[68,89552,2393],{"class":335},[68,89554,89555],{"class":70,"line":1849},[68,89556,89557],{"class":393},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[68,89559,89560,89562,89564,89566,89568,89570,89572],{"class":70,"line":1854},[68,89561,70285],{"class":331},[68,89563,89051],{"class":74},[68,89565,336],{"class":335},[68,89567,1153],{"class":5421},[68,89569,12640],{"class":335},[68,89571,1178],{"class":5421},[68,89573,12647],{"class":335},[68,89575,89576,89578,89580,89582,89584],{"class":70,"line":1860},[68,89577,58445],{"class":335},[68,89579,58448],{"class":74},[68,89581,336],{"class":335},[68,89583,87194],{"class":82},[68,89585,342],{"class":335},[68,89587,89588,89590,89592,89595,89597],{"class":70,"line":1881},[68,89589,58445],{"class":335},[68,89591,58448],{"class":74},[68,89593,89594],{"class":335},"(x ",[68,89596,814],{"class":331},[68,89598,89599],{"class":335}," y)\n",[68,89601,89602],{"class":70,"line":1886},[68,89603,2393],{"class":335},[68,89605,89606],{"class":70,"line":1900},[68,89607,89608],{"class":393},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[68,89610,89611,89614,89617,89620,89622,89624,89626],{"class":70,"line":1905},[68,89612,89613],{"class":335},"    fn.",[68,89615,89616],{"class":74},"apply",[68,89618,89619],{"class":335},"(obj, [",[68,89621,551],{"class":82},[68,89623,12640],{"class":335},[68,89625,412],{"class":82},[68,89627,4863],{"class":335},[68,89629,89630],{"class":70,"line":1934},[68,89631,89632],{"class":393},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[68,89634,89635],{"class":70,"line":1939},[68,89636,2606],{"emptyLinePlaceholder":260},[68,89638,89639],{"class":70,"line":1956},[68,89640,89641],{"class":393},"    \u002F\u002F 使用场景：求数组最大值\n",[68,89643,89644],{"class":70,"line":1961},[68,89645,89646],{"class":393},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[68,89648,89649,89652],{"class":70,"line":1966},[68,89650,89651],{"class":393},"    \u002F\u002F console.log(max)",[68,89653,89654],{"class":393},"   \u002F\u002F3\n",[68,89656,89657],{"class":70,"line":1971},[68,89658,89659],{"class":393},"    \u002F\u002F 指向空或者Math都是可以的\n",[68,89661,89662,89664,89666,89668,89670,89672,89674,89676,89678,89680],{"class":70,"line":1985},[68,89663,11426],{"class":331},[68,89665,57896],{"class":82},[68,89667,13769],{"class":331},[68,89669,52427],{"class":335},[68,89671,644],{"class":82},[68,89673,12640],{"class":335},[68,89675,837],{"class":82},[68,89677,12640],{"class":335},[68,89679,868],{"class":82},[68,89681,33447],{"class":335},[68,89683,89684],{"class":70,"line":1990},[68,89685,89686],{"class":393},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[68,89688,89689,89691,89693,89695,89698,89700],{"class":70,"line":2783},[68,89690,11426],{"class":331},[68,89692,6156],{"class":82},[68,89694,13769],{"class":331},[68,89696,89697],{"class":335}," Math.max.",[68,89699,89616],{"class":74},[68,89701,89702],{"class":335},"(Math, arr)\n",[68,89704,89705,89707,89710,89712,89715,89717],{"class":70,"line":2797},[68,89706,11426],{"class":331},[68,89708,89709],{"class":82}," min",[68,89711,13769],{"class":331},[68,89713,89714],{"class":335}," Math.min.",[68,89716,89616],{"class":74},[68,89718,89702],{"class":335},[68,89720,89721,89723,89725,89728],{"class":70,"line":2805},[68,89722,73954],{"class":335},[68,89724,58448],{"class":74},[68,89726,89727],{"class":335},"(max, min)     ",[68,89729,89730],{"class":393},"\u002F\u002F100,4\n",[68,89732,89733],{"class":70,"line":2810},[68,89734,2606],{"emptyLinePlaceholder":260},[68,89736,89737],{"class":70,"line":2816},[68,89738,89739],{"class":393},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[68,89741,89742,89744,89746,89749,89751,89753,89756],{"class":70,"line":2822},[68,89743,73954],{"class":335},[68,89745,58448],{"class":74},[68,89747,89748],{"class":335},"(Max.",[68,89750,6220],{"class":74},[68,89752,336],{"class":335},[68,89754,89755],{"class":331},"...",[68,89757,89758],{"class":335},"arr))\n",[68,89760,89761,89763,89765],{"class":70,"line":2827},[68,89762,52618],{"class":335},[68,89764,52014],{"class":51501},[68,89766,51508],{"class":335},[68,89768,89769,89771,89773],{"class":70,"line":8153},[68,89770,51986],{"class":335},[68,89772,52001],{"class":51501},[68,89774,51508],{"class":335},[68,89776,89777],{"class":70,"line":8177},[68,89778,2606],{"emptyLinePlaceholder":260},[68,89780,89781,89783,89785],{"class":70,"line":8182},[68,89782,51986],{"class":335},[68,89784,50836],{"class":51501},[68,89786,51508],{"class":335},[19,89788,89789],{},[48,89790],{"alt":63,"src":89791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[23,89793,89794],{"start":1387},[26,89795,89796],{},"bind()",[19,89798,89799],{},[48,89800],{"alt":63,"src":89801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89803,89804],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89806,89807],{},"bind的语法跟call很相似",[58,89809,89811],{"className":53268,"code":89810,"language":53270,"meta":63,"style":63},"\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",[65,89812,89813,89821,89829,89833,89838,89842,89846,89851,89855,89860,89865,89870,89875,89880,89885,89890,89894,89902],{"__ignoreMap":63},[68,89814,89815,89817,89819],{"class":70,"line":71},[68,89816,1243],{"class":335},[68,89818,52001],{"class":51501},[68,89820,51508],{"class":335},[68,89822,89823,89825,89827],{"class":70,"line":92},[68,89824,52345],{"class":335},[68,89826,52014],{"class":51501},[68,89828,51508],{"class":335},[68,89830,89831],{"class":70,"line":1387},[68,89832,71724],{"class":335},[68,89834,89835],{"class":70,"line":1402},[68,89836,89837],{"class":335},"      age: 18\n",[68,89839,89840],{"class":70,"line":1408},[68,89841,2393],{"class":335},[68,89843,89844],{"class":70,"line":1422},[68,89845,77344],{"class":335},[68,89847,89848],{"class":70,"line":1428},[68,89849,89850],{"class":335},"      console.log(this)\n",[68,89852,89853],{"class":70,"line":1519},[68,89854,2393],{"class":335},[68,89856,89857],{"class":70,"line":1525},[68,89858,89859],{"class":335},"    \u002F\u002F 1.bind 不会调用函数\n",[68,89861,89862],{"class":70,"line":1537},[68,89863,89864],{"class":335},"    \u002F\u002F 2.bind能改变this的指向\n",[68,89866,89867],{"class":70,"line":1819},[68,89868,89869],{"class":335},"    fn.bind()\n",[68,89871,89872],{"class":70,"line":1824},[68,89873,89874],{"class":335},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[68,89876,89877],{"class":70,"line":1830},[68,89878,89879],{"class":335},"    const fun = fn.bind(obj)\n",[68,89881,89882],{"class":70,"line":1835},[68,89883,89884],{"class":335},"    \u002F\u002F console.log(fun)\n",[68,89886,89887],{"class":70,"line":1849},[68,89888,89889],{"class":335},"    \u002F\u002F 调用,查看this的指向\n",[68,89891,89892],{"class":70,"line":1854},[68,89893,52852],{"class":335},[68,89895,89896,89898,89900],{"class":70,"line":1860},[68,89897,52618],{"class":335},[68,89899,52014],{"class":51501},[68,89901,51508],{"class":335},[68,89903,89904,89906,89908],{"class":70,"line":1881},[68,89905,51986],{"class":335},[68,89907,52001],{"class":51501},[68,89909,51508],{"class":335},[19,89911,89912],{},[48,89913],{"alt":63,"src":89914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[23,89916,89917],{"start":1402},[26,89918,89919],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[58,89921,89923],{"className":53268,"code":89922,"language":53270,"meta":63,"style":63},"\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",[65,89924,89925,89933,89946,89954,89959,89963,89968,89973,89978,89983,89988,89993,89998,90003,90007,90015],{"__ignoreMap":63},[68,89926,89927,89929,89931],{"class":70,"line":71},[68,89928,1243],{"class":335},[68,89930,52001],{"class":51501},[68,89932,51508],{"class":335},[68,89934,89935,89937,89939,89942,89944],{"class":70,"line":92},[68,89936,52345],{"class":335},[68,89938,54088],{"class":51501},[68,89940,89941],{"class":335},">禁用\u003C\u002F",[68,89943,54088],{"class":51501},[68,89945,51508],{"class":335},[68,89947,89948,89950,89952],{"class":70,"line":1387},[68,89949,52345],{"class":335},[68,89951,52014],{"class":51501},[68,89953,51508],{"class":335},[68,89955,89956],{"class":70,"line":1402},[68,89957,89958],{"class":335},"    const btn = document.querySelector('button')\n",[68,89960,89961],{"class":70,"line":1408},[68,89962,59217],{"class":335},[68,89964,89965],{"class":70,"line":1422},[68,89966,89967],{"class":335},"      this.disabled = true\n",[68,89969,89970],{"class":70,"line":1428},[68,89971,89972],{"class":335},"      \u002F\u002F 定时器是window进行调用的\n",[68,89974,89975],{"class":70,"line":1519},[68,89976,89977],{"class":335},"      setTimeout(function () {\n",[68,89979,89980],{"class":70,"line":1525},[68,89981,89982],{"class":335},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[68,89984,89985],{"class":70,"line":1537},[68,89986,89987],{"class":335},"        this.disabled = false\n",[68,89989,89990],{"class":70,"line":1819},[68,89991,89992],{"class":335},"      }.bind(this), 2000)\n",[68,89994,89995],{"class":70,"line":1824},[68,89996,89997],{"class":335},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[68,89999,90000],{"class":70,"line":1830},[68,90001,90002],{"class":335},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[68,90004,90005],{"class":70,"line":1835},[68,90006,33662],{"class":335},[68,90008,90009,90011,90013],{"class":70,"line":1849},[68,90010,52618],{"class":335},[68,90012,52014],{"class":51501},[68,90014,51508],{"class":335},[68,90016,90017,90019,90021],{"class":70,"line":1854},[68,90018,51986],{"class":335},[68,90020,52001],{"class":51501},[68,90022,51508],{"class":335},[23,90024,90025],{"start":1408},[26,90026,22158],{},[19,90028,90029],{},[48,90030],{"alt":63,"src":90031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90033,90035],{"id":90034},"_417-性能优化","4.17 性能优化",[301,90037,90039],{"id":90038},"_4171-防抖","4.17.1 防抖",[19,90041,90042],{},[48,90043],{"alt":63,"src":90044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90046,90047],{},[483,90048,90049],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90051,90052],{},"防抖实现方式：",[42,90054,90055],{},[26,90056,90057],{},"lodash 提供了防抖处理",[19,90059,90060],{},"_.debounce(func,[wait=0],[options={}])",[19,90062,90063],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[58,90065,90067],{"className":50834,"code":90066,"language":50836,"meta":63,"style":63},"\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",[65,90068,90069,90079,90093,90097,90105,90119,90139,90151,90159,90165,90175,90187,90199,90210,90222,90232,90242,90255,90259,90267,90275,90279,90287,90305,90323,90331,90350,90360,90369,90380,90385,90389,90394,90399,90404,90429,90437,90445,90449],{"__ignoreMap":63},[68,90070,90071,90073,90075,90077],{"class":70,"line":71},[68,90072,51498],{"class":335},[68,90074,51502],{"class":51501},[68,90076,51505],{"class":74},[68,90078,51508],{"class":335},[68,90080,90081,90083,90085,90087,90089,90091],{"class":70,"line":92},[68,90082,1243],{"class":335},[68,90084,50836],{"class":51501},[68,90086,51517],{"class":74},[68,90088,381],{"class":335},[68,90090,51522],{"class":78},[68,90092,51508],{"class":335},[68,90094,90095],{"class":70,"line":1387},[68,90096,2606],{"emptyLinePlaceholder":260},[68,90098,90099,90101,90103],{"class":70,"line":1402},[68,90100,1243],{"class":335},[68,90102,51535],{"class":51501},[68,90104,51508],{"class":335},[68,90106,90107,90109,90111,90113,90115,90117],{"class":70,"line":1408},[68,90108,52345],{"class":335},[68,90110,51545],{"class":51501},[68,90112,51548],{"class":74},[68,90114,381],{"class":335},[68,90116,51553],{"class":78},[68,90118,51508],{"class":335},[68,90120,90121,90123,90125,90127,90129,90131,90133,90135,90137],{"class":70,"line":1422},[68,90122,52345],{"class":335},[68,90124,51545],{"class":51501},[68,90126,15125],{"class":74},[68,90128,381],{"class":335},[68,90130,51592],{"class":78},[68,90132,51572],{"class":74},[68,90134,381],{"class":335},[68,90136,51599],{"class":78},[68,90138,51508],{"class":335},[68,90140,90141,90143,90145,90147,90149],{"class":70,"line":1428},[68,90142,52345],{"class":335},[68,90144,51608],{"class":51501},[68,90146,51611],{"class":335},[68,90148,51608],{"class":51501},[68,90150,51508],{"class":335},[68,90152,90153,90155,90157],{"class":70,"line":1519},[68,90154,52345],{"class":335},[68,90156,250],{"class":51501},[68,90158,51508],{"class":335},[68,90160,90161,90163],{"class":70,"line":1525},[68,90162,54953],{"class":74},[68,90164,15777],{"class":335},[68,90166,90167,90169,90171,90173],{"class":70,"line":1537},[68,90168,72797],{"class":82},[68,90170,51638],{"class":335},[68,90172,60706],{"class":82},[68,90174,1498],{"class":335},[68,90176,90177,90179,90181,90183,90185],{"class":70,"line":1819},[68,90178,54972],{"class":82},[68,90180,51638],{"class":335},[68,90182,1929],{"class":82},[68,90184,51693],{"class":331},[68,90186,1498],{"class":335},[68,90188,90189,90191,90193,90195,90197],{"class":70,"line":1824},[68,90190,54986],{"class":82},[68,90192,51638],{"class":335},[68,90194,1929],{"class":82},[68,90196,51693],{"class":331},[68,90198,1498],{"class":335},[68,90200,90201,90203,90205,90208],{"class":70,"line":1830},[68,90202,55085],{"class":82},[68,90204,51638],{"class":335},[68,90206,90207],{"class":82},"gray",[68,90209,1498],{"class":335},[68,90211,90212,90214,90216,90218,90220],{"class":70,"line":1835},[68,90213,55123],{"class":82},[68,90215,51638],{"class":335},[68,90217,1158],{"class":82},[68,90219,51693],{"class":331},[68,90221,1498],{"class":335},[68,90223,90224,90226,90228,90230],{"class":70,"line":1849},[68,90225,57617],{"class":82},[68,90227,51638],{"class":335},[68,90229,61043],{"class":82},[68,90231,1498],{"class":335},[68,90233,90234,90236,90238,90240],{"class":70,"line":1854},[68,90235,57487],{"class":82},[68,90237,51638],{"class":335},[68,90239,51793],{"class":82},[68,90241,1498],{"class":335},[68,90243,90244,90247,90249,90251,90253],{"class":70,"line":1860},[68,90245,90246],{"class":82},"      padding-top",[68,90248,51638],{"class":335},[68,90250,652],{"class":82},[68,90252,51693],{"class":331},[68,90254,1498],{"class":335},[68,90256,90257],{"class":70,"line":1881},[68,90258,2393],{"class":335},[68,90260,90261,90263,90265],{"class":70,"line":1886},[68,90262,52618],{"class":335},[68,90264,250],{"class":51501},[68,90266,51508],{"class":335},[68,90268,90269,90271,90273],{"class":70,"line":1900},[68,90270,51986],{"class":335},[68,90272,51535],{"class":51501},[68,90274,51508],{"class":335},[68,90276,90277],{"class":70,"line":1905},[68,90278,2606],{"emptyLinePlaceholder":260},[68,90280,90281,90283,90285],{"class":70,"line":1934},[68,90282,1243],{"class":335},[68,90284,52001],{"class":51501},[68,90286,51508],{"class":335},[68,90288,90289,90291,90293,90295,90297,90299,90301,90303],{"class":70,"line":1939},[68,90290,52345],{"class":335},[68,90292,51812],{"class":51501},[68,90294,53687],{"class":74},[68,90296,381],{"class":335},[68,90298,53692],{"class":78},[68,90300,55515],{"class":335},[68,90302,51812],{"class":51501},[68,90304,51508],{"class":335},[68,90306,90307,90309,90311,90313,90315,90317,90319,90321],{"class":70,"line":1956},[68,90308,52345],{"class":335},[68,90310,52014],{"class":51501},[68,90312,55440],{"class":74},[68,90314,381],{"class":335},[68,90316,88475],{"class":78},[68,90318,55515],{"class":335},[68,90320,52014],{"class":51501},[68,90322,51508],{"class":335},[68,90324,90325,90327,90329],{"class":70,"line":1961},[68,90326,52345],{"class":335},[68,90328,52014],{"class":51501},[68,90330,51508],{"class":335},[68,90332,90333,90335,90337,90339,90341,90343,90345,90348],{"class":70,"line":1966},[68,90334,11426],{"class":331},[68,90336,87134],{"class":82},[68,90338,13769],{"class":331},[68,90340,54597],{"class":335},[68,90342,54600],{"class":74},[68,90344,336],{"class":335},[68,90346,90347],{"class":78},"'.box'",[68,90349,342],{"class":335},[68,90351,90352,90354,90356,90358],{"class":70,"line":1971},[68,90353,52420],{"class":331},[68,90355,9643],{"class":335},[68,90357,381],{"class":331},[68,90359,47534],{"class":82},[68,90361,90362,90364,90367],{"class":70,"line":1985},[68,90363,70285],{"class":331},[68,90365,90366],{"class":74}," mouseMove",[68,90368,11058],{"class":335},[68,90370,90371,90374,90376,90378],{"class":70,"line":1990},[68,90372,90373],{"class":335},"      box.innerHTML ",[68,90375,381],{"class":331},[68,90377,3238],{"class":335},[68,90379,2908],{"class":331},[68,90381,90382],{"class":70,"line":2783},[68,90383,90384],{"class":393},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[68,90386,90387],{"class":70,"line":2797},[68,90388,2393],{"class":335},[68,90390,90391],{"class":70,"line":2805},[68,90392,90393],{"class":393},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[68,90395,90396],{"class":70,"line":2810},[68,90397,90398],{"class":393},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[68,90400,90401],{"class":70,"line":2816},[68,90402,90403],{"class":393},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[68,90405,90406,90409,90411,90413,90416,90419,90422,90425,90427],{"class":70,"line":2822},[68,90407,90408],{"class":335},"    box.",[68,90410,58014],{"class":74},[68,90412,336],{"class":335},[68,90414,90415],{"class":78},"'mousemove'",[68,90417,90418],{"class":335},", _.",[68,90420,90421],{"class":74},"debounce",[68,90423,90424],{"class":335},"(mouseMove, ",[68,90426,65275],{"class":82},[68,90428,30698],{"class":335},[68,90430,90431,90433,90435],{"class":70,"line":2827},[68,90432,52618],{"class":335},[68,90434,52014],{"class":51501},[68,90436,51508],{"class":335},[68,90438,90439,90441,90443],{"class":70,"line":8153},[68,90440,51986],{"class":335},[68,90442,52001],{"class":51501},[68,90444,51508],{"class":335},[68,90446,90447],{"class":70,"line":8177},[68,90448,2606],{"emptyLinePlaceholder":260},[68,90450,90451,90453,90455],{"class":70,"line":8182},[68,90452,51986],{"class":335},[68,90454,50836],{"class":51501},[68,90456,51508],{"class":335},[42,90458,90459],{},[26,90460,90461],{},"手写一个防抖函数来处理",[19,90463,90464],{},"防抖的核心就是利用定时器来实现的：",[19,90466,90467],{},"①声明一个定时器变量",[19,90469,90470],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90472,90473],{},"③如果没有定时器则开启定时器，记得存到变量里面",[58,90475,90477],{"className":50834,"code":90476,"language":50836,"meta":63,"style":63},"\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",[65,90478,90479,90489,90503,90507,90515,90529,90549,90561,90569,90575,90585,90597,90609,90619,90631,90641,90651,90663,90667,90675,90683,90687,90695,90713,90731,90739,90757,90767,90775,90785,90789,90793,90797,90802,90807,90812,90817,90822,90827,90845,90852,90857,90865,90870,90883,90899,90909,90914,90918,90922,90942,90946,90951,90956,90961,90966,90974,90982,90986],{"__ignoreMap":63},[68,90480,90481,90483,90485,90487],{"class":70,"line":71},[68,90482,51498],{"class":335},[68,90484,51502],{"class":51501},[68,90486,51505],{"class":74},[68,90488,51508],{"class":335},[68,90490,90491,90493,90495,90497,90499,90501],{"class":70,"line":92},[68,90492,1243],{"class":335},[68,90494,50836],{"class":51501},[68,90496,51517],{"class":74},[68,90498,381],{"class":335},[68,90500,51522],{"class":78},[68,90502,51508],{"class":335},[68,90504,90505],{"class":70,"line":1387},[68,90506,2606],{"emptyLinePlaceholder":260},[68,90508,90509,90511,90513],{"class":70,"line":1402},[68,90510,1243],{"class":335},[68,90512,51535],{"class":51501},[68,90514,51508],{"class":335},[68,90516,90517,90519,90521,90523,90525,90527],{"class":70,"line":1408},[68,90518,52345],{"class":335},[68,90520,51545],{"class":51501},[68,90522,51548],{"class":74},[68,90524,381],{"class":335},[68,90526,51553],{"class":78},[68,90528,51508],{"class":335},[68,90530,90531,90533,90535,90537,90539,90541,90543,90545,90547],{"class":70,"line":1422},[68,90532,52345],{"class":335},[68,90534,51545],{"class":51501},[68,90536,15125],{"class":74},[68,90538,381],{"class":335},[68,90540,51592],{"class":78},[68,90542,51572],{"class":74},[68,90544,381],{"class":335},[68,90546,51599],{"class":78},[68,90548,51508],{"class":335},[68,90550,90551,90553,90555,90557,90559],{"class":70,"line":1428},[68,90552,52345],{"class":335},[68,90554,51608],{"class":51501},[68,90556,51611],{"class":335},[68,90558,51608],{"class":51501},[68,90560,51508],{"class":335},[68,90562,90563,90565,90567],{"class":70,"line":1519},[68,90564,52345],{"class":335},[68,90566,250],{"class":51501},[68,90568,51508],{"class":335},[68,90570,90571,90573],{"class":70,"line":1525},[68,90572,54953],{"class":74},[68,90574,15777],{"class":335},[68,90576,90577,90579,90581,90583],{"class":70,"line":1537},[68,90578,72797],{"class":82},[68,90580,51638],{"class":335},[68,90582,60706],{"class":82},[68,90584,1498],{"class":335},[68,90586,90587,90589,90591,90593,90595],{"class":70,"line":1819},[68,90588,54972],{"class":82},[68,90590,51638],{"class":335},[68,90592,1929],{"class":82},[68,90594,51693],{"class":331},[68,90596,1498],{"class":335},[68,90598,90599,90601,90603,90605,90607],{"class":70,"line":1824},[68,90600,54986],{"class":82},[68,90602,51638],{"class":335},[68,90604,1929],{"class":82},[68,90606,51693],{"class":331},[68,90608,1498],{"class":335},[68,90610,90611,90613,90615,90617],{"class":70,"line":1830},[68,90612,55085],{"class":82},[68,90614,51638],{"class":335},[68,90616,90207],{"class":82},[68,90618,1498],{"class":335},[68,90620,90621,90623,90625,90627,90629],{"class":70,"line":1835},[68,90622,55123],{"class":82},[68,90624,51638],{"class":335},[68,90626,1158],{"class":82},[68,90628,51693],{"class":331},[68,90630,1498],{"class":335},[68,90632,90633,90635,90637,90639],{"class":70,"line":1849},[68,90634,57617],{"class":82},[68,90636,51638],{"class":335},[68,90638,61043],{"class":82},[68,90640,1498],{"class":335},[68,90642,90643,90645,90647,90649],{"class":70,"line":1854},[68,90644,57487],{"class":82},[68,90646,51638],{"class":335},[68,90648,51793],{"class":82},[68,90650,1498],{"class":335},[68,90652,90653,90655,90657,90659,90661],{"class":70,"line":1860},[68,90654,90246],{"class":82},[68,90656,51638],{"class":335},[68,90658,652],{"class":82},[68,90660,51693],{"class":331},[68,90662,1498],{"class":335},[68,90664,90665],{"class":70,"line":1881},[68,90666,2393],{"class":335},[68,90668,90669,90671,90673],{"class":70,"line":1886},[68,90670,52618],{"class":335},[68,90672,250],{"class":51501},[68,90674,51508],{"class":335},[68,90676,90677,90679,90681],{"class":70,"line":1900},[68,90678,51986],{"class":335},[68,90680,51535],{"class":51501},[68,90682,51508],{"class":335},[68,90684,90685],{"class":70,"line":1905},[68,90686,2606],{"emptyLinePlaceholder":260},[68,90688,90689,90691,90693],{"class":70,"line":1934},[68,90690,1243],{"class":335},[68,90692,52001],{"class":51501},[68,90694,51508],{"class":335},[68,90696,90697,90699,90701,90703,90705,90707,90709,90711],{"class":70,"line":1939},[68,90698,52345],{"class":335},[68,90700,51812],{"class":51501},[68,90702,53687],{"class":74},[68,90704,381],{"class":335},[68,90706,53692],{"class":78},[68,90708,55515],{"class":335},[68,90710,51812],{"class":51501},[68,90712,51508],{"class":335},[68,90714,90715,90717,90719,90721,90723,90725,90727,90729],{"class":70,"line":1956},[68,90716,52345],{"class":335},[68,90718,52014],{"class":51501},[68,90720,55440],{"class":74},[68,90722,381],{"class":335},[68,90724,88475],{"class":78},[68,90726,55515],{"class":335},[68,90728,52014],{"class":51501},[68,90730,51508],{"class":335},[68,90732,90733,90735,90737],{"class":70,"line":1961},[68,90734,52345],{"class":335},[68,90736,52014],{"class":51501},[68,90738,51508],{"class":335},[68,90740,90741,90743,90745,90747,90749,90751,90753,90755],{"class":70,"line":1966},[68,90742,11426],{"class":331},[68,90744,87134],{"class":82},[68,90746,13769],{"class":331},[68,90748,54597],{"class":335},[68,90750,54600],{"class":74},[68,90752,336],{"class":335},[68,90754,90347],{"class":78},[68,90756,342],{"class":335},[68,90758,90759,90761,90763,90765],{"class":70,"line":1971},[68,90760,52420],{"class":331},[68,90762,9643],{"class":335},[68,90764,381],{"class":331},[68,90766,47534],{"class":82},[68,90768,90769,90771,90773],{"class":70,"line":1985},[68,90770,70285],{"class":331},[68,90772,90366],{"class":74},[68,90774,11058],{"class":335},[68,90776,90777,90779,90781,90783],{"class":70,"line":1990},[68,90778,90373],{"class":335},[68,90780,381],{"class":331},[68,90782,3238],{"class":335},[68,90784,2908],{"class":331},[68,90786,90787],{"class":70,"line":2783},[68,90788,90384],{"class":393},[68,90790,90791],{"class":70,"line":2797},[68,90792,2393],{"class":335},[68,90794,90795],{"class":70,"line":2805},[68,90796,90393],{"class":393},[68,90798,90799],{"class":70,"line":2810},[68,90800,90801],{"class":393},"    \u002F\u002F 手写防抖函数\n",[68,90803,90804],{"class":70,"line":2816},[68,90805,90806],{"class":393},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[68,90808,90809],{"class":70,"line":2822},[68,90810,90811],{"class":393},"    \u002F\u002F 1.声明定时器变量\n",[68,90813,90814],{"class":70,"line":2827},[68,90815,90816],{"class":393},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[68,90818,90819],{"class":70,"line":8153},[68,90820,90821],{"class":393},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[68,90823,90824],{"class":70,"line":8177},[68,90825,90826],{"class":393},"    \u002F\u002F 4.定时器里面写函数调用\n",[68,90828,90829,90831,90834,90836,90839,90841,90843],{"class":70,"line":8182},[68,90830,70285],{"class":331},[68,90832,90833],{"class":74}," debounce",[68,90835,336],{"class":335},[68,90837,90838],{"class":5421},"fn",[68,90840,12640],{"class":335},[68,90842,1053],{"class":5421},[68,90844,12647],{"class":335},[68,90846,90847,90849],{"class":70,"line":8188},[68,90848,79973],{"class":331},[68,90850,90851],{"class":335}," timer\n",[68,90853,90854],{"class":70,"line":8215},[68,90855,90856],{"class":393},"      \u002F\u002F return 返回一个匿名函数\n",[68,90858,90859,90861,90863],{"class":70,"line":8220},[68,90860,74183],{"class":331},[68,90862,59119],{"class":331},[68,90864,54653],{"class":335},[68,90866,90867],{"class":70,"line":8226},[68,90868,90869],{"class":393},"        \u002F\u002F 这里边写第二三四步\n",[68,90871,90872,90874,90877,90880],{"class":70,"line":8238},[68,90873,2703],{"class":331},[68,90875,90876],{"class":335}," (timer) ",[68,90878,90879],{"class":74},"clearTimeout",[68,90881,90882],{"class":335},"(timer)\n",[68,90884,90885,90888,90890,90893,90895,90897],{"class":70,"line":8250},[68,90886,90887],{"class":335},"        timer ",[68,90889,381],{"class":331},[68,90891,90892],{"class":74}," setTimeout",[68,90894,336],{"class":335},[68,90896,54650],{"class":331},[68,90898,54653],{"class":335},[68,90900,90901,90904,90906],{"class":70,"line":8262},[68,90902,90903],{"class":74},"          fn",[68,90905,13255],{"class":335},[68,90907,90908],{"class":393},"\u002F\u002F加小括号调用fn }, t)\n",[68,90910,90911],{"class":70,"line":9921},[68,90912,90913],{"class":335},"        }, t)\n",[68,90915,90916],{"class":70,"line":9946},[68,90917,52599],{"class":335},[68,90919,90920],{"class":70,"line":9969},[68,90921,2393],{"class":335},[68,90923,90924,90926,90928,90930,90932,90934,90936,90938,90940],{"class":70,"line":9993},[68,90925,90408],{"class":335},[68,90927,58014],{"class":74},[68,90929,336],{"class":335},[68,90931,90415],{"class":78},[68,90933,12640],{"class":335},[68,90935,90421],{"class":74},[68,90937,90424],{"class":335},[68,90939,65275],{"class":82},[68,90941,30698],{"class":335},[68,90943,90944],{"class":70,"line":9998},[68,90945,2606],{"emptyLinePlaceholder":260},[68,90947,90948],{"class":70,"line":10003},[68,90949,90950],{"class":393},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[68,90952,90953],{"class":70,"line":10008},[68,90954,90955],{"class":393},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[68,90957,90958],{"class":70,"line":10017},[68,90959,90960],{"class":393},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[68,90962,90963],{"class":70,"line":10022},[68,90964,90965],{"class":393},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[68,90967,90968,90970,90972],{"class":70,"line":10028},[68,90969,52618],{"class":335},[68,90971,52014],{"class":51501},[68,90973,51508],{"class":335},[68,90975,90976,90978,90980],{"class":70,"line":10049},[68,90977,51986],{"class":335},[68,90979,52001],{"class":51501},[68,90981,51508],{"class":335},[68,90983,90984],{"class":70,"line":10055},[68,90985,2606],{"emptyLinePlaceholder":260},[68,90987,90988,90990,90992],{"class":70,"line":10069},[68,90989,51986],{"class":335},[68,90991,50836],{"class":51501},[68,90993,51508],{"class":335},[301,90995,90997],{"id":90996},"_4172-节流","4.17.2 节流",[19,90999,91000],{},[48,91001],{"alt":63,"src":91002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91004,91005],{},[48,91006],{"alt":63,"src":91007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91009,91010],{},[483,91011,91012],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91014,91015],{},"实现方式：",[42,91017,91018],{},[26,91019,91020],{},"lodash 提供的节流函数来处理",[19,91022,91023],{},"_.throttle(func,[wait=0],[options=])",[19,91025,91026],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[58,91028,91030],{"className":50834,"code":91029,"language":50836,"meta":63,"style":63},"\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",[65,91031,91032,91042,91056,91060,91068,91082,91102,91114,91122,91128,91138,91150,91162,91172,91184,91194,91204,91216,91220,91228,91236,91240,91248,91266,91284,91292,91310,91320,91328,91338,91342,91346,91350,91355,91360,91381,91389,91397,91401],{"__ignoreMap":63},[68,91033,91034,91036,91038,91040],{"class":70,"line":71},[68,91035,51498],{"class":335},[68,91037,51502],{"class":51501},[68,91039,51505],{"class":74},[68,91041,51508],{"class":335},[68,91043,91044,91046,91048,91050,91052,91054],{"class":70,"line":92},[68,91045,1243],{"class":335},[68,91047,50836],{"class":51501},[68,91049,51517],{"class":74},[68,91051,381],{"class":335},[68,91053,51522],{"class":78},[68,91055,51508],{"class":335},[68,91057,91058],{"class":70,"line":1387},[68,91059,2606],{"emptyLinePlaceholder":260},[68,91061,91062,91064,91066],{"class":70,"line":1402},[68,91063,1243],{"class":335},[68,91065,51535],{"class":51501},[68,91067,51508],{"class":335},[68,91069,91070,91072,91074,91076,91078,91080],{"class":70,"line":1408},[68,91071,52345],{"class":335},[68,91073,51545],{"class":51501},[68,91075,51548],{"class":74},[68,91077,381],{"class":335},[68,91079,51553],{"class":78},[68,91081,51508],{"class":335},[68,91083,91084,91086,91088,91090,91092,91094,91096,91098,91100],{"class":70,"line":1422},[68,91085,52345],{"class":335},[68,91087,51545],{"class":51501},[68,91089,15125],{"class":74},[68,91091,381],{"class":335},[68,91093,51592],{"class":78},[68,91095,51572],{"class":74},[68,91097,381],{"class":335},[68,91099,51599],{"class":78},[68,91101,51508],{"class":335},[68,91103,91104,91106,91108,91110,91112],{"class":70,"line":1428},[68,91105,52345],{"class":335},[68,91107,51608],{"class":51501},[68,91109,51611],{"class":335},[68,91111,51608],{"class":51501},[68,91113,51508],{"class":335},[68,91115,91116,91118,91120],{"class":70,"line":1519},[68,91117,52345],{"class":335},[68,91119,250],{"class":51501},[68,91121,51508],{"class":335},[68,91123,91124,91126],{"class":70,"line":1525},[68,91125,54953],{"class":74},[68,91127,15777],{"class":335},[68,91129,91130,91132,91134,91136],{"class":70,"line":1537},[68,91131,72797],{"class":82},[68,91133,51638],{"class":335},[68,91135,60706],{"class":82},[68,91137,1498],{"class":335},[68,91139,91140,91142,91144,91146,91148],{"class":70,"line":1819},[68,91141,54972],{"class":82},[68,91143,51638],{"class":335},[68,91145,1929],{"class":82},[68,91147,51693],{"class":331},[68,91149,1498],{"class":335},[68,91151,91152,91154,91156,91158,91160],{"class":70,"line":1824},[68,91153,54986],{"class":82},[68,91155,51638],{"class":335},[68,91157,1929],{"class":82},[68,91159,51693],{"class":331},[68,91161,1498],{"class":335},[68,91163,91164,91166,91168,91170],{"class":70,"line":1830},[68,91165,55085],{"class":82},[68,91167,51638],{"class":335},[68,91169,90207],{"class":82},[68,91171,1498],{"class":335},[68,91173,91174,91176,91178,91180,91182],{"class":70,"line":1835},[68,91175,55123],{"class":82},[68,91177,51638],{"class":335},[68,91179,1158],{"class":82},[68,91181,51693],{"class":331},[68,91183,1498],{"class":335},[68,91185,91186,91188,91190,91192],{"class":70,"line":1849},[68,91187,57617],{"class":82},[68,91189,51638],{"class":335},[68,91191,61043],{"class":82},[68,91193,1498],{"class":335},[68,91195,91196,91198,91200,91202],{"class":70,"line":1854},[68,91197,57487],{"class":82},[68,91199,51638],{"class":335},[68,91201,51793],{"class":82},[68,91203,1498],{"class":335},[68,91205,91206,91208,91210,91212,91214],{"class":70,"line":1860},[68,91207,90246],{"class":82},[68,91209,51638],{"class":335},[68,91211,652],{"class":82},[68,91213,51693],{"class":331},[68,91215,1498],{"class":335},[68,91217,91218],{"class":70,"line":1881},[68,91219,2393],{"class":335},[68,91221,91222,91224,91226],{"class":70,"line":1886},[68,91223,52618],{"class":335},[68,91225,250],{"class":51501},[68,91227,51508],{"class":335},[68,91229,91230,91232,91234],{"class":70,"line":1900},[68,91231,51986],{"class":335},[68,91233,51535],{"class":51501},[68,91235,51508],{"class":335},[68,91237,91238],{"class":70,"line":1905},[68,91239,2606],{"emptyLinePlaceholder":260},[68,91241,91242,91244,91246],{"class":70,"line":1934},[68,91243,1243],{"class":335},[68,91245,52001],{"class":51501},[68,91247,51508],{"class":335},[68,91249,91250,91252,91254,91256,91258,91260,91262,91264],{"class":70,"line":1939},[68,91251,52345],{"class":335},[68,91253,51812],{"class":51501},[68,91255,53687],{"class":74},[68,91257,381],{"class":335},[68,91259,53692],{"class":78},[68,91261,55515],{"class":335},[68,91263,51812],{"class":51501},[68,91265,51508],{"class":335},[68,91267,91268,91270,91272,91274,91276,91278,91280,91282],{"class":70,"line":1956},[68,91269,52345],{"class":335},[68,91271,52014],{"class":51501},[68,91273,55440],{"class":74},[68,91275,381],{"class":335},[68,91277,88475],{"class":78},[68,91279,55515],{"class":335},[68,91281,52014],{"class":51501},[68,91283,51508],{"class":335},[68,91285,91286,91288,91290],{"class":70,"line":1961},[68,91287,52345],{"class":335},[68,91289,52014],{"class":51501},[68,91291,51508],{"class":335},[68,91293,91294,91296,91298,91300,91302,91304,91306,91308],{"class":70,"line":1966},[68,91295,11426],{"class":331},[68,91297,87134],{"class":82},[68,91299,13769],{"class":331},[68,91301,54597],{"class":335},[68,91303,54600],{"class":74},[68,91305,336],{"class":335},[68,91307,90347],{"class":78},[68,91309,342],{"class":335},[68,91311,91312,91314,91316,91318],{"class":70,"line":1971},[68,91313,52420],{"class":331},[68,91315,9643],{"class":335},[68,91317,381],{"class":331},[68,91319,47534],{"class":82},[68,91321,91322,91324,91326],{"class":70,"line":1985},[68,91323,70285],{"class":331},[68,91325,90366],{"class":74},[68,91327,11058],{"class":335},[68,91329,91330,91332,91334,91336],{"class":70,"line":1990},[68,91331,90373],{"class":335},[68,91333,381],{"class":331},[68,91335,3238],{"class":335},[68,91337,2908],{"class":331},[68,91339,91340],{"class":70,"line":2783},[68,91341,90384],{"class":393},[68,91343,91344],{"class":70,"line":2797},[68,91345,2393],{"class":335},[68,91347,91348],{"class":70,"line":2805},[68,91349,90393],{"class":393},[68,91351,91352],{"class":70,"line":2810},[68,91353,91354],{"class":393},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[68,91356,91357],{"class":70,"line":2816},[68,91358,91359],{"class":393},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[68,91361,91362,91364,91366,91368,91370,91372,91375,91377,91379],{"class":70,"line":2822},[68,91363,90408],{"class":335},[68,91365,58014],{"class":74},[68,91367,336],{"class":335},[68,91369,90415],{"class":78},[68,91371,90418],{"class":335},[68,91373,91374],{"class":74},"throttle",[68,91376,90424],{"class":335},[68,91378,65275],{"class":82},[68,91380,30698],{"class":335},[68,91382,91383,91385,91387],{"class":70,"line":2827},[68,91384,52618],{"class":335},[68,91386,52014],{"class":51501},[68,91388,51508],{"class":335},[68,91390,91391,91393,91395],{"class":70,"line":8153},[68,91392,51986],{"class":335},[68,91394,52001],{"class":51501},[68,91396,51508],{"class":335},[68,91398,91399],{"class":70,"line":8177},[68,91400,2606],{"emptyLinePlaceholder":260},[68,91402,91403,91405,91407],{"class":70,"line":8182},[68,91404,51986],{"class":335},[68,91406,50836],{"class":51501},[68,91408,51508],{"class":335},[42,91410,91411],{},[26,91412,91413],{},"手写一个节流函数来处理",[19,91415,71153],{},[19,91417,90467],{},[19,91419,91420],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91422,91423],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[58,91425,91427],{"className":50834,"code":91426,"language":50836,"meta":63,"style":63},"\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",[65,91428,91429,91439,91453,91457,91465,91479,91499,91511,91519,91525,91535,91547,91559,91569,91581,91591,91601,91613,91617,91625,91633,91637,91645,91663,91681,91689,91707,91717,91725,91735,91739,91743,91747,91752,91757,91762,91767,91772,91777,91794,91800,91808,91819,91834,91841,91846,91851,91861,91866,91871,91876,91880,91884,91888,91908,91916,91924,91928],{"__ignoreMap":63},[68,91430,91431,91433,91435,91437],{"class":70,"line":71},[68,91432,51498],{"class":335},[68,91434,51502],{"class":51501},[68,91436,51505],{"class":74},[68,91438,51508],{"class":335},[68,91440,91441,91443,91445,91447,91449,91451],{"class":70,"line":92},[68,91442,1243],{"class":335},[68,91444,50836],{"class":51501},[68,91446,51517],{"class":74},[68,91448,381],{"class":335},[68,91450,51522],{"class":78},[68,91452,51508],{"class":335},[68,91454,91455],{"class":70,"line":1387},[68,91456,2606],{"emptyLinePlaceholder":260},[68,91458,91459,91461,91463],{"class":70,"line":1402},[68,91460,1243],{"class":335},[68,91462,51535],{"class":51501},[68,91464,51508],{"class":335},[68,91466,91467,91469,91471,91473,91475,91477],{"class":70,"line":1408},[68,91468,52345],{"class":335},[68,91470,51545],{"class":51501},[68,91472,51548],{"class":74},[68,91474,381],{"class":335},[68,91476,51553],{"class":78},[68,91478,51508],{"class":335},[68,91480,91481,91483,91485,91487,91489,91491,91493,91495,91497],{"class":70,"line":1422},[68,91482,52345],{"class":335},[68,91484,51545],{"class":51501},[68,91486,15125],{"class":74},[68,91488,381],{"class":335},[68,91490,51592],{"class":78},[68,91492,51572],{"class":74},[68,91494,381],{"class":335},[68,91496,51599],{"class":78},[68,91498,51508],{"class":335},[68,91500,91501,91503,91505,91507,91509],{"class":70,"line":1428},[68,91502,52345],{"class":335},[68,91504,51608],{"class":51501},[68,91506,51611],{"class":335},[68,91508,51608],{"class":51501},[68,91510,51508],{"class":335},[68,91512,91513,91515,91517],{"class":70,"line":1519},[68,91514,52345],{"class":335},[68,91516,250],{"class":51501},[68,91518,51508],{"class":335},[68,91520,91521,91523],{"class":70,"line":1525},[68,91522,54953],{"class":74},[68,91524,15777],{"class":335},[68,91526,91527,91529,91531,91533],{"class":70,"line":1537},[68,91528,72797],{"class":82},[68,91530,51638],{"class":335},[68,91532,60706],{"class":82},[68,91534,1498],{"class":335},[68,91536,91537,91539,91541,91543,91545],{"class":70,"line":1819},[68,91538,54972],{"class":82},[68,91540,51638],{"class":335},[68,91542,1929],{"class":82},[68,91544,51693],{"class":331},[68,91546,1498],{"class":335},[68,91548,91549,91551,91553,91555,91557],{"class":70,"line":1824},[68,91550,54986],{"class":82},[68,91552,51638],{"class":335},[68,91554,1929],{"class":82},[68,91556,51693],{"class":331},[68,91558,1498],{"class":335},[68,91560,91561,91563,91565,91567],{"class":70,"line":1830},[68,91562,55085],{"class":82},[68,91564,51638],{"class":335},[68,91566,90207],{"class":82},[68,91568,1498],{"class":335},[68,91570,91571,91573,91575,91577,91579],{"class":70,"line":1835},[68,91572,55123],{"class":82},[68,91574,51638],{"class":335},[68,91576,1158],{"class":82},[68,91578,51693],{"class":331},[68,91580,1498],{"class":335},[68,91582,91583,91585,91587,91589],{"class":70,"line":1849},[68,91584,57617],{"class":82},[68,91586,51638],{"class":335},[68,91588,61043],{"class":82},[68,91590,1498],{"class":335},[68,91592,91593,91595,91597,91599],{"class":70,"line":1854},[68,91594,57487],{"class":82},[68,91596,51638],{"class":335},[68,91598,51793],{"class":82},[68,91600,1498],{"class":335},[68,91602,91603,91605,91607,91609,91611],{"class":70,"line":1860},[68,91604,90246],{"class":82},[68,91606,51638],{"class":335},[68,91608,652],{"class":82},[68,91610,51693],{"class":331},[68,91612,1498],{"class":335},[68,91614,91615],{"class":70,"line":1881},[68,91616,2393],{"class":335},[68,91618,91619,91621,91623],{"class":70,"line":1886},[68,91620,52618],{"class":335},[68,91622,250],{"class":51501},[68,91624,51508],{"class":335},[68,91626,91627,91629,91631],{"class":70,"line":1900},[68,91628,51986],{"class":335},[68,91630,51535],{"class":51501},[68,91632,51508],{"class":335},[68,91634,91635],{"class":70,"line":1905},[68,91636,2606],{"emptyLinePlaceholder":260},[68,91638,91639,91641,91643],{"class":70,"line":1934},[68,91640,1243],{"class":335},[68,91642,52001],{"class":51501},[68,91644,51508],{"class":335},[68,91646,91647,91649,91651,91653,91655,91657,91659,91661],{"class":70,"line":1939},[68,91648,52345],{"class":335},[68,91650,51812],{"class":51501},[68,91652,53687],{"class":74},[68,91654,381],{"class":335},[68,91656,53692],{"class":78},[68,91658,55515],{"class":335},[68,91660,51812],{"class":51501},[68,91662,51508],{"class":335},[68,91664,91665,91667,91669,91671,91673,91675,91677,91679],{"class":70,"line":1956},[68,91666,52345],{"class":335},[68,91668,52014],{"class":51501},[68,91670,55440],{"class":74},[68,91672,381],{"class":335},[68,91674,88475],{"class":78},[68,91676,55515],{"class":335},[68,91678,52014],{"class":51501},[68,91680,51508],{"class":335},[68,91682,91683,91685,91687],{"class":70,"line":1961},[68,91684,52345],{"class":335},[68,91686,52014],{"class":51501},[68,91688,51508],{"class":335},[68,91690,91691,91693,91695,91697,91699,91701,91703,91705],{"class":70,"line":1966},[68,91692,11426],{"class":331},[68,91694,87134],{"class":82},[68,91696,13769],{"class":331},[68,91698,54597],{"class":335},[68,91700,54600],{"class":74},[68,91702,336],{"class":335},[68,91704,90347],{"class":78},[68,91706,342],{"class":335},[68,91708,91709,91711,91713,91715],{"class":70,"line":1971},[68,91710,52420],{"class":331},[68,91712,9643],{"class":335},[68,91714,381],{"class":331},[68,91716,47534],{"class":82},[68,91718,91719,91721,91723],{"class":70,"line":1985},[68,91720,70285],{"class":331},[68,91722,90366],{"class":74},[68,91724,11058],{"class":335},[68,91726,91727,91729,91731,91733],{"class":70,"line":1990},[68,91728,90373],{"class":335},[68,91730,381],{"class":331},[68,91732,3238],{"class":335},[68,91734,2908],{"class":331},[68,91736,91737],{"class":70,"line":2783},[68,91738,90384],{"class":393},[68,91740,91741],{"class":70,"line":2797},[68,91742,2393],{"class":335},[68,91744,91745],{"class":70,"line":2805},[68,91746,90393],{"class":393},[68,91748,91749],{"class":70,"line":2810},[68,91750,91751],{"class":393},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[68,91753,91754],{"class":70,"line":2816},[68,91755,91756],{"class":393},"    \u002F\u002F 1.声明一个定时器变量\n",[68,91758,91759],{"class":70,"line":2822},[68,91760,91761],{"class":393},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[68,91763,91764],{"class":70,"line":2827},[68,91765,91766],{"class":393},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[68,91768,91769],{"class":70,"line":8153},[68,91770,91771],{"class":393},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[68,91773,91774],{"class":70,"line":8177},[68,91775,91776],{"class":393},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[68,91778,91779,91781,91784,91786,91788,91790,91792],{"class":70,"line":8182},[68,91780,70285],{"class":331},[68,91782,91783],{"class":74}," throttle",[68,91785,336],{"class":335},[68,91787,90838],{"class":5421},[68,91789,12640],{"class":335},[68,91791,1053],{"class":5421},[68,91793,12647],{"class":335},[68,91795,91796,91798],{"class":70,"line":8188},[68,91797,79973],{"class":331},[68,91799,90851],{"class":335},[68,91801,91802,91804,91806],{"class":70,"line":8215},[68,91803,74183],{"class":331},[68,91805,59119],{"class":331},[68,91807,54653],{"class":335},[68,91809,91810,91812,91814,91816],{"class":70,"line":8220},[68,91811,2703],{"class":331},[68,91813,1865],{"class":335},[68,91815,560],{"class":331},[68,91817,91818],{"class":335},"timer) {\n",[68,91820,91821,91824,91826,91828,91830,91832],{"class":70,"line":8226},[68,91822,91823],{"class":335},"          timer ",[68,91825,381],{"class":331},[68,91827,90892],{"class":74},[68,91829,336],{"class":335},[68,91831,54650],{"class":331},[68,91833,54653],{"class":335},[68,91835,91836,91839],{"class":70,"line":8238},[68,91837,91838],{"class":74},"            fn",[68,91840,2182],{"class":335},[68,91842,91843],{"class":70,"line":8250},[68,91844,91845],{"class":393},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[68,91847,91848],{"class":70,"line":8262},[68,91849,91850],{"class":393},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[68,91852,91853,91856,91858],{"class":70,"line":9921},[68,91854,91855],{"class":335},"            timer ",[68,91857,381],{"class":331},[68,91859,91860],{"class":82}," null\n",[68,91862,91863],{"class":70,"line":9946},[68,91864,91865],{"class":393},"            \u002F\u002F 不能用clearTimeout(timer)\n",[68,91867,91868],{"class":70,"line":9969},[68,91869,91870],{"class":393},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[68,91872,91873],{"class":70,"line":9993},[68,91874,91875],{"class":335},"          }, t)\n",[68,91877,91878],{"class":70,"line":9998},[68,91879,2735],{"class":335},[68,91881,91882],{"class":70,"line":10003},[68,91883,52599],{"class":335},[68,91885,91886],{"class":70,"line":10008},[68,91887,2393],{"class":335},[68,91889,91890,91892,91894,91896,91898,91900,91902,91904,91906],{"class":70,"line":10017},[68,91891,90408],{"class":335},[68,91893,58014],{"class":74},[68,91895,336],{"class":335},[68,91897,90415],{"class":78},[68,91899,12640],{"class":335},[68,91901,91374],{"class":74},[68,91903,90424],{"class":335},[68,91905,65275],{"class":82},[68,91907,30698],{"class":335},[68,91909,91910,91912,91914],{"class":70,"line":10022},[68,91911,52618],{"class":335},[68,91913,52014],{"class":51501},[68,91915,51508],{"class":335},[68,91917,91918,91920,91922],{"class":70,"line":10028},[68,91919,51986],{"class":335},[68,91921,52001],{"class":51501},[68,91923,51508],{"class":335},[68,91925,91926],{"class":70,"line":10049},[68,91927,2606],{"emptyLinePlaceholder":260},[68,91929,91930,91932,91934],{"class":70,"line":10055},[68,91931,51986],{"class":335},[68,91933,50836],{"class":51501},[68,91935,51508],{"class":335},[301,91937,91939],{"id":91938},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[58,91941,91943],{"className":53268,"code":91942,"language":53270,"meta":63,"style":63},"\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",[65,91944,91945,91953,91961,91966,91971,91976,91981,91985,91993],{"__ignoreMap":63},[68,91946,91947,91949,91951],{"class":70,"line":71},[68,91948,1243],{"class":335},[68,91950,52001],{"class":51501},[68,91952,51508],{"class":335},[68,91954,91955,91957,91959],{"class":70,"line":92},[68,91956,52345],{"class":335},[68,91958,52014],{"class":51501},[68,91960,51508],{"class":335},[68,91962,91963],{"class":70,"line":1387},[68,91964,91965],{"class":335},"    let timer = null\n",[68,91967,91968],{"class":70,"line":1402},[68,91969,91970],{"class":335},"    timer = setTimeout(() => {\n",[68,91972,91973],{"class":70,"line":1408},[68,91974,91975],{"class":335},"      clearTimeout(timer)\n",[68,91977,91978],{"class":70,"line":1422},[68,91979,91980],{"class":335},"      console.log(timer)\n",[68,91982,91983],{"class":70,"line":1428},[68,91984,60426],{"class":335},[68,91986,91987,91989,91991],{"class":70,"line":1519},[68,91988,52618],{"class":335},[68,91990,52014],{"class":51501},[68,91992,51508],{"class":335},[68,91994,91995,91997,91999],{"class":70,"line":1525},[68,91996,51986],{"class":335},[68,91998,52001],{"class":51501},[68,92000,51508],{"class":335},[19,92002,92003],{},"输出为1",[19,92005,92006],{},"在开启的定时器里边写清除定时器",[19,92008,92009],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[301,92011,92013],{"id":92012},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92015,92016],{},"页面打开，可以记录上一次的视频播放位置",[19,92018,92019],{},[48,92020],{"alt":63,"src":92021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92023,92024],{},[48,92025],{"alt":63,"src":92026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[58,92028,92030],{"className":50834,"code":92029,"language":50836,"meta":63,"style":63},"\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",[65,92031,92032,92042,92056,92060,92068,92082,92102,92122,92144,92157,92165,92171,92181,92191,92201,92205,92209,92216,92229,92241,92245,92249,92259,92271,92285,92289,92293,92300,92310,92323,92335,92345,92355,92371,92383,92387,92391,92399,92409,92421,92431,92441,92451,92455,92459,92469,92480,92484,92492,92500,92504,92512,92527,92542,92557,92578,92586,92594,92609,92631,92639,92654,92680,92706,92732,92740,92748,92767,92775,92780,92799,92804,92822,92827,92832,92840,92845,92859,92867,92872,92889,92893,92898,92920,92924,92932,92940,92944],{"__ignoreMap":63},[68,92033,92034,92036,92038,92040],{"class":70,"line":71},[68,92035,51498],{"class":335},[68,92037,51502],{"class":51501},[68,92039,51505],{"class":74},[68,92041,51508],{"class":335},[68,92043,92044,92046,92048,92050,92052,92054],{"class":70,"line":92},[68,92045,1243],{"class":335},[68,92047,50836],{"class":51501},[68,92049,51517],{"class":74},[68,92051,381],{"class":335},[68,92053,51522],{"class":78},[68,92055,51508],{"class":335},[68,92057,92058],{"class":70,"line":1387},[68,92059,2606],{"emptyLinePlaceholder":260},[68,92061,92062,92064,92066],{"class":70,"line":1402},[68,92063,1243],{"class":335},[68,92065,51535],{"class":51501},[68,92067,51508],{"class":335},[68,92069,92070,92072,92074,92076,92078,92080],{"class":70,"line":1408},[68,92071,52345],{"class":335},[68,92073,51545],{"class":51501},[68,92075,51548],{"class":74},[68,92077,381],{"class":335},[68,92079,51553],{"class":78},[68,92081,59328],{"class":335},[68,92083,92084,92086,92088,92090,92092,92094,92096,92098,92100],{"class":70,"line":1422},[68,92085,52345],{"class":335},[68,92087,51545],{"class":51501},[68,92089,51564],{"class":74},[68,92091,381],{"class":335},[68,92093,51569],{"class":78},[68,92095,51572],{"class":74},[68,92097,381],{"class":335},[68,92099,51577],{"class":78},[68,92101,59328],{"class":335},[68,92103,92104,92106,92108,92110,92112,92114,92116,92118,92120],{"class":70,"line":1428},[68,92105,52345],{"class":335},[68,92107,51545],{"class":51501},[68,92109,15125],{"class":74},[68,92111,381],{"class":335},[68,92113,51592],{"class":78},[68,92115,51572],{"class":74},[68,92117,381],{"class":335},[68,92119,51599],{"class":78},[68,92121,59328],{"class":335},[68,92123,92124,92126,92128,92130,92132,92135,92137,92139,92142],{"class":70,"line":1519},[68,92125,52345],{"class":335},[68,92127,51545],{"class":51501},[68,92129,15125],{"class":74},[68,92131,381],{"class":335},[68,92133,92134],{"class":78},"\"referrer\"",[68,92136,51572],{"class":74},[68,92138,381],{"class":335},[68,92140,92141],{"class":78},"\"never\"",[68,92143,59328],{"class":335},[68,92145,92146,92148,92150,92153,92155],{"class":70,"line":1525},[68,92147,52345],{"class":335},[68,92149,51608],{"class":51501},[68,92151,92152],{"class":335},">综合案例\u003C\u002F",[68,92154,51608],{"class":51501},[68,92156,51508],{"class":335},[68,92158,92159,92161,92163],{"class":70,"line":1537},[68,92160,52345],{"class":335},[68,92162,250],{"class":51501},[68,92164,51508],{"class":335},[68,92166,92167,92169],{"class":70,"line":1819},[68,92168,6608],{"class":51501},[68,92170,15777],{"class":335},[68,92172,92173,92175,92177,92179],{"class":70,"line":1824},[68,92174,54896],{"class":82},[68,92176,51638],{"class":335},[68,92178,525],{"class":82},[68,92180,1498],{"class":335},[68,92182,92183,92185,92187,92189],{"class":70,"line":1830},[68,92184,54907],{"class":82},[68,92186,51638],{"class":335},[68,92188,525],{"class":82},[68,92190,1498],{"class":335},[68,92192,92193,92195,92197,92199],{"class":70,"line":1835},[68,92194,72797],{"class":82},[68,92196,51638],{"class":335},[68,92198,60706],{"class":82},[68,92200,1498],{"class":335},[68,92202,92203],{"class":70,"line":1849},[68,92204,2393],{"class":335},[68,92206,92207],{"class":70,"line":1854},[68,92208,2606],{"emptyLinePlaceholder":260},[68,92210,92211,92214],{"class":70,"line":1860},[68,92212,92213],{"class":74},"    .container",[68,92215,15777],{"class":335},[68,92217,92218,92220,92222,92225,92227],{"class":70,"line":1881},[68,92219,54972],{"class":82},[68,92221,51638],{"class":335},[68,92223,92224],{"class":82},"1200",[68,92226,51693],{"class":331},[68,92228,1498],{"class":335},[68,92230,92231,92233,92235,92237,92239],{"class":70,"line":1886},[68,92232,54907],{"class":82},[68,92234,51638],{"class":335},[68,92236,525],{"class":82},[68,92238,51757],{"class":82},[68,92240,1498],{"class":335},[68,92242,92243],{"class":70,"line":1900},[68,92244,2393],{"class":335},[68,92246,92247],{"class":70,"line":1905},[68,92248,2606],{"emptyLinePlaceholder":260},[68,92250,92251,92254,92257],{"class":70,"line":1934},[68,92252,92253],{"class":74},"    .video",[68,92255,92256],{"class":51501}," video",[68,92258,15777],{"class":335},[68,92260,92261,92263,92265,92267,92269],{"class":70,"line":1939},[68,92262,54972],{"class":82},[68,92264,51638],{"class":335},[68,92266,644],{"class":82},[68,92268,661],{"class":331},[68,92270,1498],{"class":335},[68,92272,92273,92275,92277,92279,92281,92283],{"class":70,"line":1956},[68,92274,54896],{"class":82},[68,92276,51638],{"class":335},[68,92278,1033],{"class":82},[68,92280,51693],{"class":331},[68,92282,4299],{"class":82},[68,92284,1498],{"class":335},[68,92286,92287],{"class":70,"line":1961},[68,92288,2393],{"class":335},[68,92290,92291],{"class":70,"line":1966},[68,92292,2606],{"emptyLinePlaceholder":260},[68,92294,92295,92298],{"class":70,"line":1971},[68,92296,92297],{"class":74},"    .elevator",[68,92299,15777],{"class":335},[68,92301,92302,92304,92306,92308],{"class":70,"line":1985},[68,92303,54960],{"class":82},[68,92305,51638],{"class":335},[68,92307,86434],{"class":82},[68,92309,1498],{"class":335},[68,92311,92312,92314,92316,92319,92321],{"class":70,"line":1990},[68,92313,55148],{"class":82},[68,92315,51638],{"class":335},[68,92317,92318],{"class":82},"280",[68,92320,51693],{"class":331},[68,92322,1498],{"class":335},[68,92324,92325,92327,92329,92331,92333],{"class":70,"line":2783},[68,92326,86628],{"class":82},[68,92328,51638],{"class":335},[68,92330,1033],{"class":82},[68,92332,51693],{"class":331},[68,92334,1498],{"class":335},[68,92336,92337,92339,92341,92343],{"class":70,"line":2797},[68,92338,86441],{"class":82},[68,92340,51638],{"class":335},[68,92342,86446],{"class":82},[68,92344,1498],{"class":335},[68,92346,92347,92349,92351,92353],{"class":70,"line":2805},[68,92348,61922],{"class":82},[68,92350,51638],{"class":335},[68,92352,61043],{"class":82},[68,92354,1498],{"class":335},[68,92356,92357,92359,92361,92363,92365,92367,92369],{"class":70,"line":2810},[68,92358,62178],{"class":82},[68,92360,51638],{"class":335},[68,92362,551],{"class":82},[68,92364,51693],{"class":331},[68,92366,51722],{"class":82},[68,92368,62445],{"class":82},[68,92370,1498],{"class":335},[68,92372,92373,92375,92377,92379,92381],{"class":70,"line":2816},[68,92374,54972],{"class":82},[68,92376,51638],{"class":335},[68,92378,1240],{"class":82},[68,92380,51693],{"class":331},[68,92382,1498],{"class":335},[68,92384,92385],{"class":70,"line":2822},[68,92386,2393],{"class":335},[68,92388,92389],{"class":70,"line":2827},[68,92390,2606],{"emptyLinePlaceholder":260},[68,92392,92393,92395,92397],{"class":70,"line":8153},[68,92394,92297],{"class":74},[68,92396,1606],{"class":51501},[68,92398,15777],{"class":335},[68,92400,92401,92403,92405,92407],{"class":70,"line":8177},[68,92402,55210],{"class":82},[68,92404,51638],{"class":335},[68,92406,61070],{"class":82},[68,92408,1498],{"class":335},[68,92410,92411,92413,92415,92417,92419],{"class":70,"line":8182},[68,92412,54896],{"class":82},[68,92414,51638],{"class":335},[68,92416,779],{"class":82},[68,92418,51693],{"class":331},[68,92420,1498],{"class":335},[68,92422,92423,92425,92427,92429],{"class":70,"line":8188},[68,92424,64171],{"class":82},[68,92426,51638],{"class":335},[68,92428,54938],{"class":82},[68,92430,1498],{"class":335},[68,92432,92433,92435,92437,92439],{"class":70,"line":8215},[68,92434,57487],{"class":82},[68,92436,51638],{"class":335},[68,92438,51793],{"class":82},[68,92440,1498],{"class":335},[68,92442,92443,92445,92447,92449],{"class":70,"line":8220},[68,92444,57617],{"class":82},[68,92446,51638],{"class":335},[68,92448,62271],{"class":82},[68,92450,1498],{"class":335},[68,92452,92453],{"class":70,"line":8226},[68,92454,2393],{"class":335},[68,92456,92457],{"class":70,"line":8238},[68,92458,2606],{"emptyLinePlaceholder":260},[68,92460,92461,92463,92465,92467],{"class":70,"line":8250},[68,92462,92297],{"class":74},[68,92464,1606],{"class":51501},[68,92466,64225],{"class":74},[68,92468,15777],{"class":335},[68,92470,92471,92473,92475,92478],{"class":70,"line":8262},[68,92472,57617],{"class":82},[68,92474,51638],{"class":335},[68,92476,92477],{"class":82},"#1286ff",[68,92479,1498],{"class":335},[68,92481,92482],{"class":70,"line":9921},[68,92483,2393],{"class":335},[68,92485,92486,92488,92490],{"class":70,"line":9946},[68,92487,52618],{"class":335},[68,92489,250],{"class":51501},[68,92491,51508],{"class":335},[68,92493,92494,92496,92498],{"class":70,"line":9969},[68,92495,51986],{"class":335},[68,92497,51535],{"class":51501},[68,92499,51508],{"class":335},[68,92501,92502],{"class":70,"line":9993},[68,92503,2606],{"emptyLinePlaceholder":260},[68,92505,92506,92508,92510],{"class":70,"line":9998},[68,92507,1243],{"class":335},[68,92509,52001],{"class":51501},[68,92511,51508],{"class":335},[68,92513,92514,92516,92518,92520,92522,92525],{"class":70,"line":10003},[68,92515,52345],{"class":335},[68,92517,51812],{"class":51501},[68,92519,53687],{"class":74},[68,92521,381],{"class":335},[68,92523,92524],{"class":78},"\"container\"",[68,92526,51508],{"class":335},[68,92528,92529,92531,92533,92535,92537,92540],{"class":70,"line":10008},[68,92530,51542],{"class":335},[68,92532,51812],{"class":51501},[68,92534,53687],{"class":74},[68,92536,381],{"class":335},[68,92538,92539],{"class":78},"\"header\"",[68,92541,51508],{"class":335},[68,92543,92544,92546,92548,92550,92552,92555],{"class":70,"line":10017},[68,92545,55435],{"class":335},[68,92547,30],{"class":51501},[68,92549,61258],{"class":74},[68,92551,381],{"class":335},[68,92553,92554],{"class":78},"\"http:\u002F\u002Fpip.itcast.cn\"",[68,92556,51508],{"class":335},[68,92558,92559,92561,92563,92565,92567,92570,92572,92574,92576],{"class":70,"line":10022},[68,92560,55503],{"class":335},[68,92562,48],{"class":51501},[68,92564,55440],{"class":74},[68,92566,381],{"class":335},[68,92568,92569],{"class":78},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[68,92571,55448],{"class":74},[68,92573,381],{"class":335},[68,92575,7857],{"class":78},[68,92577,59328],{"class":335},[68,92579,92580,92582,92584],{"class":70,"line":10028},[68,92581,55608],{"class":335},[68,92583,30],{"class":51501},[68,92585,51508],{"class":335},[68,92587,92588,92590,92592],{"class":70,"line":10049},[68,92589,51977],{"class":335},[68,92591,51812],{"class":51501},[68,92593,51508],{"class":335},[68,92595,92596,92598,92600,92602,92604,92607],{"class":70,"line":10055},[68,92597,51542],{"class":335},[68,92599,51812],{"class":51501},[68,92601,53687],{"class":74},[68,92603,381],{"class":335},[68,92605,92606],{"class":78},"\"video\"",[68,92608,51508],{"class":335},[68,92610,92611,92613,92615,92617,92619,92622,92625,92627,92629],{"class":70,"line":10069},[68,92612,55435],{"class":335},[68,92614,28387],{"class":51501},[68,92616,55440],{"class":74},[68,92618,381],{"class":335},[68,92620,92621],{"class":78},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[68,92623,92624],{"class":74}," controls",[68,92626,55515],{"class":335},[68,92628,28387],{"class":51501},[68,92630,51508],{"class":335},[68,92632,92633,92635,92637],{"class":70,"line":10075},[68,92634,51977],{"class":335},[68,92636,51812],{"class":51501},[68,92638,51508],{"class":335},[68,92640,92641,92643,92645,92647,92649,92652],{"class":70,"line":10102},[68,92642,51542],{"class":335},[68,92644,51812],{"class":51501},[68,92646,53687],{"class":74},[68,92648,381],{"class":335},[68,92650,92651],{"class":78},"\"elevator\"",[68,92653,51508],{"class":335},[68,92655,92656,92658,92660,92662,92664,92666,92669,92671,92673,92676,92678],{"class":70,"line":10111},[68,92657,55435],{"class":335},[68,92659,30],{"class":51501},[68,92661,61258],{"class":74},[68,92663,381],{"class":335},[68,92665,64437],{"class":78},[68,92667,92668],{"class":74}," data-ref",[68,92670,381],{"class":335},[68,92672,92606],{"class":78},[68,92674,92675],{"class":335},">视频介绍\u003C\u002F",[68,92677,30],{"class":51501},[68,92679,51508],{"class":335},[68,92681,92682,92684,92686,92688,92690,92692,92694,92696,92699,92702,92704],{"class":70,"line":10117},[68,92683,55435],{"class":335},[68,92685,30],{"class":51501},[68,92687,61258],{"class":74},[68,92689,381],{"class":335},[68,92691,64437],{"class":78},[68,92693,92668],{"class":74},[68,92695,381],{"class":335},[68,92697,92698],{"class":78},"\"intro\"",[68,92700,92701],{"class":335},">课程简介\u003C\u002F",[68,92703,30],{"class":51501},[68,92705,51508],{"class":335},[68,92707,92708,92710,92712,92714,92716,92718,92720,92722,92725,92728,92730],{"class":70,"line":10125},[68,92709,55435],{"class":335},[68,92711,30],{"class":51501},[68,92713,61258],{"class":74},[68,92715,381],{"class":335},[68,92717,64437],{"class":78},[68,92719,92668],{"class":74},[68,92721,381],{"class":335},[68,92723,92724],{"class":78},"\"outline\"",[68,92726,92727],{"class":335},">评论列表\u003C\u002F",[68,92729,30],{"class":51501},[68,92731,51508],{"class":335},[68,92733,92734,92736,92738],{"class":70,"line":10130},[68,92735,51977],{"class":335},[68,92737,51812],{"class":51501},[68,92739,51508],{"class":335},[68,92741,92742,92744,92746],{"class":70,"line":16809},[68,92743,52618],{"class":335},[68,92745,51812],{"class":51501},[68,92747,51508],{"class":335},[68,92749,92750,92752,92754,92756,92758,92761,92763,92765],{"class":70,"line":16815},[68,92751,52345],{"class":335},[68,92753,52014],{"class":51501},[68,92755,55440],{"class":74},[68,92757,381],{"class":335},[68,92759,92760],{"class":78},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[68,92762,55515],{"class":335},[68,92764,52014],{"class":51501},[68,92766,51508],{"class":335},[68,92768,92769,92771,92773],{"class":70,"line":16838},[68,92770,52345],{"class":335},[68,92772,52014],{"class":51501},[68,92774,51508],{"class":335},[68,92776,92777],{"class":70,"line":16844},[68,92778,92779],{"class":393},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[68,92781,92782,92784,92786,92788,92790,92792,92794,92797],{"class":70,"line":16867},[68,92783,11426],{"class":331},[68,92785,92256],{"class":82},[68,92787,13769],{"class":331},[68,92789,54597],{"class":335},[68,92791,54600],{"class":74},[68,92793,336],{"class":335},[68,92795,92796],{"class":78},"'video'",[68,92798,342],{"class":335},[68,92800,92801],{"class":70,"line":16881},[68,92802,92803],{"class":393},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[68,92805,92806,92809,92811,92813,92815,92818,92820],{"class":70,"line":16901},[68,92807,92808],{"class":335},"    video.ontimeupdate ",[68,92810,381],{"class":331},[68,92812,88556],{"class":335},[68,92814,91374],{"class":74},[68,92816,92817],{"class":335},"(() ",[68,92819,84923],{"class":331},[68,92821,15777],{"class":335},[68,92823,92824],{"class":70,"line":16907},[68,92825,92826],{"class":393},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[68,92828,92829],{"class":70,"line":16918},[68,92830,92831],{"class":393},"      \u002F\u002F 控制台输出当前的时间\n",[68,92833,92834,92837],{"class":70,"line":16941},[68,92835,92836],{"class":393},"      \u002F\u002F console.log(video.currentTime)",[68,92838,92839],{"class":393},"  \u002F\u002F获得当前的视频时间\n",[68,92841,92842],{"class":70,"line":16963},[68,92843,92844],{"class":393},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[68,92846,92847,92849,92851,92853,92856],{"class":70,"line":16968},[68,92848,74884],{"class":335},[68,92850,71855],{"class":74},[68,92852,336],{"class":335},[68,92854,92855],{"class":78},"'currentTime'",[68,92857,92858],{"class":335},", video.currentTime)\n",[68,92860,92861,92863,92865],{"class":70,"line":16974},[68,92862,54736],{"class":335},[68,92864,6615],{"class":82},[68,92866,342],{"class":335},[68,92868,92869],{"class":70,"line":16988},[68,92870,92871],{"class":393},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[68,92873,92874,92877,92880,92882,92885,92887],{"class":70,"line":17001},[68,92875,92876],{"class":335},"    video.",[68,92878,92879],{"class":74},"onloadeddata",[68,92881,13769],{"class":331},[68,92883,92884],{"class":335}," () ",[68,92886,84923],{"class":331},[68,92888,15777],{"class":335},[68,92890,92891],{"class":70,"line":17006},[68,92892,60213],{"class":393},[68,92894,92895],{"class":70,"line":17020},[68,92896,92897],{"class":393},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[68,92899,92900,92903,92905,92908,92910,92912,92914,92916,92918],{"class":70,"line":17025},[68,92901,92902],{"class":335},"      video.currentTime ",[68,92904,381],{"class":331},[68,92906,92907],{"class":335}," localStorage.",[68,92909,71886],{"class":74},[68,92911,336],{"class":335},[68,92913,92855],{"class":78},[68,92915,13919],{"class":335},[68,92917,71558],{"class":331},[68,92919,47534],{"class":82},[68,92921,92922],{"class":70,"line":17031},[68,92923,2393],{"class":335},[68,92925,92926,92928,92930],{"class":70,"line":17036},[68,92927,52618],{"class":335},[68,92929,52014],{"class":51501},[68,92931,51508],{"class":335},[68,92933,92934,92936,92938],{"class":70,"line":17050},[68,92935,51986],{"class":335},[68,92937,52001],{"class":51501},[68,92939,51508],{"class":335},[68,92941,92942],{"class":70,"line":17055},[68,92943,2606],{"emptyLinePlaceholder":260},[68,92945,92946,92948,92950],{"class":70,"line":17060},[68,92947,51986],{"class":335},[68,92949,50836],{"class":51501},[68,92951,51508],{"class":335},[250,92953,92954],{},"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":63,"searchDepth":92,"depth":92,"links":92956},[92957,92962,92966,92967,92968,92973,92978,92979,92980,92981,92988,92993,92994,93004,93008,93009,93013],{"id":76892,"depth":92,"text":76893,"children":92958},[92959,92960,92961],{"id":76896,"depth":1387,"text":76897},{"id":76921,"depth":1387,"text":76922},{"id":76933,"depth":1387,"text":76934},{"id":76945,"depth":92,"text":76946,"children":92963},[92964,92965],{"id":76949,"depth":1387,"text":76950},{"id":76964,"depth":1387,"text":76965},{"id":77016,"depth":92,"text":77017},{"id":77060,"depth":92,"text":77061},{"id":77077,"depth":92,"text":77078,"children":92969},[92970,92971,92972],{"id":77081,"depth":1387,"text":77082},{"id":77094,"depth":1387,"text":77095},{"id":77199,"depth":1387,"text":77200},{"id":77488,"depth":92,"text":77489,"children":92974},[92975,92976,92977],{"id":77492,"depth":1387,"text":77493},{"id":77935,"depth":1387,"text":77936},{"id":78346,"depth":1387,"text":78347},{"id":78409,"depth":92,"text":78410},{"id":78488,"depth":92,"text":78489},{"id":78581,"depth":92,"text":78582},{"id":80426,"depth":92,"text":80427,"children":92982},[92983,92984,92985,92986,92987],{"id":80430,"depth":1387,"text":80431},{"id":80442,"depth":1387,"text":80443},{"id":80661,"depth":1387,"text":80662},{"id":80679,"depth":1387,"text":80680},{"id":80739,"depth":1387,"text":80740},{"id":85007,"depth":92,"text":85008,"children":92989},[92990,92991,92992],{"id":85011,"depth":1387,"text":85012},{"id":85029,"depth":1387,"text":85030},{"id":85055,"depth":1387,"text":85056},{"id":85064,"depth":92,"text":85065},{"id":85086,"depth":92,"text":85087,"children":92995},[92996,92997,92998,92999,93000,93001,93002,93003],{"id":85090,"depth":1387,"text":85091},{"id":85351,"depth":1387,"text":85352},{"id":85537,"depth":1387,"text":85538},{"id":85904,"depth":1387,"text":85905},{"id":86020,"depth":1387,"text":86021},{"id":86056,"depth":1387,"text":86057},{"id":86103,"depth":1387,"text":86104},{"id":86137,"depth":1387,"text":86138},{"id":87500,"depth":92,"text":87501,"children":93005},[93006,93007],{"id":87504,"depth":1387,"text":87505},{"id":87541,"depth":1387,"text":87542},{"id":88896,"depth":92,"text":88897},{"id":89267,"depth":92,"text":89268,"children":93010},[93011,93012],{"id":89271,"depth":1387,"text":89272},{"id":89305,"depth":1387,"text":89306},{"id":90034,"depth":92,"text":90035,"children":93014},[93015,93016,93017,93018],{"id":90038,"depth":1387,"text":90039},{"id":90996,"depth":1387,"text":90997},{"id":91938,"depth":1387,"text":91939},{"id":92012,"depth":1387,"text":92013},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76881,"description":257},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93025,"title":93026,"body":93027,"description":93038,"extension":258,"meta":93039,"navigation":260,"path":93041,"seo":93042,"stem":93043,"__hash__":93044},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93028,"toc":93036},[93029],[19,93030,93031,93032],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[30,93033,93034],{"href":93034,"rel":93035},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[34],{"title":63,"searchDepth":92,"depth":92,"links":93037},[],"三件套第三套学习",{"category":93040},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93026,"description":93038},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93046,"title":93047,"body":93048,"description":257,"extension":258,"meta":93153,"navigation":260,"path":93154,"seo":93155,"stem":93156,"__hash__":93157},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93049,"toc":93148},[93050,93057,93060,93063,93066,93070,93079,93082,93085,93089,93098,93101,93105,93108,93128,93131,93145],[19,93051,93052],{},[30,93053,93056],{"href":93054,"rel":93055},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[34],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93058,93047],{"id":93059},"_1安装",[19,93061,93062],{},"numpy是科学计算基础库,底层是C语言",[19,93064,93065],{},"三种方式：",[14,93067,93069],{"id":93068},"_11-通过pip安装","1.1 通过pip安装",[58,93071,93073],{"className":30579,"code":93072,"language":30581,"meta":63,"style":63},"pip install numpy\n",[65,93074,93075],{"__ignoreMap":63},[68,93076,93077],{"class":70,"line":71},[68,93078,93072],{"class":335},[19,93080,93081],{},"首选方式，自动处理依赖项",[19,93083,93084],{},"在提示系统命令符中使用cmd",[14,93086,93088],{"id":93087},"_12-通过anaconda安装","1.2 通过Anaconda安装",[58,93090,93092],{"className":30579,"code":93091,"language":30581,"meta":63,"style":63},"conda install numpy\n",[65,93093,93094],{"__ignoreMap":63},[68,93095,93096],{"class":70,"line":71},[68,93097,93091],{"class":335},[19,93099,93100],{},"自动解决环境依赖",[14,93102,93104],{"id":93103},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93106,93107],{},"对于Debian\u002FUbuntu",[58,93109,93111],{"className":30579,"code":93110,"language":30581,"meta":63,"style":63},"sudo apt-get install python3-numpy\n",[65,93112,93113],{"__ignoreMap":63},[68,93114,93115,93118,93120,93123,93125],{"class":70,"line":71},[68,93116,93117],{"class":335},"sudo apt",[68,93119,865],{"class":331},[68,93121,93122],{"class":335},"get install python3",[68,93124,865],{"class":331},[68,93126,93127],{"class":335},"numpy\n",[19,93129,93130],{},"对于Fedora:",[58,93132,93134],{"className":30579,"code":93133,"language":30581,"meta":63,"style":63},"sudo dnf install python3-numpy\n",[65,93135,93136],{"__ignoreMap":63},[68,93137,93138,93141,93143],{"class":70,"line":71},[68,93139,93140],{"class":335},"sudo dnf install python3",[68,93142,865],{"class":331},[68,93144,93127],{"class":335},[250,93146,93147],{},"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":63,"searchDepth":92,"depth":92,"links":93149},[93150,93151,93152],{"id":93068,"depth":92,"text":93069},{"id":93087,"depth":92,"text":93088},{"id":93103,"depth":92,"text":93104},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93047,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93159,"title":93160,"body":93161,"description":257,"extension":258,"meta":93274,"navigation":260,"path":93275,"seo":93276,"stem":93277,"__hash__":93278},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93162,"toc":93272},[93163,93166,93169,93172,93175,93178,93181,93184,93187,93190,93266,93269],[10,93164,93160],{"id":93165},"_10算数函数",[19,93167,93168],{},"加减乘除运算跟python基础语法没区别",[19,93170,93171],{},"除了python那种方法外还可以使用函数",[19,93173,93174],{},"加：np.add(a,b)",[19,93176,93177],{},"减：np.subtract(a,b)",[19,93179,93180],{},"乘：np.multiply(a,b)",[19,93182,93183],{},"除：np.divide(a,b) == a\u002Fb",[19,93185,93186],{},"取余：np.mod(a,b) == a%b",[19,93188,93189],{},"必须会的用法：",[58,93191,93193],{"className":30579,"code":93192,"language":30581,"meta":63,"style":63},"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",[65,93194,93195,93217,93238,93248,93261],{"__ignoreMap":63},[68,93196,93197,93199,93201,93204,93206,93209,93211,93213,93215],{"class":70,"line":71},[68,93198,30],{"class":335},[68,93200,381],{"class":331},[68,93202,93203],{"class":335},"np.arange(",[68,93205,753],{"class":82},[68,93207,93208],{"class":335},").reshape(",[68,93210,406],{"class":82},[68,93212,711],{"class":335},[68,93214,406],{"class":82},[68,93216,342],{"class":335},[68,93218,93219,93221,93223,93226,93228,93230,93232,93234,93236],{"class":70,"line":92},[68,93220,596],{"class":335},[68,93222,381],{"class":331},[68,93224,93225],{"class":335},"np.array([",[68,93227,779],{"class":82},[68,93229,711],{"class":335},[68,93231,779],{"class":82},[68,93233,711],{"class":335},[68,93235,779],{"class":82},[68,93237,4863],{"class":335},[68,93239,93240,93243,93245],{"class":70,"line":1387},[68,93241,93242],{"class":335},"result",[68,93244,381],{"class":331},[68,93246,93247],{"class":335},"np.empty_like(a)\n",[68,93249,93250,93253,93256,93258],{"class":70,"line":1402},[68,93251,93252],{"class":335},"np.add(a,b,",[68,93254,93255],{"class":5421},"out",[68,93257,381],{"class":331},[68,93259,93260],{"class":335},"result)\n",[68,93262,93263],{"class":70,"line":1408},[68,93264,93265],{"class":335},"result\n",[19,93267,93268],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[250,93270,93271],{},"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":63,"searchDepth":92,"depth":92,"links":93273},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93160,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93280,"title":93281,"body":93282,"description":257,"extension":258,"meta":94044,"navigation":260,"path":94045,"seo":94046,"stem":94047,"__hash__":94048},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93283,"toc":94031},[93284,93287,93290,93293,93297,93336,93340,93384,93444,93448,93451,93490,93493,93538,93542,93578,93582,93651,93655,93719,93723,93726,93729,93732,93735,93771,93775,93815,93819,93891,93894,93898,93961,93965,94028],[10,93285,93281],{"id":93286},"_11统计函数",[19,93288,93289],{},"sum max min mean",[19,93291,93292],{},"这些有axis参数，可以指定方向",[14,93294,93296],{"id":93295},"_111-sum求和函数","11.1 sum()求和函数",[58,93298,93300],{"className":30579,"code":93299,"language":30581,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[65,93301,93302,93307,93328],{"__ignoreMap":63},[68,93303,93304],{"class":70,"line":71},[68,93305,93306],{"class":393},"#创建一维数组\n",[68,93308,93309,93311,93313,93316,93318,93320,93322,93324,93326],{"class":70,"line":92},[68,93310,30],{"class":335},[68,93312,381],{"class":331},[68,93314,93315],{"class":335},"np.random.randint(",[68,93317,551],{"class":82},[68,93319,711],{"class":335},[68,93321,644],{"class":82},[68,93323,711],{"class":335},[68,93325,1033],{"class":82},[68,93327,342],{"class":335},[68,93329,93330,93333],{"class":70,"line":1387},[68,93331,93332],{"class":335},"np.sum(a)",[68,93334,93335],{"class":393},"#求和\n",[14,93337,93339],{"id":93338},"_112-max求最大值函数","11.2 max()求最大值函数",[58,93341,93343],{"className":30579,"code":93342,"language":30581,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[65,93344,93345,93349,93369,93374,93379],{"__ignoreMap":63},[68,93346,93347],{"class":70,"line":71},[68,93348,93306],{"class":393},[68,93350,93351,93353,93355,93357,93359,93361,93363,93365,93367],{"class":70,"line":92},[68,93352,30],{"class":335},[68,93354,381],{"class":331},[68,93356,93315],{"class":335},[68,93358,551],{"class":82},[68,93360,711],{"class":335},[68,93362,644],{"class":82},[68,93364,711],{"class":335},[68,93366,1033],{"class":82},[68,93368,342],{"class":335},[68,93370,93371],{"class":70,"line":1387},[68,93372,93373],{"class":335},"np.max(a)\n",[68,93375,93376],{"class":70,"line":1402},[68,93377,93378],{"class":393},"#最大索引(求最大元素的索引)arg\n",[68,93380,93381],{"class":70,"line":1408},[68,93382,93383],{"class":335},"np.argmax(a)\n",[58,93385,93387],{"className":30579,"code":93386,"language":30581,"meta":63,"style":63},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[65,93388,93389,93410,93430,93434],{"__ignoreMap":63},[68,93390,93391,93393,93395,93398,93400,93402,93404,93406,93408],{"class":70,"line":71},[68,93392,11124],{"class":335},[68,93394,381],{"class":331},[68,93396,93397],{"class":335}," np.array([",[68,93399,551],{"class":82},[68,93401,12640],{"class":335},[68,93403,652],{"class":82},[68,93405,12640],{"class":335},[68,93407,406],{"class":82},[68,93409,4863],{"class":335},[68,93411,93412,93414,93416,93418,93420,93422,93424,93426,93428],{"class":70,"line":92},[68,93413,11150],{"class":335},[68,93415,381],{"class":331},[68,93417,93397],{"class":335},[68,93419,406],{"class":82},[68,93421,12640],{"class":335},[68,93423,412],{"class":82},[68,93425,12640],{"class":335},[68,93427,626],{"class":82},[68,93429,4863],{"class":335},[68,93431,93432],{"class":70,"line":1387},[68,93433,2606],{"emptyLinePlaceholder":260},[68,93435,93436,93438,93441],{"class":70,"line":1402},[68,93437,30616],{"class":82},[68,93439,93440],{"class":335},"(np.maximum(a, b))   ",[68,93442,93443],{"class":393},"# [3 5 4]，每个位置上取较大值\n",[14,93445,93447],{"id":93446},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93449,93450],{},"①一维数组：",[58,93452,93454],{"className":30579,"code":93453,"language":30581,"meta":63,"style":63},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[65,93455,93456,93460,93480,93485],{"__ignoreMap":63},[68,93457,93458],{"class":70,"line":71},[68,93459,93306],{"class":393},[68,93461,93462,93464,93466,93468,93470,93472,93474,93476,93478],{"class":70,"line":92},[68,93463,30],{"class":335},[68,93465,381],{"class":331},[68,93467,93315],{"class":335},[68,93469,551],{"class":82},[68,93471,711],{"class":335},[68,93473,644],{"class":82},[68,93475,711],{"class":335},[68,93477,1033],{"class":82},[68,93479,342],{"class":335},[68,93481,93482],{"class":70,"line":1387},[68,93483,93484],{"class":393},"#求平均值\n",[68,93486,93487],{"class":70,"line":1402},[68,93488,93489],{"class":335},"np.mean(a)\n",[19,93491,93492],{},"②二维数组",[58,93494,93496],{"className":30579,"code":93495,"language":30581,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[65,93497,93498,93503,93528,93533],{"__ignoreMap":63},[68,93499,93500],{"class":70,"line":71},[68,93501,93502],{"class":393},"#二维数组\n",[68,93504,93505,93508,93510,93512,93514,93516,93518,93520,93522,93524,93526],{"class":70,"line":92},[68,93506,93507],{"class":335},"aa",[68,93509,381],{"class":331},[68,93511,93203],{"class":335},[68,93513,551],{"class":82},[68,93515,711],{"class":335},[68,93517,856],{"class":82},[68,93519,93208],{"class":335},[68,93521,406],{"class":82},[68,93523,711],{"class":335},[68,93525,626],{"class":82},[68,93527,342],{"class":335},[68,93529,93530],{"class":70,"line":1387},[68,93531,93532],{"class":393},"#对数组中的所有数求平均\n",[68,93534,93535],{"class":70,"line":1402},[68,93536,93537],{"class":335},"np.mean(aa)\n",[14,93539,93541],{"id":93540},"_114-median求中位数函数","11.4 median()求中位数函数",[58,93543,93545],{"className":30579,"code":93544,"language":30581,"meta":63,"style":63},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[65,93546,93547,93552,93568,93573],{"__ignoreMap":63},[68,93548,93549],{"class":70,"line":71},[68,93550,93551],{"class":393},"#求中位数\n",[68,93553,93554,93556,93558,93560,93562,93564,93566],{"class":70,"line":92},[68,93555,596],{"class":335},[68,93557,381],{"class":331},[68,93559,93203],{"class":335},[68,93561,551],{"class":82},[68,93563,711],{"class":335},[68,93565,779],{"class":82},[68,93567,342],{"class":335},[68,93569,93570],{"class":70,"line":1387},[68,93571,93572],{"class":335},"np.median(b)\n",[68,93574,93575],{"class":70,"line":1402},[68,93576,93577],{"class":393},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93579,93581],{"id":93580},"_115-power求幂运算函数","11.5 power()求幂运算函数",[58,93583,93585],{"className":30579,"code":93584,"language":30581,"meta":63,"style":63},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[65,93586,93587,93603,93608,93613,93622,93627,93636],{"__ignoreMap":63},[68,93588,93589,93591,93593,93595,93597,93599,93601],{"class":70,"line":71},[68,93590,596],{"class":335},[68,93592,381],{"class":331},[68,93594,93203],{"class":335},[68,93596,551],{"class":82},[68,93598,711],{"class":335},[68,93600,779],{"class":82},[68,93602,342],{"class":335},[68,93604,93605],{"class":70,"line":92},[68,93606,93607],{"class":393},"#幂运算\n",[68,93609,93610],{"class":70,"line":1387},[68,93611,93612],{"class":393},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[68,93614,93615,93618,93620],{"class":70,"line":1402},[68,93616,93617],{"class":335},"np.power(b,",[68,93619,412],{"class":82},[68,93621,342],{"class":335},[68,93623,93624],{"class":70,"line":1408},[68,93625,93626],{"class":393},"#或者以下代码，将数据存储起来\n",[68,93628,93629,93631,93633],{"class":70,"line":1422},[68,93630,1178],{"class":335},[68,93632,381],{"class":331},[68,93634,93635],{"class":335},"np.empty_like(b)\n",[68,93637,93638,93640,93642,93644,93646,93648],{"class":70,"line":1428},[68,93639,93617],{"class":335},[68,93641,412],{"class":82},[68,93643,711],{"class":335},[68,93645,93255],{"class":5421},[68,93647,381],{"class":331},[68,93649,93650],{"class":335},"y)\n",[14,93652,93654],{"id":93653},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[58,93656,93658],{"className":30579,"code":93657,"language":30581,"meta":63,"style":63},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[65,93659,93660,93676,93681,93686,93690,93708],{"__ignoreMap":63},[68,93661,93662,93664,93666,93668,93670,93672,93674],{"class":70,"line":71},[68,93663,596],{"class":335},[68,93665,381],{"class":331},[68,93667,93203],{"class":335},[68,93669,551],{"class":82},[68,93671,711],{"class":335},[68,93673,779],{"class":82},[68,93675,342],{"class":335},[68,93677,93678],{"class":70,"line":92},[68,93679,93680],{"class":393},"#开方\n",[68,93682,93683],{"class":70,"line":1387},[68,93684,93685],{"class":335},"np.sqrt(b)\n",[68,93687,93688],{"class":70,"line":1402},[68,93689,93626],{"class":393},[68,93691,93692,93694,93696,93699,93702,93704,93706],{"class":70,"line":1408},[68,93693,1178],{"class":335},[68,93695,381],{"class":331},[68,93697,93698],{"class":335},"np.empty_like(b,",[68,93700,93701],{"class":5421},"dtype",[68,93703,381],{"class":331},[68,93705,375],{"class":82},[68,93707,342],{"class":335},[68,93709,93710,93713,93715,93717],{"class":70,"line":1422},[68,93711,93712],{"class":335},"np.sqrt(b,",[68,93714,93255],{"class":5421},[68,93716,381],{"class":331},[68,93718,93650],{"class":335},[14,93720,93722],{"id":93721},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93724,93725],{},"对数组中的元素累计求和，可指定轴",[19,93727,93728],{},"#累计求和的意思是：",[19,93730,93731],{},"a = np.array([1, 2, 3, 4])",[19,93733,93734],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[58,93736,93738],{"className":30579,"code":93737,"language":30581,"meta":63,"style":63},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[65,93739,93740,93756,93761,93766],{"__ignoreMap":63},[68,93741,93742,93744,93746,93748,93750,93752,93754],{"class":70,"line":71},[68,93743,596],{"class":335},[68,93745,381],{"class":331},[68,93747,93203],{"class":335},[68,93749,551],{"class":82},[68,93751,711],{"class":335},[68,93753,779],{"class":82},[68,93755,342],{"class":335},[68,93757,93758],{"class":70,"line":92},[68,93759,93760],{"class":335},"np.cumsum(b)\n",[68,93762,93763],{"class":70,"line":1387},[68,93764,93765],{"class":393},"#结果：\n",[68,93767,93768],{"class":70,"line":1402},[68,93769,93770],{"class":393},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93772,93774],{"id":93773},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[58,93776,93778],{"className":30579,"code":93777,"language":30581,"meta":63,"style":63},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[65,93779,93780,93796,93801,93806,93810],{"__ignoreMap":63},[68,93781,93782,93784,93786,93788,93790,93792,93794],{"class":70,"line":71},[68,93783,596],{"class":335},[68,93785,381],{"class":331},[68,93787,93203],{"class":335},[68,93789,551],{"class":82},[68,93791,711],{"class":335},[68,93793,779],{"class":82},[68,93795,342],{"class":335},[68,93797,93798],{"class":70,"line":92},[68,93799,93800],{"class":393},"#对数组中的元素累计求积，可指定轴\n",[68,93802,93803],{"class":70,"line":1387},[68,93804,93805],{"class":335},"np.cumprod(b)\n",[68,93807,93808],{"class":70,"line":1402},[68,93809,93765],{"class":393},[68,93811,93812],{"class":70,"line":1408},[68,93813,93814],{"class":393},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93816,93818],{"id":93817},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[58,93820,93822],{"className":30579,"code":93821,"language":30581,"meta":63,"style":63},"#删除数组中的重复数据，并对数据进行排序\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",[65,93823,93824,93829,93877,93882,93886],{"__ignoreMap":63},[68,93825,93826],{"class":70,"line":71},[68,93827,93828],{"class":393},"#删除数组中的重复数据，并对数据进行排序\n",[68,93830,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875],{"class":70,"line":92},[68,93832,30],{"class":335},[68,93834,381],{"class":331},[68,93836,93225],{"class":335},[68,93838,551],{"class":82},[68,93840,711],{"class":335},[68,93842,412],{"class":82},[68,93844,711],{"class":335},[68,93846,406],{"class":82},[68,93848,711],{"class":335},[68,93850,831],{"class":82},[68,93852,711],{"class":335},[68,93854,406],{"class":82},[68,93856,711],{"class":335},[68,93858,779],{"class":82},[68,93860,711],{"class":335},[68,93862,531],{"class":82},[68,93864,711],{"class":335},[68,93866,525],{"class":82},[68,93868,711],{"class":335},[68,93870,1108],{"class":82},[68,93872,711],{"class":335},[68,93874,626],{"class":82},[68,93876,4863],{"class":335},[68,93878,93879],{"class":70,"line":1387},[68,93880,93881],{"class":335},"np.unique(a)\n",[68,93883,93884],{"class":70,"line":1402},[68,93885,93765],{"class":393},[68,93887,93888],{"class":70,"line":1408},[68,93889,93890],{"class":393},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93892,93893],{},"升序形式排序",[14,93895,93897],{"id":93896},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[58,93899,93901],{"className":30579,"code":93900,"language":30581,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[65,93902,93903,93951,93956],{"__ignoreMap":63},[68,93904,93905,93907,93909,93911,93913,93915,93917,93919,93921,93923,93925,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945,93947,93949],{"class":70,"line":71},[68,93906,30],{"class":335},[68,93908,381],{"class":331},[68,93910,93225],{"class":335},[68,93912,551],{"class":82},[68,93914,711],{"class":335},[68,93916,412],{"class":82},[68,93918,711],{"class":335},[68,93920,406],{"class":82},[68,93922,711],{"class":335},[68,93924,831],{"class":82},[68,93926,711],{"class":335},[68,93928,406],{"class":82},[68,93930,711],{"class":335},[68,93932,779],{"class":82},[68,93934,711],{"class":335},[68,93936,531],{"class":82},[68,93938,711],{"class":335},[68,93940,525],{"class":82},[68,93942,711],{"class":335},[68,93944,1108],{"class":82},[68,93946,711],{"class":335},[68,93948,626],{"class":82},[68,93950,4863],{"class":335},[68,93952,93953],{"class":70,"line":92},[68,93954,93955],{"class":393},"#返回数组中非零元素的索引\n",[68,93957,93958],{"class":70,"line":1387},[68,93959,93960],{"class":335},"np.nonzero(a)\n",[14,93962,93964],{"id":93963},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[58,93966,93968],{"className":30579,"code":93967,"language":30581,"meta":63,"style":63},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[65,93969,93970,94018,94023],{"__ignoreMap":63},[68,93971,93972,93974,93976,93978,93980,93982,93984,93986,93988,93990,93992,93994,93996,93998,94000,94002,94004,94006,94008,94010,94012,94014,94016],{"class":70,"line":71},[68,93973,30],{"class":335},[68,93975,381],{"class":331},[68,93977,93225],{"class":335},[68,93979,551],{"class":82},[68,93981,711],{"class":335},[68,93983,412],{"class":82},[68,93985,711],{"class":335},[68,93987,406],{"class":82},[68,93989,711],{"class":335},[68,93991,831],{"class":82},[68,93993,711],{"class":335},[68,93995,406],{"class":82},[68,93997,711],{"class":335},[68,93999,779],{"class":82},[68,94001,711],{"class":335},[68,94003,531],{"class":82},[68,94005,711],{"class":335},[68,94007,525],{"class":82},[68,94009,711],{"class":335},[68,94011,1108],{"class":82},[68,94013,711],{"class":335},[68,94015,626],{"class":82},[68,94017,4863],{"class":335},[68,94019,94020],{"class":70,"line":92},[68,94021,94022],{"class":393},"#计算一组数中最大值与最小值的差，可指定轴\n",[68,94024,94025],{"class":70,"line":1387},[68,94026,94027],{"class":335},"np.ptp(a)\n",[250,94029,94030],{},"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":63,"searchDepth":92,"depth":92,"links":94032},[94033,94034,94035,94036,94037,94038,94039,94040,94041,94042,94043],{"id":93295,"depth":92,"text":93296},{"id":93338,"depth":92,"text":93339},{"id":93446,"depth":92,"text":93447},{"id":93540,"depth":92,"text":93541},{"id":93580,"depth":92,"text":93581},{"id":93653,"depth":92,"text":93654},{"id":93721,"depth":92,"text":93722},{"id":93773,"depth":92,"text":93774},{"id":93817,"depth":92,"text":93818},{"id":93896,"depth":92,"text":93897},{"id":93963,"depth":92,"text":93964},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93281,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94050,"title":94051,"body":94052,"description":257,"extension":258,"meta":94707,"navigation":260,"path":94708,"seo":94709,"stem":94710,"__hash__":94711},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94053,"toc":94695},[94054,94057,94061,94064,94280,94284,94287,94496,94500,94566,94571,94575,94578,94581,94619,94623,94626,94631,94635,94638,94641,94646,94650,94653,94657,94660,94663,94668,94672,94675,94678,94683,94687,94692],[10,94055,94051],{"id":94056},"_12其他常用函数",[14,94058,94060],{"id":94059},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94062,94063],{},"将数组的数据按照行列复制扩展",[58,94065,94067],{"className":30579,"code":94066,"language":30581,"meta":63,"style":63},"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",[65,94068,94069,94085,94094,94098,94103,94108,94121,94125,94130,94135,94140,94144,94149,94173,94185,94189,94193,94198,94203,94208,94213,94217,94230,94234,94238,94243,94248,94253,94258,94263,94267,94271,94276],{"__ignoreMap":63},[68,94070,94071,94073,94075,94077,94079,94081,94083],{"class":70,"line":71},[68,94072,30],{"class":335},[68,94074,381],{"class":331},[68,94076,93203],{"class":335},[68,94078,551],{"class":82},[68,94080,711],{"class":335},[68,94082,652],{"class":82},[68,94084,342],{"class":335},[68,94086,94087,94090,94092],{"class":70,"line":92},[68,94088,94089],{"class":335},"np.tile(a,",[68,94091,412],{"class":82},[68,94093,342],{"class":335},[68,94095,94096],{"class":70,"line":1387},[68,94097,93765],{"class":393},[68,94099,94100],{"class":70,"line":1402},[68,94101,94102],{"class":393},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[68,94104,94105],{"class":70,"line":1408},[68,94106,94107],{"class":393},"#行复制两次，列复制三次\n",[68,94109,94110,94113,94115,94117,94119],{"class":70,"line":1422},[68,94111,94112],{"class":335},"np.tile(a,(",[68,94114,412],{"class":82},[68,94116,711],{"class":335},[68,94118,406],{"class":82},[68,94120,30698],{"class":335},[68,94122,94123],{"class":70,"line":1428},[68,94124,93765],{"class":393},[68,94126,94127],{"class":70,"line":1519},[68,94128,94129],{"class":78},"'''\n",[68,94131,94132],{"class":70,"line":1525},[68,94133,94134],{"class":78},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[68,94136,94137],{"class":70,"line":1537},[68,94138,94139],{"class":78},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[68,94141,94142],{"class":70,"line":1819},[68,94143,94129],{"class":78},[68,94145,94146],{"class":70,"line":1824},[68,94147,94148],{"class":393},"#创建二维数组\n",[68,94150,94151,94153,94155,94157,94159,94161,94163,94165,94167,94169,94171],{"class":70,"line":1830},[68,94152,93507],{"class":335},[68,94154,381],{"class":331},[68,94156,93203],{"class":335},[68,94158,551],{"class":82},[68,94160,711],{"class":335},[68,94162,856],{"class":82},[68,94164,93208],{"class":335},[68,94166,626],{"class":82},[68,94168,711],{"class":335},[68,94170,406],{"class":82},[68,94172,342],{"class":335},[68,94174,94175,94178,94180,94182],{"class":70,"line":1835},[68,94176,94177],{"class":335},"np.tile(aa,",[68,94179,412],{"class":82},[68,94181,762],{"class":335},[68,94183,94184],{"class":393},"#一个数的时候就是行\n",[68,94186,94187],{"class":70,"line":1849},[68,94188,93765],{"class":393},[68,94190,94191],{"class":70,"line":1854},[68,94192,94129],{"class":78},[68,94194,94195],{"class":70,"line":1860},[68,94196,94197],{"class":78},"array([[ 1,  2,  3,  1,  2,  3],\n",[68,94199,94200],{"class":70,"line":1881},[68,94201,94202],{"class":78},"       [ 4,  5,  6,  4,  5,  6],\n",[68,94204,94205],{"class":70,"line":1886},[68,94206,94207],{"class":78},"       [ 7,  8,  9,  7,  8,  9],\n",[68,94209,94210],{"class":70,"line":1900},[68,94211,94212],{"class":78},"       [10, 11, 12, 10, 11, 12]])\n",[68,94214,94215],{"class":70,"line":1905},[68,94216,94129],{"class":78},[68,94218,94219,94222,94224,94226,94228],{"class":70,"line":1934},[68,94220,94221],{"class":335},"np.tile(aa,(",[68,94223,412],{"class":82},[68,94225,711],{"class":335},[68,94227,406],{"class":82},[68,94229,30698],{"class":335},[68,94231,94232],{"class":70,"line":1939},[68,94233,93765],{"class":393},[68,94235,94236],{"class":70,"line":1956},[68,94237,94129],{"class":78},[68,94239,94240],{"class":70,"line":1961},[68,94241,94242],{"class":78},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[68,94244,94245],{"class":70,"line":1966},[68,94246,94247],{"class":78},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[68,94249,94250],{"class":70,"line":1971},[68,94251,94252],{"class":78},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[68,94254,94255],{"class":70,"line":1985},[68,94256,94257],{"class":78},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[68,94259,94260],{"class":70,"line":1990},[68,94261,94262],{"class":78},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[68,94264,94265],{"class":70,"line":2783},[68,94266,94247],{"class":78},[68,94268,94269],{"class":70,"line":2797},[68,94270,94252],{"class":78},[68,94272,94273],{"class":70,"line":2805},[68,94274,94275],{"class":78},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[68,94277,94278],{"class":70,"line":2810},[68,94279,94129],{"class":78},[14,94281,94283],{"id":94282},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94285,94286],{},"repeat()将数组中的每个元素重复若干次",[58,94288,94290],{"className":30579,"code":94289,"language":30581,"meta":63,"style":63},"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",[65,94291,94292,94308,94317,94321,94326,94350,94355,94364,94368,94373,94377,94382,94398,94402,94406,94411,94416,94421,94425,94430,94434,94439,94444,94448,94464,94468,94472,94477,94482,94487,94492],{"__ignoreMap":63},[68,94293,94294,94296,94298,94300,94302,94304,94306],{"class":70,"line":71},[68,94295,30],{"class":335},[68,94297,381],{"class":331},[68,94299,93203],{"class":335},[68,94301,551],{"class":82},[68,94303,711],{"class":335},[68,94305,652],{"class":82},[68,94307,342],{"class":335},[68,94309,94310,94313,94315],{"class":70,"line":92},[68,94311,94312],{"class":335},"np.repeat(a,",[68,94314,406],{"class":82},[68,94316,342],{"class":335},[68,94318,94319],{"class":70,"line":1387},[68,94320,93765],{"class":393},[68,94322,94323],{"class":70,"line":1402},[68,94324,94325],{"class":393},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[68,94327,94328,94330,94332,94334,94336,94338,94340,94342,94344,94346,94348],{"class":70,"line":1408},[68,94329,93507],{"class":335},[68,94331,381],{"class":331},[68,94333,93203],{"class":335},[68,94335,551],{"class":82},[68,94337,711],{"class":335},[68,94339,856],{"class":82},[68,94341,93208],{"class":335},[68,94343,626],{"class":82},[68,94345,711],{"class":335},[68,94347,406],{"class":82},[68,94349,342],{"class":335},[68,94351,94352],{"class":70,"line":1422},[68,94353,94354],{"class":393},"#这个重复之后二维变成一维\n",[68,94356,94357,94360,94362],{"class":70,"line":1428},[68,94358,94359],{"class":335},"np.repeat(aa,",[68,94361,412],{"class":82},[68,94363,342],{"class":335},[68,94365,94366],{"class":70,"line":1519},[68,94367,94129],{"class":78},[68,94369,94370],{"class":70,"line":1525},[68,94371,94372],{"class":78},"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",[68,94374,94375],{"class":70,"line":1537},[68,94376,94129],{"class":78},[68,94378,94379],{"class":70,"line":1819},[68,94380,94381],{"class":393},"#指定axis\n",[68,94383,94384,94386,94388,94390,94392,94394,94396],{"class":70,"line":1824},[68,94385,94359],{"class":335},[68,94387,412],{"class":82},[68,94389,711],{"class":335},[68,94391,47715],{"class":5421},[68,94393,381],{"class":331},[68,94395,525],{"class":82},[68,94397,342],{"class":335},[68,94399,94400],{"class":70,"line":1830},[68,94401,93765],{"class":393},[68,94403,94404],{"class":70,"line":1835},[68,94405,94129],{"class":78},[68,94407,94408],{"class":70,"line":1849},[68,94409,94410],{"class":78},"array([[ 1,  2,  3],\n",[68,94412,94413],{"class":70,"line":1854},[68,94414,94415],{"class":78},"       [ 1,  2,  3],\n",[68,94417,94418],{"class":70,"line":1860},[68,94419,94420],{"class":78},"       [ 4,  5,  6],\n",[68,94422,94423],{"class":70,"line":1881},[68,94424,94420],{"class":78},[68,94426,94427],{"class":70,"line":1886},[68,94428,94429],{"class":78},"       [ 7,  8,  9],\n",[68,94431,94432],{"class":70,"line":1900},[68,94433,94429],{"class":78},[68,94435,94436],{"class":70,"line":1905},[68,94437,94438],{"class":78},"       [10, 11, 12],\n",[68,94440,94441],{"class":70,"line":1934},[68,94442,94443],{"class":78},"       [10, 11, 12]])\n",[68,94445,94446],{"class":70,"line":1939},[68,94447,94129],{"class":78},[68,94449,94450,94452,94454,94456,94458,94460,94462],{"class":70,"line":1956},[68,94451,94359],{"class":335},[68,94453,412],{"class":82},[68,94455,711],{"class":335},[68,94457,47715],{"class":5421},[68,94459,381],{"class":331},[68,94461,551],{"class":82},[68,94463,342],{"class":335},[68,94465,94466],{"class":70,"line":1961},[68,94467,93765],{"class":393},[68,94469,94470],{"class":70,"line":1966},[68,94471,94129],{"class":78},[68,94473,94474],{"class":70,"line":1971},[68,94475,94476],{"class":78},"array([[ 1,  1,  2,  2,  3,  3],\n",[68,94478,94479],{"class":70,"line":1985},[68,94480,94481],{"class":78},"       [ 4,  4,  5,  5,  6,  6],\n",[68,94483,94484],{"class":70,"line":1990},[68,94485,94486],{"class":78},"       [ 7,  7,  8,  8,  9,  9],\n",[68,94488,94489],{"class":70,"line":2783},[68,94490,94491],{"class":78},"       [10, 10, 11, 11, 12, 12]])\n",[68,94493,94494],{"class":70,"line":2797},[68,94495,94129],{"class":78},[14,94497,94499],{"id":94498},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[58,94501,94503],{"className":30579,"code":94502,"language":30581,"meta":63,"style":63},"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",[65,94504,94505,94521,94526,94538,94542,94547,94557,94561],{"__ignoreMap":63},[68,94506,94507,94509,94511,94513,94515,94517,94519],{"class":70,"line":71},[68,94508,30],{"class":335},[68,94510,381],{"class":331},[68,94512,93203],{"class":335},[68,94514,551],{"class":82},[68,94516,711],{"class":335},[68,94518,652],{"class":82},[68,94520,342],{"class":335},[68,94522,94523],{"class":70,"line":92},[68,94524,94525],{"class":393},"#array([，2，3，4])\n",[68,94527,94528,94531,94533,94535],{"class":70,"line":1387},[68,94529,94530],{"class":335},"np.roll(a,",[68,94532,412],{"class":82},[68,94534,762],{"class":335},[68,94536,94537],{"class":393},"#传正数向后调多少位，传负数向前调多少位\n",[68,94539,94540],{"class":70,"line":1402},[68,94541,93765],{"class":393},[68,94543,94544],{"class":70,"line":1408},[68,94545,94546],{"class":393},"#array([3, 4, 1, 2])\n",[68,94548,94549,94551,94553,94555],{"class":70,"line":1422},[68,94550,94530],{"class":335},[68,94552,865],{"class":331},[68,94554,551],{"class":82},[68,94556,342],{"class":335},[68,94558,94559],{"class":70,"line":1428},[68,94560,93765],{"class":393},[68,94562,94563],{"class":70,"line":1519},[68,94564,94565],{"class":393},"#array([2, 3, 4, 1])\n",[19,94567,94568],{},[48,94569],{"alt":63,"src":94570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94572,94574],{"id":94573},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94576,94577],{},"resize()重新调整数组的大小",[19,94579,94580],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[58,94582,94584],{"className":30579,"code":94583,"language":30581,"meta":63,"style":63},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[65,94585,94586,94591,94604],{"__ignoreMap":63},[68,94587,94588],{"class":70,"line":71},[68,94589,94590],{"class":393},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[68,94592,94593,94596,94598,94600,94602],{"class":70,"line":92},[68,94594,94595],{"class":335},"np.resize(aa,(",[68,94597,412],{"class":82},[68,94599,711],{"class":335},[68,94601,677],{"class":82},[68,94603,30698],{"class":335},[68,94605,94606,94608,94610,94612,94614,94616],{"class":70,"line":1387},[68,94607,94595],{"class":335},[68,94609,412],{"class":82},[68,94611,711],{"class":335},[68,94613,753],{"class":82},[68,94615,82972],{"class":335},[68,94617,94618],{"class":393},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94620,94622],{"id":94621},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94624,94625],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94627,94628],{},[48,94629],{"alt":63,"src":94630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94632,94634],{"id":94633},"_126-保存加载文件","12.6 保存加载文件",[19,94636,94637],{},"savetxt():将数据保存到txt文件中",[19,94639,94640],{},"loadtxt():从文件加载数据",[19,94642,94643],{},[48,94644],{"alt":63,"src":94645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94647,94649],{"id":94648},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94651,94652],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94654,94656],{"id":94655},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94658,94659],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94661,94662],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94664,94665],{},[48,94666],{"alt":63,"src":94667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94669,94671],{"id":94670},"_129-where语句","12.9 where语句",[19,94673,94674],{},"np.where(条件,x,y)",[19,94676,94677],{},"如果条件为True,对应值为x,否则对应值为y",[19,94679,94680],{},[48,94681],{"alt":63,"src":94682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94684,94686],{"id":94685},"_1210-dot矩阵","12.10 dot()矩阵",[19,94688,94689],{},[48,94690],{"alt":63,"src":94691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[250,94693,94694],{},"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":63,"searchDepth":92,"depth":92,"links":94696},[94697,94698,94699,94700,94701,94702,94703,94704,94705,94706],{"id":94059,"depth":92,"text":94060},{"id":94282,"depth":92,"text":94283},{"id":94498,"depth":92,"text":94499},{"id":94573,"depth":92,"text":94574},{"id":94621,"depth":92,"text":94622},{"id":94633,"depth":92,"text":94634},{"id":94648,"depth":92,"text":94649},{"id":94655,"depth":92,"text":94656},{"id":94670,"depth":92,"text":94671},{"id":94685,"depth":92,"text":94686},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94051,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94713,"title":94714,"body":94715,"description":257,"extension":258,"meta":95068,"navigation":260,"path":95069,"seo":95070,"stem":95071,"__hash__":95072},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94716,"toc":95066},[94717,94720,94723,94726,94729,94732,94797,94799,95063],[10,94718,94714],{"id":94719},"_13数组排序",[19,94721,94722],{},"排序主要用到的方法是np.sort和np.argsort",[19,94724,94725],{},"其中np.sort()对数组直接排序",[19,94727,94728],{},"而np.argsort()是返回排序后的原始索引",[19,94730,94731],{},"①一维数组",[58,94733,94735],{"className":30579,"code":94734,"language":30581,"meta":63,"style":63},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[65,94736,94737,94741,94781,94789],{"__ignoreMap":63},[68,94738,94739],{"class":70,"line":71},[68,94740,93306],{"class":393},[68,94742,94743,94745,94747,94749,94751,94753,94755,94757,94759,94761,94763,94765,94767,94769,94771,94773,94775,94777,94779],{"class":70,"line":92},[68,94744,30],{"class":335},[68,94746,381],{"class":331},[68,94748,93225],{"class":335},[68,94750,406],{"class":82},[68,94752,711],{"class":335},[68,94754,831],{"class":82},[68,94756,711],{"class":335},[68,94758,728],{"class":82},[68,94760,711],{"class":335},[68,94762,1108],{"class":82},[68,94764,711],{"class":335},[68,94766,612],{"class":82},[68,94768,711],{"class":335},[68,94770,1226],{"class":82},[68,94772,711],{"class":335},[68,94774,677],{"class":82},[68,94776,711],{"class":335},[68,94778,779],{"class":82},[68,94780,4863],{"class":335},[68,94782,94783,94786],{"class":70,"line":1387},[68,94784,94785],{"class":335},"np.sort(a)",[68,94787,94788],{"class":393},"#升序排序\n",[68,94790,94791,94794],{"class":70,"line":1402},[68,94792,94793],{"class":335},"np.argsort(a)",[68,94795,94796],{"class":393},"#按照元素大小来索引排序\n",[19,94798,93492],{},[58,94800,94802],{"className":30579,"code":94801,"language":30581,"meta":63,"style":63},"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",[65,94803,94804,94816,94842,94847,94851,94856,94861,94866,94871,94875,94883,94887,94892,94897,94902,94907,94911,94916,94929,94933,94938,94943,94948,94953,94957,94962,94974,94978,94982,94986,94990,94994,94998,95003,95018,95023,95032,95037,95041,95045,95050,95054,95059],{"__ignoreMap":63},[68,94805,94806,94809,94811,94813],{"class":70,"line":71},[68,94807,94808],{"class":335},"np.random.seed(",[68,94810,525],{"class":82},[68,94812,762],{"class":335},[68,94814,94815],{"class":393},"#保证每次值一样\n",[68,94817,94818,94820,94822,94824,94826,94828,94830,94832,94834,94836,94838,94840],{"class":70,"line":92},[68,94819,93507],{"class":335},[68,94821,381],{"class":331},[68,94823,93315],{"class":335},[68,94825,644],{"class":82},[68,94827,711],{"class":335},[68,94829,31697],{"class":5421},[68,94831,381],{"class":331},[68,94833,336],{"class":335},[68,94835,626],{"class":82},[68,94837,711],{"class":335},[68,94839,677],{"class":82},[68,94841,30698],{"class":335},[68,94843,94844],{"class":70,"line":1387},[68,94845,94846],{"class":393},"#原数组：\n",[68,94848,94849],{"class":70,"line":1402},[68,94850,94129],{"class":78},[68,94852,94853],{"class":70,"line":1408},[68,94854,94855],{"class":78},"array([[44, 47, 64, 67, 67,  9],\n",[68,94857,94858],{"class":70,"line":1422},[68,94859,94860],{"class":78},"       [83, 21, 36, 87, 70, 88],\n",[68,94862,94863],{"class":70,"line":1428},[68,94864,94865],{"class":78},"       [88, 12, 58, 65, 39, 87],\n",[68,94867,94868],{"class":70,"line":1519},[68,94869,94870],{"class":78},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[68,94872,94873],{"class":70,"line":1525},[68,94874,94129],{"class":78},[68,94876,94877,94880],{"class":70,"line":1537},[68,94878,94879],{"class":335},"np.sort(aa)",[68,94881,94882],{"class":393},"#每行进行了排序\n",[68,94884,94885],{"class":70,"line":1819},[68,94886,94129],{"class":78},[68,94888,94889],{"class":70,"line":1824},[68,94890,94891],{"class":78},"array([[ 9, 44, 47, 64, 67, 67],\n",[68,94893,94894],{"class":70,"line":1830},[68,94895,94896],{"class":78},"       [21, 36, 70, 83, 87, 88],\n",[68,94898,94899],{"class":70,"line":1835},[68,94900,94901],{"class":78},"       [12, 39, 58, 65, 87, 88],\n",[68,94903,94904],{"class":70,"line":1849},[68,94905,94906],{"class":78},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[68,94908,94909],{"class":70,"line":1854},[68,94910,94129],{"class":78},[68,94912,94913],{"class":70,"line":1860},[68,94914,94915],{"class":393},"#axis=0时\n",[68,94917,94918,94921,94923,94925,94927],{"class":70,"line":1881},[68,94919,94920],{"class":335},"np.sort(aa,",[68,94922,47715],{"class":5421},[68,94924,381],{"class":331},[68,94926,525],{"class":82},[68,94928,342],{"class":335},[68,94930,94931],{"class":70,"line":1886},[68,94932,94129],{"class":78},[68,94934,94935],{"class":70,"line":1900},[68,94936,94937],{"class":78},"array([[44, 12, 36, 37, 25,  9],\n",[68,94939,94940],{"class":70,"line":1905},[68,94941,94942],{"class":78},"       [46, 21, 58, 65, 39, 77],\n",[68,94944,94945],{"class":70,"line":1934},[68,94946,94947],{"class":78},"       [83, 47, 64, 67, 67, 87],\n",[68,94949,94950],{"class":70,"line":1939},[68,94951,94952],{"class":78},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[68,94954,94955],{"class":70,"line":1956},[68,94956,94129],{"class":78},[68,94958,94959],{"class":70,"line":1961},[68,94960,94961],{"class":393},"#axis=1时,为默认值\n",[68,94963,94964,94966,94968,94970,94972],{"class":70,"line":1966},[68,94965,94920],{"class":335},[68,94967,47715],{"class":5421},[68,94969,381],{"class":331},[68,94971,551],{"class":82},[68,94973,342],{"class":335},[68,94975,94976],{"class":70,"line":1971},[68,94977,94129],{"class":78},[68,94979,94980],{"class":70,"line":1985},[68,94981,94891],{"class":78},[68,94983,94984],{"class":70,"line":1990},[68,94985,94896],{"class":78},[68,94987,94988],{"class":70,"line":2783},[68,94989,94901],{"class":78},[68,94991,94992],{"class":70,"line":2797},[68,94993,94906],{"class":78},[68,94995,94996],{"class":70,"line":2805},[68,94997,94129],{"class":78},[68,94999,95000],{"class":70,"line":2810},[68,95001,95002],{"class":393},"#按最后一列排序\n",[68,95004,95005,95007,95009,95012,95014,95016],{"class":70,"line":2816},[68,95006,596],{"class":335},[68,95008,381],{"class":331},[68,95010,95011],{"class":335},"aa[:,",[68,95013,865],{"class":331},[68,95015,551],{"class":82},[68,95017,33447],{"class":335},[68,95019,95020],{"class":70,"line":2822},[68,95021,95022],{"class":393},"#获取最后一列排好序的索引\n",[68,95024,95025,95027,95029],{"class":70,"line":2827},[68,95026,74259],{"class":335},[68,95028,381],{"class":331},[68,95030,95031],{"class":335},"np.argsort(b)\n",[68,95033,95034],{"class":70,"line":8153},[68,95035,95036],{"class":335},"aa[index]\n",[68,95038,95039],{"class":70,"line":8177},[68,95040,94129],{"class":78},[68,95042,95043],{"class":70,"line":8182},[68,95044,94855],{"class":78},[68,95046,95047],{"class":70,"line":8188},[68,95048,95049],{"class":78},"       [46, 88, 81, 37, 25, 77],\n",[68,95051,95052],{"class":70,"line":8215},[68,95053,94865],{"class":78},[68,95055,95056],{"class":70,"line":8220},[68,95057,95058],{"class":78},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[68,95060,95061],{"class":70,"line":8226},[68,95062,94129],{"class":78},[250,95064,95065],{},"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":63,"searchDepth":92,"depth":92,"links":95067},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94714,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95074,"title":95075,"body":95076,"description":257,"extension":258,"meta":95106,"navigation":260,"path":95107,"seo":95108,"stem":95109,"__hash__":95110},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95077,"toc":95104},[95078,95081,95084,95087,95090,95093,95096,95099],[10,95079,95075],{"id":95080},"_14广播机制",[19,95082,95083],{},"广播的规则：",[19,95085,95086],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95088,95089],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95091,95092],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95094,95095],{},"3.如果没有维度形状为1，则会引发异常",[19,95097,95098],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95100,95101],{},[48,95102],{"alt":63,"src":95103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":63,"searchDepth":92,"depth":92,"links":95105},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95075,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95112,"title":95113,"body":95114,"description":257,"extension":258,"meta":95212,"navigation":260,"path":95213,"seo":95214,"stem":95215,"__hash__":95216},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95115,"toc":95210},[95116,95119,95122,95207],[10,95117,95113],{"id":95118},"_15比较掩码",[19,95120,95121],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[58,95123,95125],{"className":30579,"code":95124,"language":30581,"meta":63,"style":63},"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",[65,95126,95127,95173,95184,95198,95202],{"__ignoreMap":63},[68,95128,95129,95131,95133,95136,95138,95140,95142,95144,95146,95148,95150,95152,95154,95156,95158,95160,95162,95164,95166,95168,95170],{"class":70,"line":71},[68,95130,30],{"class":335},[68,95132,381],{"class":331},[68,95134,95135],{"class":335},"np.array([[",[68,95137,551],{"class":82},[68,95139,711],{"class":335},[68,95141,412],{"class":82},[68,95143,711],{"class":335},[68,95145,406],{"class":82},[68,95147,48231],{"class":335},[68,95149,805],{"class":82},[68,95151,711],{"class":335},[68,95153,831],{"class":82},[68,95155,711],{"class":335},[68,95157,856],{"class":82},[68,95159,48231],{"class":335},[68,95161,1058],{"class":82},[68,95163,711],{"class":335},[68,95165,1083],{"class":82},[68,95167,711],{"class":335},[68,95169,1108],{"class":82},[68,95171,95172],{"class":335},"]])\n",[68,95174,95175,95177,95179,95181],{"class":70,"line":92},[68,95176,30],{"class":335},[68,95178,1243],{"class":331},[68,95180,1033],{"class":82},[68,95182,95183],{"class":393},"#结果是一个由True,False组成的数组\n",[68,95185,95186,95189,95191,95193,95195],{"class":70,"line":1387},[68,95187,95188],{"class":335},"a[a",[68,95190,1243],{"class":331},[68,95192,1033],{"class":82},[68,95194,1273],{"class":335},[68,95196,95197],{"class":393},"#小于20的元素会存到这个数组中\n",[68,95199,95200],{"class":70,"line":1402},[68,95201,93765],{"class":393},[68,95203,95204],{"class":70,"line":1408},[68,95205,95206],{"class":393},"#array([ 1,  2,  3, 11, 12, 13])\n",[250,95208,95209],{},"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":63,"searchDepth":92,"depth":92,"links":95211},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95113,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95218,"title":95219,"body":95220,"description":257,"extension":258,"meta":95312,"navigation":260,"path":95313,"seo":95314,"stem":95315,"__hash__":95316},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95221,"toc":95310},[95222,95225,95228,95231,95234,95237,95302,95307],[10,95223,95219],{"id":95224},"_16魔法命令time",[19,95226,95227],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95229,95230],{},"%:行模式",[19,95232,95233],{},"%%:单元格模式",[19,95235,95236],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[58,95238,95240],{"className":30579,"code":95239,"language":30581,"meta":63,"style":63},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[65,95241,95242,95247,95254,95259,95268,95281,95285,95293],{"__ignoreMap":63},[68,95243,95244],{"class":70,"line":71},[68,95245,95246],{"class":393},"#程序执行时间\n",[68,95248,95249,95251],{"class":70,"line":92},[68,95250,30593],{"class":331},[68,95252,95253],{"class":335}," time \n",[68,95255,95256],{"class":70,"line":1387},[68,95257,95258],{"class":393},"#获取时间\n",[68,95260,95261,95264,95266],{"class":70,"line":1402},[68,95262,95263],{"class":335},"start",[68,95265,381],{"class":331},[68,95267,32619],{"class":335},[68,95269,95270,95273,95276,95278],{"class":70,"line":1408},[68,95271,95272],{"class":335},"time.sleep(",[68,95274,95275],{"class":82},"0.4",[68,95277,762],{"class":335},[68,95279,95280],{"class":393},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[68,95282,95283],{"class":70,"line":1422},[68,95284,95258],{"class":393},[68,95286,95287,95289,95291],{"class":70,"line":1428},[68,95288,46002],{"class":335},[68,95290,381],{"class":331},[68,95292,32619],{"class":335},[68,95294,95295,95297,95299],{"class":70,"line":1519},[68,95296,46002],{"class":335},[68,95298,865],{"class":331},[68,95300,95301],{"class":335},"start\n",[19,95303,95304],{},[48,95305],{"alt":63,"src":95306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[250,95308,95309],{},"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":63,"searchDepth":92,"depth":92,"links":95311},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95219,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95318,"title":95319,"body":95320,"description":257,"extension":258,"meta":95355,"navigation":260,"path":95356,"seo":95357,"stem":95358,"__hash__":95359},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95321,"toc":95353},[95322,95325,95328,95331,95334,95337,95340,95343,95348],[10,95323,95319],{"id":95324},"_17魔法命令timeit",[19,95326,95327],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95329,95330],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95332,95333],{},"单元格模式：",[19,95335,95336],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95338,95339],{},"初始化语句执行次数由轮数来决定",[19,95341,95342],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95344,95345],{},[48,95346],{"alt":63,"src":95347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95349,95350],{},[48,95351],{"alt":63,"src":95352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":63,"searchDepth":92,"depth":92,"links":95354},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95319,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95361,"title":95362,"body":95363,"description":257,"extension":258,"meta":95381,"navigation":260,"path":95382,"seo":95383,"stem":95384,"__hash__":95385},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95364,"toc":95379},[95365,95368,95371,95374],[10,95366,95362],{"id":95367},"_18魔法命令writefile和run",[19,95369,95370],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95372,95373],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95375,95376],{},[48,95377],{"alt":63,"src":95378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":63,"searchDepth":92,"depth":92,"links":95380},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95362,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95387,"title":95388,"body":95389,"description":257,"extension":258,"meta":95442,"navigation":260,"path":95443,"seo":95444,"stem":95445,"__hash__":95446},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95390,"toc":95440},[95391,95394,95397,95399,95402,95405,95410,95413,95416,95419,95422,95425,95428,95431,95434,95437],[10,95392,95388],{"id":95393},"_19魔法命令memit",[19,95395,95396],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95398,24803],{},[19,95400,95401],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95403,95404],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95406,95407],{},[48,95408],{"alt":63,"src":95409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95411,95412],{},"补充：",[19,95414,95415],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95417,95418],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95420,95421],{},"解决方法：",[19,95423,95424],{},"1.cmd",[19,95426,95427],{},"2.依次输入以下代码：",[19,95429,95430],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95432,95433],{},"pip install --upgrade ipython",[19,95435,95436],{},"#升级 memory_profiler 和 setuptools",[19,95438,95439],{},"pip install --upgrade memory_profiler setuptools",{"title":63,"searchDepth":92,"depth":92,"links":95441},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95388,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95448,"title":95449,"body":95450,"description":257,"extension":258,"meta":97096,"navigation":260,"path":97097,"seo":97098,"stem":97099,"__hash__":97100},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95451,"toc":97066},[95452,95455,95459,95463,95524,95527,95532,95536,95541,95546,95551,95556,95559,95564,95568,95572,95605,95608,95611,95614,95666,95669,95705,95708,95750,95754,95775,95777,95814,95816,95821,95823,95828,95832,95835,95863,95867,95871,95924,95928,96020,96024,96028,96031,96036,96040,96065,96070,96074,96077,96080,96083,96086,96089,96092,96095,96107,96111,96115,96118,96150,96153,96176,96179,96205,96208,96234,96237,96271,96274,96336,96340,96343,96347,96350,96376,96379,96382,96387,96390,96459,96461,96466,96527,96530,96541,96547,96552,96556,96559,96572,96576,96591,96593,96616,96618,96644,96647,96650,96653,96701,96703,96708,96712,96716,96743,96747,96774,96777,96782,96787,96877,96881,96939,96944,96947,96950,96992,96996,97052,97057,97060,97063],[10,95453,95449],{"id":95454},"_2创建数组",[14,95456,95458],{"id":95457},"_21-array函数创建数组","2.1 array()函数创建数组",[301,95460,95462],{"id":95461},"_221-函数语句","2.2.1 函数语句",[58,95464,95466],{"className":30579,"code":95465,"language":30581,"meta":63,"style":63},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[65,95467,95468],{"__ignoreMap":63},[68,95469,95470,95473,95476,95478,95480,95482,95484,95486,95489,95491,95494,95496,95499,95501,95503,95505,95508,95510,95513,95515,95518,95520,95522],{"class":70,"line":71},[68,95471,95472],{"class":335},"numpy.array(",[68,95474,95475],{"class":82},"object",[68,95477,12640],{"class":335},[68,95479,93701],{"class":5421},[68,95481,13769],{"class":331},[68,95483,39134],{"class":82},[68,95485,12640],{"class":335},[68,95487,95488],{"class":5421},"copy",[68,95490,13769],{"class":331},[68,95492,95493],{"class":82}," True",[68,95495,12640],{"class":335},[68,95497,95498],{"class":5421},"order",[68,95500,13769],{"class":331},[68,95502,39134],{"class":82},[68,95504,12640],{"class":335},[68,95506,95507],{"class":5421},"subok",[68,95509,13769],{"class":331},[68,95511,95512],{"class":82}," False",[68,95514,12640],{"class":335},[68,95516,95517],{"class":5421},"ndmin",[68,95519,13769],{"class":331},[68,95521,4299],{"class":82},[68,95523,342],{"class":335},[19,95525,95526],{},"参数：",[19,95528,95529],{},[48,95530],{"alt":63,"src":95531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[301,95533,95535],{"id":95534},"_222-实例","2.2.2 实例",[19,95537,95538],{},[48,95539],{"alt":63,"src":95540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95542,95543],{},[48,95544],{"alt":63,"src":95545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95547,95548],{},[48,95549],{"alt":63,"src":95550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95552,95553],{},[48,95554],{"alt":63,"src":95555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95557,95558],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95560,95561],{},[48,95562],{"alt":63,"src":95563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95565,95567],{"id":95566},"_22-随机数创建数组","2.2 随机数创建数组",[301,95569,95571],{"id":95570},"_221-random语句","2.2.1 random语句",[58,95573,95575],{"className":30579,"code":95574,"language":30581,"meta":63,"style":63},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[65,95576,95577,95582,95587,95595,95600],{"__ignoreMap":63},[68,95578,95579],{"class":70,"line":71},[68,95580,95581],{"class":393},"#random.random()\n",[68,95583,95584],{"class":70,"line":92},[68,95585,95586],{"class":393},"#确定随机种子,就是每次运行结果是相同的\n",[68,95588,95589,95591,95593],{"class":70,"line":1387},[68,95590,94808],{"class":335},[68,95592,525],{"class":82},[68,95594,342],{"class":335},[68,95596,95597],{"class":70,"line":1402},[68,95598,95599],{"class":335},"np.random.random()\n",[68,95601,95602],{"class":70,"line":1408},[68,95603,95604],{"class":393},"#生成一个随机的数目\n",[19,95606,95607],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95609,95610],{},"可以指定数组形状 size",[19,95612,95613],{},"①生成一维数组",[58,95615,95617],{"className":30579,"code":95616,"language":30581,"meta":63,"style":63},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[65,95618,95619,95624,95637,95642,95658],{"__ignoreMap":63},[68,95620,95621],{"class":70,"line":71},[68,95622,95623],{"class":393},"#random.random(size())\n",[68,95625,95626,95629,95631,95633,95635],{"class":70,"line":92},[68,95627,95628],{"class":335},"np.random.random(",[68,95630,31697],{"class":5421},[68,95632,381],{"class":331},[68,95634,652],{"class":82},[68,95636,342],{"class":335},[68,95638,95639],{"class":70,"line":1387},[68,95640,95641],{"class":393},"#生成一位的五个元素\n",[68,95643,95644,95646,95648,95650,95652,95654,95656],{"class":70,"line":1402},[68,95645,30],{"class":335},[68,95647,381],{"class":331},[68,95649,95628],{"class":335},[68,95651,31697],{"class":5421},[68,95653,381],{"class":331},[68,95655,626],{"class":82},[68,95657,342],{"class":335},[68,95659,95660,95663],{"class":70,"line":1408},[68,95661,95662],{"class":335},"a.shape ",[68,95664,95665],{"class":393},"#输出数组形状\n",[19,95667,95668],{},"②生成二维数组",[58,95670,95672],{"className":30579,"code":95671,"language":30581,"meta":63,"style":63},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[65,95673,95674,95678,95700],{"__ignoreMap":63},[68,95675,95676],{"class":70,"line":71},[68,95677,93502],{"class":393},[68,95679,95680,95682,95684,95686,95688,95690,95692,95694,95696,95698],{"class":70,"line":92},[68,95681,93507],{"class":335},[68,95683,381],{"class":331},[68,95685,95628],{"class":335},[68,95687,31697],{"class":5421},[68,95689,381],{"class":331},[68,95691,336],{"class":335},[68,95693,626],{"class":82},[68,95695,711],{"class":335},[68,95697,652],{"class":82},[68,95699,30698],{"class":335},[68,95701,95702],{"class":70,"line":1387},[68,95703,95704],{"class":393},"#生成四行五列的数组\n",[19,95706,95707],{},"③生成三维数组",[58,95709,95711],{"className":30579,"code":95710,"language":30581,"meta":63,"style":63},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[65,95712,95713,95718,95745],{"__ignoreMap":63},[68,95714,95715],{"class":70,"line":71},[68,95716,95717],{"class":393},"#三维数组\n",[68,95719,95720,95723,95725,95727,95729,95731,95733,95735,95737,95739,95741,95743],{"class":70,"line":92},[68,95721,95722],{"class":335},"aaa",[68,95724,381],{"class":331},[68,95726,95628],{"class":335},[68,95728,31697],{"class":5421},[68,95730,381],{"class":331},[68,95732,336],{"class":335},[68,95734,412],{"class":82},[68,95736,711],{"class":335},[68,95738,406],{"class":82},[68,95740,711],{"class":335},[68,95742,626],{"class":82},[68,95744,30698],{"class":335},[68,95746,95747],{"class":70,"line":1387},[68,95748,95749],{"class":335},"aaa.shape\n",[301,95751,95753],{"id":95752},"_222-randint语句","2.2.2 randint语句",[58,95755,95757],{"className":30579,"code":95756,"language":30581,"meta":63,"style":63},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[65,95758,95759,95764],{"__ignoreMap":63},[68,95760,95761],{"class":70,"line":71},[68,95762,95763],{"class":393},"#生成随机的整数 random.randint(low,high,size)\n",[68,95765,95766,95768,95770,95772],{"class":70,"line":92},[68,95767,93315],{"class":335},[68,95769,652],{"class":82},[68,95771,13919],{"class":335},[68,95773,95774],{"class":393},"#0~5中的随机一个数\n",[19,95776,95613],{},[58,95778,95780],{"className":30579,"code":95779,"language":30581,"meta":63,"style":63},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[65,95781,95782,95787,95809],{"__ignoreMap":63},[68,95783,95784],{"class":70,"line":71},[68,95785,95786],{"class":393},"#一维\n",[68,95788,95789,95791,95793,95795,95797,95799,95801,95803,95805,95807],{"class":70,"line":92},[68,95790,93315],{"class":335},[68,95792,551],{"class":82},[68,95794,711],{"class":335},[68,95796,805],{"class":82},[68,95798,711],{"class":335},[68,95800,31697],{"class":5421},[68,95802,381],{"class":331},[68,95804,336],{"class":335},[68,95806,779],{"class":82},[68,95808,30698],{"class":335},[68,95810,95811],{"class":70,"line":1387},[68,95812,95813],{"class":393},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95815,95668],{},[19,95817,95818],{},[48,95819],{"alt":63,"src":95820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95822,95707],{},[19,95824,95825],{},[48,95826],{"alt":63,"src":95827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[301,95829,95831],{"id":95830},"_222-rand语句","2.2.2 rand语句",[19,95833,95834],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[58,95836,95838],{"className":30579,"code":95837,"language":30581,"meta":63,"style":63},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[65,95839,95840,95853,95858],{"__ignoreMap":63},[68,95841,95842,95845,95847,95849,95851],{"class":70,"line":71},[68,95843,95844],{"class":335},"np.random.rand(",[68,95846,644],{"class":82},[68,95848,711],{"class":335},[68,95850,779],{"class":82},[68,95852,342],{"class":335},[68,95854,95855],{"class":70,"line":92},[68,95856,95857],{"class":393},"#第一个参数100：行数，表示有100个样本\n",[68,95859,95860],{"class":70,"line":1387},[68,95861,95862],{"class":393},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95864,95866],{"id":95865},"_23-arange创建数组","2.3 arange()创建数组",[301,95868,95870],{"id":95869},"_231-函数语句","2.3.1 函数语句",[58,95872,95874],{"className":30579,"code":95873,"language":30581,"meta":63,"style":63},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[65,95875,95876,95890,95895,95900,95905,95910,95915,95920],{"__ignoreMap":63},[68,95877,95878,95881,95883,95885,95888],{"class":70,"line":71},[68,95879,95880],{"class":335},"numpy.arange([start,] stop[, step], ",[68,95882,93701],{"class":5421},[68,95884,381],{"class":331},[68,95886,95887],{"class":82},"None",[68,95889,342],{"class":335},[68,95891,95892],{"class":70,"line":92},[68,95893,95894],{"class":393},"#参数\n",[68,95896,95897],{"class":70,"line":1387},[68,95898,95899],{"class":78},"\"\"\"\n",[68,95901,95902],{"class":70,"line":1402},[68,95903,95904],{"class":78},"start:起始值，可选，默认从 0 开始。\n",[68,95906,95907],{"class":70,"line":1408},[68,95908,95909],{"class":78},"stop:结束值（不包含该值）。\n",[68,95911,95912],{"class":70,"line":1422},[68,95913,95914],{"class":78},"step:步长，可选，默认是 1。可以为浮点数。\n",[68,95916,95917],{"class":70,"line":1428},[68,95918,95919],{"class":78},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[68,95921,95922],{"class":70,"line":1519},[68,95923,95899],{"class":78},[301,95925,95927],{"id":95926},"_232-实例","2.3.2 实例",[58,95929,95931],{"className":30579,"code":95930,"language":30581,"meta":63,"style":63},"#创建一维数组\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",[65,95932,95933,95937,95961,95966,95971,95975,95998,96002,96006,96011,96016],{"__ignoreMap":63},[68,95934,95935],{"class":70,"line":71},[68,95936,93306],{"class":393},[68,95938,95939,95941,95943,95945,95947,95949,95951,95953,95955,95957,95959],{"class":70,"line":92},[68,95940,93203],{"class":335},[68,95942,551],{"class":82},[68,95944,711],{"class":335},[68,95946,1058],{"class":82},[68,95948,711],{"class":335},[68,95950,551],{"class":82},[68,95952,711],{"class":335},[68,95954,93701],{"class":5421},[68,95956,381],{"class":331},[68,95958,339],{"class":82},[68,95960,342],{"class":335},[68,95962,95963],{"class":70,"line":1387},[68,95964,95965],{"class":393},"#输出结果：\n",[68,95967,95968],{"class":70,"line":1402},[68,95969,95970],{"class":393},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[68,95972,95973],{"class":70,"line":1408},[68,95974,94148],{"class":393},[68,95976,95977,95980,95982,95984,95986,95989,95991,95993,95995],{"class":70,"line":1422},[68,95978,95979],{"class":335},"np.array([np.arange(",[68,95981,551],{"class":82},[68,95983,711],{"class":335},[68,95985,626],{"class":82},[68,95987,95988],{"class":335},"),np.arange(",[68,95990,626],{"class":82},[68,95992,711],{"class":335},[68,95994,702],{"class":82},[68,95996,95997],{"class":335},")])\n",[68,95999,96000],{"class":70,"line":1428},[68,96001,93765],{"class":393},[68,96003,96004],{"class":70,"line":1519},[68,96005,95899],{"class":78},[68,96007,96008],{"class":70,"line":1525},[68,96009,96010],{"class":78},"array([[1, 2, 3],\n",[68,96012,96013],{"class":70,"line":1537},[68,96014,96015],{"class":78},"       [4, 5, 6]])\n",[68,96017,96018],{"class":70,"line":1819},[68,96019,95899],{"class":78},[14,96021,96023],{"id":96022},"_24-生态分布","2.4 生态分布",[301,96025,96027],{"id":96026},"_241-标准正态分布","2.4.1 标准正态分布",[19,96029,96030],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96032,96033],{},[48,96034],{"alt":63,"src":96035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[301,96037,96039],{"id":96038},"_242-常规正态分布","2.4.2 常规正态分布",[58,96041,96043],{"className":30579,"code":96042,"language":30581,"meta":63,"style":63},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[65,96044,96045,96050,96055,96060],{"__ignoreMap":63},[68,96046,96047],{"class":70,"line":71},[68,96048,96049],{"class":335},"random.normal(loc,scale,size)也可以生成正态分布\n",[68,96051,96052],{"class":70,"line":92},[68,96053,96054],{"class":393},"#loc:期望\n",[68,96056,96057],{"class":70,"line":1387},[68,96058,96059],{"class":393},"#scale:方差\n",[68,96061,96062],{"class":70,"line":1402},[68,96063,96064],{"class":393},"#size:用于确定是几维的数列\n",[19,96066,96067],{},[48,96068],{"alt":63,"src":96069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96071,96073],{"id":96072},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96075,96076],{},"ndim:秩，维度个数",[19,96078,96079],{},"size:数组元素的个数",[19,96081,96082],{},"shape:数组的形状",[19,96084,96085],{},"dtype:数组元素的类型",[19,96087,96088],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96090,96091],{},"他们都是属性，通过数组.属性的形式来确定",[19,96093,96094],{},"如果需要输出多个可以通过以下方式：",[58,96096,96098],{"className":30579,"code":96097,"language":30581,"meta":63,"style":63},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[65,96099,96100],{"__ignoreMap":63},[68,96101,96102,96104],{"class":70,"line":71},[68,96103,30616],{"class":82},[68,96105,96106],{"class":335},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96108,96110],{"id":96109},"_26-其他方式创建数组","2.6 其他方式创建数组",[301,96112,96114],{"id":96113},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96116,96117],{},"①创建一维数组",[58,96119,96121],{"className":30579,"code":96120,"language":30581,"meta":63,"style":63},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[65,96122,96123,96132,96136,96141,96146],{"__ignoreMap":63},[68,96124,96125,96128,96130],{"class":70,"line":71},[68,96126,96127],{"class":335},"np.zeros(",[68,96129,779],{"class":82},[68,96131,342],{"class":335},[68,96133,96134],{"class":70,"line":92},[68,96135,95899],{"class":78},[68,96137,96138],{"class":70,"line":1387},[68,96139,96140],{"class":78},"输出结果：\n",[68,96142,96143],{"class":70,"line":1402},[68,96144,96145],{"class":78},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[68,96147,96148],{"class":70,"line":1408},[68,96149,95899],{"class":78},[19,96151,96152],{},"上方代码等价于：",[58,96154,96156],{"className":30579,"code":96155,"language":30581,"meta":63,"style":63},"np.zeros(shape=(10))#创建10个元素的0数组\n",[65,96157,96158],{"__ignoreMap":63},[68,96159,96160,96162,96165,96167,96169,96171,96173],{"class":70,"line":71},[68,96161,96127],{"class":335},[68,96163,96164],{"class":5421},"shape",[68,96166,381],{"class":331},[68,96168,336],{"class":335},[68,96170,779],{"class":82},[68,96172,82972],{"class":335},[68,96174,96175],{"class":393},"#创建10个元素的0数组\n",[19,96177,96178],{},"也可以指定类型",[58,96180,96182],{"className":30579,"code":96181,"language":30581,"meta":63,"style":63},"#指定类型\nnp.zeros(5,dtype=int)\n",[65,96183,96184,96189],{"__ignoreMap":63},[68,96185,96186],{"class":70,"line":71},[68,96187,96188],{"class":393},"#指定类型\n",[68,96190,96191,96193,96195,96197,96199,96201,96203],{"class":70,"line":92},[68,96192,96127],{"class":335},[68,96194,652],{"class":82},[68,96196,711],{"class":335},[68,96198,93701],{"class":5421},[68,96200,381],{"class":331},[68,96202,339],{"class":82},[68,96204,342],{"class":335},[19,96206,96207],{},"②创建二维数组",[58,96209,96211],{"className":30579,"code":96210,"language":30581,"meta":63,"style":63},"np.zeros((3,4),dtype=int)\n",[65,96212,96213],{"__ignoreMap":63},[68,96214,96215,96218,96220,96222,96224,96226,96228,96230,96232],{"class":70,"line":71},[68,96216,96217],{"class":335},"np.zeros((",[68,96219,406],{"class":82},[68,96221,711],{"class":335},[68,96223,626],{"class":82},[68,96225,42457],{"class":335},[68,96227,93701],{"class":5421},[68,96229,381],{"class":331},[68,96231,339],{"class":82},[68,96233,342],{"class":335},[19,96235,96236],{},"③创建三维数组",[58,96238,96240],{"className":30579,"code":96239,"language":30581,"meta":63,"style":63},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[65,96241,96242,96247],{"__ignoreMap":63},[68,96243,96244],{"class":70,"line":71},[68,96245,96246],{"class":393},"#创建三维数组\n",[68,96248,96249,96251,96253,96255,96257,96259,96261,96263,96265,96267,96269],{"class":70,"line":92},[68,96250,96217],{"class":335},[68,96252,406],{"class":82},[68,96254,711],{"class":335},[68,96256,626],{"class":82},[68,96258,711],{"class":335},[68,96260,652],{"class":82},[68,96262,42457],{"class":335},[68,96264,93701],{"class":5421},[68,96266,381],{"class":331},[68,96268,339],{"class":82},[68,96270,342],{"class":335},[19,96272,96273],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[58,96275,96277],{"className":30579,"code":96276,"language":30581,"meta":63,"style":63},"#使用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",[65,96278,96279,96284,96299,96304,96309,96331],{"__ignoreMap":63},[68,96280,96281],{"class":70,"line":71},[68,96282,96283],{"class":393},"#使用zeros_like将创建的一维数组变成全0的数组\n",[68,96285,96286,96288,96290,96292,96294,96296],{"class":70,"line":92},[68,96287,30],{"class":335},[68,96289,381],{"class":331},[68,96291,93203],{"class":335},[68,96293,626],{"class":82},[68,96295,762],{"class":335},[68,96297,96298],{"class":393},"#这个得到的结果：一维数组0，1，2，3\n",[68,96300,96301],{"class":70,"line":1387},[68,96302,96303],{"class":335},"np.zeros_like(a)\n",[68,96305,96306],{"class":70,"line":1402},[68,96307,96308],{"class":393},"#使用zeros_like将创建的二维数组变成全0的数组\n",[68,96310,96311,96313,96315,96317,96319,96321,96323,96325,96327,96329],{"class":70,"line":1408},[68,96312,93507],{"class":335},[68,96314,381],{"class":331},[68,96316,95628],{"class":335},[68,96318,31697],{"class":5421},[68,96320,381],{"class":331},[68,96322,336],{"class":335},[68,96324,626],{"class":82},[68,96326,711],{"class":335},[68,96328,652],{"class":82},[68,96330,30698],{"class":335},[68,96332,96333],{"class":70,"line":1422},[68,96334,96335],{"class":335},"np.zeros_like(aa)\n",[301,96337,96339],{"id":96338},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96341,96342],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[301,96344,96346],{"id":96345},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96348,96349],{},"①empty()用法",[58,96351,96353],{"className":30579,"code":96352,"language":30581,"meta":63,"style":63},"numpy.empty(shape,dtype=float,order='c')\n",[65,96354,96355],{"__ignoreMap":63},[68,96356,96357,96360,96362,96364,96366,96368,96370,96372,96374],{"class":70,"line":71},[68,96358,96359],{"class":335},"numpy.empty(shape,",[68,96361,93701],{"class":5421},[68,96363,381],{"class":331},[68,96365,375],{"class":82},[68,96367,711],{"class":335},[68,96369,95498],{"class":5421},[68,96371,381],{"class":331},[68,96373,76229],{"class":78},[68,96375,342],{"class":335},[19,96377,96378],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96380,96381],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96383,96384],{},[48,96385],{"alt":63,"src":96386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96388,96389],{},"②empty()用法",[58,96391,96393],{"className":30579,"code":96392,"language":30581,"meta":63,"style":63},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[65,96394,96395,96416,96428,96449,96454],{"__ignoreMap":63},[68,96396,96397,96399,96401,96404,96406,96408,96410,96412,96414],{"class":70,"line":71},[68,96398,1178],{"class":335},[68,96400,381],{"class":331},[68,96402,96403],{"class":335},"np.empty(",[68,96405,779],{"class":82},[68,96407,711],{"class":335},[68,96409,93701],{"class":5421},[68,96411,381],{"class":331},[68,96413,339],{"class":82},[68,96415,342],{"class":335},[68,96417,96418,96420,96422,96424,96426],{"class":70,"line":92},[68,96419,1153],{"class":335},[68,96421,381],{"class":331},[68,96423,93203],{"class":335},[68,96425,652],{"class":82},[68,96427,342],{"class":335},[68,96429,96430,96433,96435,96438,96440,96442,96445,96447],{"class":70,"line":1387},[68,96431,96432],{"class":335},"np.add(",[68,96434,412],{"class":82},[68,96436,96437],{"class":335},",x,",[68,96439,93255],{"class":5421},[68,96441,381],{"class":331},[68,96443,96444],{"class":335},"y[:",[68,96446,652],{"class":82},[68,96448,4863],{"class":335},[68,96450,96451],{"class":70,"line":1402},[68,96452,96453],{"class":393},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[68,96455,96456],{"class":70,"line":1408},[68,96457,96458],{"class":335},"y\n",[19,96460,11719],{},[19,96462,96463],{},[48,96464],{"alt":63,"src":96465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[58,96467,96469],{"className":30579,"code":96468,"language":30581,"meta":63,"style":63},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[65,96470,96471,96487,96507,96522],{"__ignoreMap":63},[68,96472,96473,96475,96477,96479,96481,96483,96485],{"class":70,"line":71},[68,96474,1153],{"class":335},[68,96476,381],{"class":331},[68,96478,93203],{"class":335},[68,96480,551],{"class":82},[68,96482,711],{"class":335},[68,96484,677],{"class":82},[68,96486,342],{"class":335},[68,96488,96489,96491,96493,96495,96497,96499,96501,96503,96505],{"class":70,"line":92},[68,96490,1178],{"class":335},[68,96492,381],{"class":331},[68,96494,96403],{"class":335},[68,96496,652],{"class":82},[68,96498,711],{"class":335},[68,96500,93701],{"class":5421},[68,96502,381],{"class":331},[68,96504,339],{"class":82},[68,96506,342],{"class":335},[68,96508,96509,96512,96514,96516,96518,96520],{"class":70,"line":1387},[68,96510,96511],{"class":335},"np.add(x,",[68,96513,412],{"class":82},[68,96515,711],{"class":335},[68,96517,93255],{"class":5421},[68,96519,381],{"class":331},[68,96521,93650],{"class":335},[68,96523,96524],{"class":70,"line":1402},[68,96525,96526],{"class":393},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96528,96529],{},"③empty_like()",[19,96531,96532],{},[483,96533,96534,96535,96540],{},"创建一个",[483,96536,96537],{},[483,96538,96539],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96542,96543,96546],{},[65,96544,96545],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96548,96549],{},[48,96550],{"alt":63,"src":96551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[301,96553,96555],{"id":96554},"_264-用法","2.6.4 ？？用法",[19,96557,96558],{},"当想查看一个函数的参数时，可以通过？？来实现",[58,96560,96562],{"className":30579,"code":96561,"language":30581,"meta":63,"style":63},"np.full??\n",[65,96563,96564],{"__ignoreMap":63},[68,96565,96566,96569],{"class":70,"line":71},[68,96567,96568],{"class":335},"np.full",[68,96570,96571],{"class":77604},"??\n",[301,96573,96575],{"id":96574},"_265-full创建数组","2.6.5 full()创建数组",[58,96577,96579],{"className":30579,"code":96578,"language":30581,"meta":63,"style":63},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[65,96580,96581,96586],{"__ignoreMap":63},[68,96582,96583],{"class":70,"line":71},[68,96584,96585],{"class":335},"full(shape,fill_value)\n",[68,96587,96588],{"class":70,"line":92},[68,96589,96590],{"class":335},"创建全为某个指定值的数组\n",[19,96592,94731],{},[58,96594,96596],{"className":30579,"code":96595,"language":30581,"meta":63,"style":63},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[65,96597,96598,96603],{"__ignoreMap":63},[68,96599,96600],{"class":70,"line":71},[68,96601,96602],{"class":393},"#创建一个一维数组,以20进行填充\n",[68,96604,96605,96608,96610,96612,96614],{"class":70,"line":92},[68,96606,96607],{"class":335},"np.full(",[68,96609,779],{"class":82},[68,96611,711],{"class":335},[68,96613,1033],{"class":82},[68,96615,342],{"class":335},[19,96617,93492],{},[58,96619,96621],{"className":30579,"code":96620,"language":30581,"meta":63,"style":63},"#创建二维数组\nnp.full((3,5),11)\n",[65,96622,96623,96627],{"__ignoreMap":63},[68,96624,96625],{"class":70,"line":71},[68,96626,94148],{"class":393},[68,96628,96629,96632,96634,96636,96638,96640,96642],{"class":70,"line":92},[68,96630,96631],{"class":335},"np.full((",[68,96633,406],{"class":82},[68,96635,711],{"class":335},[68,96637,652],{"class":82},[68,96639,42457],{"class":335},[68,96641,805],{"class":82},[68,96643,342],{"class":335},[19,96645,96646],{},"③full_like用法",[19,96648,96649],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96651,96652],{},"这里是指定填充而已",[58,96654,96656],{"className":30579,"code":96655,"language":30581,"meta":63,"style":63},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[65,96657,96658,96663,96687,96692],{"__ignoreMap":63},[68,96659,96660],{"class":70,"line":71},[68,96661,96662],{"class":393},"#创建一个指定形状数组\n",[68,96664,96665,96667,96669,96671,96673,96675,96677,96679,96681,96683,96685],{"class":70,"line":92},[68,96666,30],{"class":335},[68,96668,381],{"class":331},[68,96670,93203],{"class":335},[68,96672,551],{"class":82},[68,96674,711],{"class":335},[68,96676,658],{"class":82},[68,96678,93208],{"class":335},[68,96680,626],{"class":82},[68,96682,711],{"class":335},[68,96684,753],{"class":82},[68,96686,342],{"class":335},[68,96688,96689],{"class":70,"line":1387},[68,96690,96691],{"class":393},"#进行指定填充\n",[68,96693,96694,96697,96699],{"class":70,"line":1402},[68,96695,96696],{"class":335},"np.full_like(a,",[68,96698,779],{"class":82},[68,96700,342],{"class":335},[19,96702,11719],{},[19,96704,96705],{},[48,96706],{"alt":63,"src":96707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[301,96709,96711],{"id":96710},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22203,96713,96715],{"id":96714},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[58,96717,96719],{"className":30579,"code":96718,"language":30581,"meta":63,"style":63},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[65,96720,96721,96738],{"__ignoreMap":63},[68,96722,96723,96726,96728,96730,96732,96734,96736],{"class":70,"line":71},[68,96724,96725],{"class":335},"np.eye(",[68,96727,626],{"class":82},[68,96729,711],{"class":335},[68,96731,93701],{"class":5421},[68,96733,381],{"class":331},[68,96735,339],{"class":82},[68,96737,342],{"class":335},[68,96739,96740],{"class":70,"line":92},[68,96741,96742],{"class":393},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22203,96744,96746],{"id":96745},"_2662-法2identity","2.6.6.2 法2：identity()",[58,96748,96750],{"className":30579,"code":96749,"language":30581,"meta":63,"style":63},"#identity()\nnp.identity(5,dtype=int)\n",[65,96751,96752,96757],{"__ignoreMap":63},[68,96753,96754],{"class":70,"line":71},[68,96755,96756],{"class":393},"#identity()\n",[68,96758,96759,96762,96764,96766,96768,96770,96772],{"class":70,"line":92},[68,96760,96761],{"class":335},"np.identity(",[68,96763,652],{"class":82},[68,96765,711],{"class":335},[68,96767,93701],{"class":5421},[68,96769,381],{"class":331},[68,96771,339],{"class":82},[68,96773,342],{"class":335},[19,96775,96776],{},"两个函数是有区别的",[19,96778,96779],{},[48,96780],{"alt":63,"src":96781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96783,96784],{},[48,96785],{"alt":63,"src":96786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[58,96788,96790],{"className":30579,"code":96789,"language":30581,"meta":63,"style":63},"# 创建一个 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",[65,96791,96792,96797,96809,96814,96819,96824,96829,96833,96838,96858,96862,96867,96872],{"__ignoreMap":63},[68,96793,96794],{"class":70,"line":71},[68,96795,96796],{"class":393},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[68,96798,96799,96801,96803,96805,96807],{"class":70,"line":92},[68,96800,96725],{"class":335},[68,96802,406],{"class":82},[68,96804,12640],{"class":335},[68,96806,626],{"class":82},[68,96808,342],{"class":335},[68,96810,96811],{"class":70,"line":1387},[68,96812,96813],{"class":393},"# 输出:\n",[68,96815,96816],{"class":70,"line":1402},[68,96817,96818],{"class":393},"# [[1. 0. 0. 0.]\n",[68,96820,96821],{"class":70,"line":1408},[68,96822,96823],{"class":393},"#  [0. 1. 0. 0.]\n",[68,96825,96826],{"class":70,"line":1422},[68,96827,96828],{"class":393},"#  [0. 0. 1. 0.]]\n",[68,96830,96831],{"class":70,"line":1428},[68,96832,2606],{"emptyLinePlaceholder":260},[68,96834,96835],{"class":70,"line":1519},[68,96836,96837],{"class":393},"# 对角线向上偏移1\n",[68,96839,96840,96842,96844,96846,96848,96850,96852,96854,96856],{"class":70,"line":1525},[68,96841,96725],{"class":335},[68,96843,406],{"class":82},[68,96845,12640],{"class":335},[68,96847,626],{"class":82},[68,96849,12640],{"class":335},[68,96851,826],{"class":5421},[68,96853,381],{"class":331},[68,96855,551],{"class":82},[68,96857,342],{"class":335},[68,96859,96860],{"class":70,"line":1537},[68,96861,96813],{"class":393},[68,96863,96864],{"class":70,"line":1819},[68,96865,96866],{"class":393},"# [[0. 1. 0. 0.]\n",[68,96868,96869],{"class":70,"line":1824},[68,96870,96871],{"class":393},"#  [0. 0. 1. 0.]\n",[68,96873,96874],{"class":70,"line":1830},[68,96875,96876],{"class":393},"#  [0. 0. 0. 1.]]\n",[301,96878,96880],{"id":96879},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[58,96882,96884],{"className":30579,"code":96883,"language":30581,"meta":63,"style":63},"#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",[65,96885,96886,96891,96895,96900,96905,96910,96915,96920,96925,96930,96935],{"__ignoreMap":63},[68,96887,96888],{"class":70,"line":71},[68,96889,96890],{"class":393},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[68,96892,96893],{"class":70,"line":92},[68,96894,95899],{"class":78},[68,96896,96897],{"class":70,"line":1387},[68,96898,96899],{"class":78},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[68,96901,96902],{"class":70,"line":1402},[68,96903,96904],{"class":78},"参数介绍：\n",[68,96906,96907],{"class":70,"line":1408},[68,96908,96909],{"class":78},"start：序列的起始值\n",[68,96911,96912],{"class":70,"line":1422},[68,96913,96914],{"class":78},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[68,96916,96917],{"class":70,"line":1428},[68,96918,96919],{"class":78},"num：要生长的等步长的样本数量，默认为50\n",[68,96921,96922],{"class":70,"line":1519},[68,96923,96924],{"class":78},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[68,96926,96927],{"class":70,"line":1525},[68,96928,96929],{"class":78},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[68,96931,96932],{"class":70,"line":1537},[68,96933,96934],{"class":78},"dtype：ndarry的数据类型\n",[68,96936,96937],{"class":70,"line":1819},[68,96938,95899],{"class":78},[19,96940,96941],{},[48,96942],{"alt":63,"src":96943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96945,96946],{},"这里num=是可以省略的",[19,96948,96949],{},"也就是下方两行代码结果是一模一样的",[58,96951,96953],{"className":30579,"code":96952,"language":30581,"meta":63,"style":63},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[65,96954,96955,96972],{"__ignoreMap":63},[68,96956,96957,96960,96962,96964,96966,96968,96970],{"class":70,"line":71},[68,96958,96959],{"class":335},"np.linspace(",[68,96961,551],{"class":82},[68,96963,711],{"class":335},[68,96965,652],{"class":82},[68,96967,711],{"class":335},[68,96969,652],{"class":82},[68,96971,342],{"class":335},[68,96973,96974,96976,96978,96980,96982,96984,96986,96988,96990],{"class":70,"line":92},[68,96975,96959],{"class":335},[68,96977,551],{"class":82},[68,96979,711],{"class":335},[68,96981,652],{"class":82},[68,96983,711],{"class":335},[68,96985,1872],{"class":5421},[68,96987,381],{"class":331},[68,96989,652],{"class":82},[68,96991,342],{"class":335},[301,96993,96995],{"id":96994},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[58,96997,96999],{"className":30579,"code":96998,"language":30581,"meta":63,"style":63},"#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",[65,97000,97001,97006,97010,97015,97020,97025,97030,97034,97039,97044,97048],{"__ignoreMap":63},[68,97002,97003],{"class":70,"line":71},[68,97004,97005],{"class":393},"#logspace函数用于创建一个等比数列，格式如下：\n",[68,97007,97008],{"class":70,"line":92},[68,97009,95899],{"class":78},[68,97011,97012],{"class":70,"line":1387},[68,97013,97014],{"class":78},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[68,97016,97017],{"class":70,"line":1402},[68,97018,97019],{"class":78},"参数为：\n",[68,97021,97022],{"class":70,"line":1408},[68,97023,97024],{"class":78},"start:序列的起始位置为：base**start\n",[68,97026,97027],{"class":70,"line":1422},[68,97028,97029],{"class":78},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[68,97031,97032],{"class":70,"line":1428},[68,97033,96919],{"class":78},[68,97035,97036],{"class":70,"line":1519},[68,97037,97038],{"class":78},"endpoint：是否包含 stop 这个值，默认是 True\n",[68,97040,97041],{"class":70,"line":1525},[68,97042,97043],{"class":78},"base：对数的底数，默认是 10（常见对数）\n",[68,97045,97046],{"class":70,"line":1537},[68,97047,96934],{"class":78},[68,97049,97050],{"class":70,"line":1819},[68,97051,95899],{"class":78},[19,97053,97054],{},[48,97055],{"alt":63,"src":97056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97058,97059],{},"logspace()函数中的num参数也是可以不写num=的",[19,97061,97062],{},"endpoint是不可以省略的",[250,97064,97065],{},"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":63,"searchDepth":92,"depth":92,"links":97067},[97068,97072,97077,97081,97085,97086],{"id":95457,"depth":92,"text":95458,"children":97069},[97070,97071],{"id":95461,"depth":1387,"text":95462},{"id":95534,"depth":1387,"text":95535},{"id":95566,"depth":92,"text":95567,"children":97073},[97074,97075,97076],{"id":95570,"depth":1387,"text":95571},{"id":95752,"depth":1387,"text":95753},{"id":95830,"depth":1387,"text":95831},{"id":95865,"depth":92,"text":95866,"children":97078},[97079,97080],{"id":95869,"depth":1387,"text":95870},{"id":95926,"depth":1387,"text":95927},{"id":96022,"depth":92,"text":96023,"children":97082},[97083,97084],{"id":96026,"depth":1387,"text":96027},{"id":96038,"depth":1387,"text":96039},{"id":96072,"depth":92,"text":96073},{"id":96109,"depth":92,"text":96110,"children":97087},[97088,97089,97090,97091,97092,97093,97094,97095],{"id":96113,"depth":1387,"text":96114},{"id":96338,"depth":1387,"text":96339},{"id":96345,"depth":1387,"text":96346},{"id":96554,"depth":1387,"text":96555},{"id":96574,"depth":1387,"text":96575},{"id":96710,"depth":1387,"text":96711},{"id":96879,"depth":1387,"text":96880},{"id":96994,"depth":1387,"text":96995},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95449,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97102,"title":97103,"body":97104,"description":257,"extension":258,"meta":97197,"navigation":260,"path":97198,"seo":97199,"stem":97200,"__hash__":97201},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97105,"toc":97195},[97106,97109,97112,97115,97118,97121,97124,97127,97130,97133,97136,97139,97141,97144,97147,97152,97155,97158,97192],[10,97107,97103],{"id":97108},"_20魔法命令mprun",[19,97110,97111],{},"逐行分析数据内存的使用情况",[19,97113,97114],{},"语法格式：",[19,97116,97117],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97119,97120],{},"分析结果列如下：",[19,97122,97123],{},"Line行号",[19,97125,97126],{},"Mem usage内存使用大小",[19,97128,97129],{},"increment内存增量",[19,97131,97132],{},"Line content代码内容",[19,97134,97135],{},"补充说明：",[19,97137,97138],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97140,95404],{},[19,97142,97143],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97145,97146],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97148,97149],{},[48,97150],{"alt":63,"src":97151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97153,97154],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97156,97157],{},"这时候需要重新加载模块",[58,97159,97161],{"className":30579,"code":97160,"language":30581,"meta":63,"style":63},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[65,97162,97163,97168,97175,97180],{"__ignoreMap":63},[68,97164,97165],{"class":70,"line":71},[68,97166,97167],{"class":393},"#重新加载模块\n",[68,97169,97170,97172],{"class":70,"line":92},[68,97171,30593],{"class":331},[68,97173,97174],{"class":335}," importlib\n",[68,97176,97177],{"class":70,"line":1387},[68,97178,97179],{"class":335},"importlib.reload(mprun_test)\n",[68,97181,97182,97184,97187,97189],{"class":70,"line":1402},[68,97183,661],{"class":331},[68,97185,97186],{"class":335},"mprun ",[68,97188,865],{"class":331},[68,97190,97191],{"class":335},"f mprun_test.fun_test mprun_test.fun_test()\n",[250,97193,97194],{},"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":63,"searchDepth":92,"depth":92,"links":97196},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97103,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97203,"title":97204,"body":97205,"description":257,"extension":258,"meta":97222,"navigation":260,"path":97223,"seo":97224,"stem":97225,"__hash__":97226},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97206,"toc":97220},[97207,97210,97215],[10,97208,97204],{"id":97209},"_3一维数组的索引和切片",[19,97211,97212],{},[48,97213],{"alt":63,"src":97214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97216,97217],{},[48,97218],{"alt":63,"src":97219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":63,"searchDepth":92,"depth":92,"links":97221},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97204,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97228,"title":97229,"body":97230,"description":257,"extension":258,"meta":97713,"navigation":260,"path":97714,"seo":97715,"stem":97716,"__hash__":97717},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97231,"toc":97711},[97232,97235,97238,97243,97276,97279,97317,97320,97354,97357,97462,97465,97502,97505,97606,97609,97660,97663,97705,97708],[10,97233,97229],{"id":97234},"_4二维数组的索引与切片",[19,97236,97237],{},"①获取指定单个元素",[19,97239,97240],{},[48,97241],{"alt":63,"src":97242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[58,97244,97246],{"className":30579,"code":97245,"language":30581,"meta":63,"style":63},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[65,97247,97248,97253,97258,97263],{"__ignoreMap":63},[68,97249,97250],{"class":70,"line":71},[68,97251,97252],{"class":393},"#获取元素9\n",[68,97254,97255],{"class":70,"line":92},[68,97256,97257],{"class":393},"#先获取所在行，再获取所在列\n",[68,97259,97260],{"class":70,"line":1387},[68,97261,97262],{"class":393},"#数组[行索引号，列索引号]\n",[68,97264,97265,97268,97270,97272,97274],{"class":70,"line":1402},[68,97266,97267],{"class":335},"a[",[68,97269,551],{"class":82},[68,97271,711],{"class":335},[68,97273,412],{"class":82},[68,97275,33447],{"class":335},[19,97277,97278],{},"②获取整行元素",[58,97280,97282],{"className":30579,"code":97281,"language":30581,"meta":63,"style":63},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[65,97283,97284,97289,97294,97302,97307],{"__ignoreMap":63},[68,97285,97286],{"class":70,"line":71},[68,97287,97288],{"class":393},"#获取整行 数组[行索引号]\n",[68,97290,97291],{"class":70,"line":92},[68,97292,97293],{"class":393},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[68,97295,97296,97298,97300],{"class":70,"line":1387},[68,97297,97267],{"class":335},[68,97299,412],{"class":82},[68,97301,33447],{"class":335},[68,97303,97304],{"class":70,"line":1402},[68,97305,97306],{"class":393},"#也可以负索引获取一行\n",[68,97308,97309,97311,97313,97315],{"class":70,"line":1408},[68,97310,97267],{"class":335},[68,97312,865],{"class":331},[68,97314,551],{"class":82},[68,97316,33447],{"class":335},[19,97318,97319],{},"③获取整列元素",[58,97321,97323],{"className":30579,"code":97322,"language":30581,"meta":63,"style":63},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[65,97324,97325,97330,97339,97344],{"__ignoreMap":63},[68,97326,97327],{"class":70,"line":71},[68,97328,97329],{"class":393},"#获取整列 数组名[:,列索引]\n",[68,97331,97332,97335,97337],{"class":70,"line":92},[68,97333,97334],{"class":335},"a[:,",[68,97336,412],{"class":82},[68,97338,33447],{"class":335},[68,97340,97341],{"class":70,"line":1387},[68,97342,97343],{"class":393},"#也可以负索引获取一列\n",[68,97345,97346,97348,97350,97352],{"class":70,"line":1402},[68,97347,97334],{"class":335},[68,97349,865],{"class":331},[68,97351,551],{"class":82},[68,97353,33447],{"class":335},[19,97355,97356],{},"④部分行部分列的元素",[58,97358,97360],{"className":30579,"code":97359,"language":30581,"meta":63,"style":63},"#部分行部分列 数组名[行切片，列切片]\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",[65,97361,97362,97367,97377,97381,97385,97390,97395,97399,97411,97415,97419,97424,97429,97434,97439,97443,97448],{"__ignoreMap":63},[68,97363,97364],{"class":70,"line":71},[68,97365,97366],{"class":393},"#部分行部分列 数组名[行切片，列切片]\n",[68,97368,97369,97372,97374],{"class":70,"line":92},[68,97370,97371],{"class":335},"a[:",[68,97373,412],{"class":82},[68,97375,97376],{"class":335},",:]\n",[68,97378,97379],{"class":70,"line":1387},[68,97380,93765],{"class":393},[68,97382,97383],{"class":70,"line":1402},[68,97384,94129],{"class":78},[68,97386,97387],{"class":70,"line":1408},[68,97388,97389],{"class":78},"array([[ 1,  2,  3,  4,  5,  6],\n",[68,97391,97392],{"class":70,"line":1422},[68,97393,97394],{"class":78},"       [ 7,  8,  9, 10, 11, 12]])\n",[68,97396,97397],{"class":70,"line":1428},[68,97398,94129],{"class":78},[68,97400,97401,97403,97405,97407,97409],{"class":70,"line":1519},[68,97402,97334],{"class":335},[68,97404,551],{"class":82},[68,97406,1192],{"class":335},[68,97408,626],{"class":82},[68,97410,33447],{"class":335},[68,97412,97413],{"class":70,"line":1525},[68,97414,93765],{"class":393},[68,97416,97417],{"class":70,"line":1537},[68,97418,94129],{"class":78},[68,97420,97421],{"class":70,"line":1819},[68,97422,97423],{"class":78},"array([[ 2,  3,  4],\n",[68,97425,97426],{"class":70,"line":1824},[68,97427,97428],{"class":78},"       [ 8,  9, 10],\n",[68,97430,97431],{"class":70,"line":1830},[68,97432,97433],{"class":78},"       [14, 15, 16],\n",[68,97435,97436],{"class":70,"line":1835},[68,97437,97438],{"class":78},"       [20, 21, 22]])\n",[68,97440,97441],{"class":70,"line":1849},[68,97442,94129],{"class":78},[68,97444,97445],{"class":70,"line":1854},[68,97446,97447],{"class":393},"#对列行同时进行切片，使用了step参数\n",[68,97449,97450,97453,97455,97458,97460],{"class":70,"line":1860},[68,97451,97452],{"class":335},"a[::",[68,97454,412],{"class":82},[68,97456,97457],{"class":335},",::",[68,97459,412],{"class":82},[68,97461,33447],{"class":335},[19,97463,97464],{},"⑤同时获取两个元素",[58,97466,97468],{"className":30579,"code":97467,"language":30581,"meta":63,"style":63},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[65,97469,97470,97475,97480],{"__ignoreMap":63},[68,97471,97472],{"class":70,"line":71},[68,97473,97474],{"class":393},"#同时获取第三行第二列，第四行第一列\n",[68,97476,97477],{"class":70,"line":92},[68,97478,97479],{"class":393},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[68,97481,97482,97485,97487,97489,97491,97493,97495,97497,97499],{"class":70,"line":1387},[68,97483,97484],{"class":335},"a[(",[68,97486,412],{"class":82},[68,97488,711],{"class":335},[68,97490,406],{"class":82},[68,97492,42448],{"class":335},[68,97494,551],{"class":82},[68,97496,711],{"class":335},[68,97498,525],{"class":82},[68,97500,97501],{"class":335},")]\n",[19,97503,97504],{},"⑥切片，对行进行反向获取",[58,97506,97508],{"className":30579,"code":97507,"language":30581,"meta":63,"style":63},"#切片 对所有行进行反向获取\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",[65,97509,97510,97515,97525,97529,97533,97538,97543,97548,97553,97557,97562,97578,97582,97587,97592,97597,97602],{"__ignoreMap":63},[68,97511,97512],{"class":70,"line":71},[68,97513,97514],{"class":393},"#切片 对所有行进行反向获取\n",[68,97516,97517,97519,97521,97523],{"class":70,"line":92},[68,97518,97452],{"class":335},[68,97520,865],{"class":331},[68,97522,551],{"class":82},[68,97524,33447],{"class":335},[68,97526,97527],{"class":70,"line":1387},[68,97528,93765],{"class":393},[68,97530,97531],{"class":70,"line":1402},[68,97532,94129],{"class":78},[68,97534,97535],{"class":70,"line":1408},[68,97536,97537],{"class":78},"array([[19, 20, 21, 22, 23, 24],\n",[68,97539,97540],{"class":70,"line":1422},[68,97541,97542],{"class":78},"       [13, 14, 15, 16, 17, 18],\n",[68,97544,97545],{"class":70,"line":1428},[68,97546,97547],{"class":78},"       [ 7,  8,  9, 10, 11, 12],\n",[68,97549,97550],{"class":70,"line":1519},[68,97551,97552],{"class":78},"       [ 1,  2,  3,  4,  5,  6]])\n",[68,97554,97555],{"class":70,"line":1525},[68,97556,94129],{"class":78},[68,97558,97559],{"class":70,"line":1537},[68,97560,97561],{"class":393},"#对行列都进行反向切片获取\n",[68,97563,97564,97566,97568,97570,97572,97574,97576],{"class":70,"line":1819},[68,97565,97452],{"class":335},[68,97567,865],{"class":331},[68,97569,551],{"class":82},[68,97571,97457],{"class":335},[68,97573,865],{"class":331},[68,97575,551],{"class":82},[68,97577,33447],{"class":335},[68,97579,97580],{"class":70,"line":1824},[68,97581,94129],{"class":78},[68,97583,97584],{"class":70,"line":1830},[68,97585,97586],{"class":78},"array([[24, 23, 22, 21, 20, 19],\n",[68,97588,97589],{"class":70,"line":1835},[68,97590,97591],{"class":78},"       [18, 17, 16, 15, 14, 13],\n",[68,97593,97594],{"class":70,"line":1849},[68,97595,97596],{"class":78},"       [12, 11, 10,  9,  8,  7],\n",[68,97598,97599],{"class":70,"line":1854},[68,97600,97601],{"class":78},"       [ 6,  5,  4,  3,  2,  1]])\n",[68,97603,97604],{"class":70,"line":1860},[68,97605,94129],{"class":78},[19,97607,97608],{},"⑦修改元素",[58,97610,97612],{"className":30579,"code":97611,"language":30581,"meta":63,"style":63},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[65,97613,97614,97619,97637,97642],{"__ignoreMap":63},[68,97615,97616],{"class":70,"line":71},[68,97617,97618],{"class":393},"#获取前两行和前两列\n",[68,97620,97621,97624,97626,97628,97630,97633,97635],{"class":70,"line":92},[68,97622,97623],{"class":335},"sub_a",[68,97625,381],{"class":331},[68,97627,97371],{"class":335},[68,97629,412],{"class":82},[68,97631,97632],{"class":335},",:",[68,97634,412],{"class":82},[68,97636,33447],{"class":335},[68,97638,97639],{"class":70,"line":1387},[68,97640,97641],{"class":393},"#修改sub_a第一个元素的值\n",[68,97643,97644,97647,97649,97651,97653,97655,97657],{"class":70,"line":1402},[68,97645,97646],{"class":335},"sub_a[",[68,97648,525],{"class":82},[68,97650,711],{"class":335},[68,97652,525],{"class":82},[68,97654,1273],{"class":335},[68,97656,381],{"class":331},[68,97658,97659],{"class":82},"100\n",[19,97661,97662],{},"⑧数组复制copy()",[58,97664,97666],{"className":30579,"code":97665,"language":30581,"meta":63,"style":63},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[65,97667,97668,97673,97683,97688],{"__ignoreMap":63},[68,97669,97670],{"class":70,"line":71},[68,97671,97672],{"class":393},"#数组复制\n",[68,97674,97675,97678,97680],{"class":70,"line":92},[68,97676,97677],{"class":335},"copy_a",[68,97679,381],{"class":331},[68,97681,97682],{"class":335},"np.copy(sub_a)\n",[68,97684,97685],{"class":70,"line":1387},[68,97686,97687],{"class":393},"#修改copy_a后不影响原数组\n",[68,97689,97690,97693,97695,97697,97699,97701,97703],{"class":70,"line":1402},[68,97691,97692],{"class":335},"copy_a[",[68,97694,525],{"class":82},[68,97696,711],{"class":335},[68,97698,525],{"class":82},[68,97700,1273],{"class":335},[68,97702,381],{"class":331},[68,97704,97659],{"class":82},[19,97706,97707],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[250,97709,97710],{},"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":63,"searchDepth":92,"depth":92,"links":97712},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97229,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97719,"title":97720,"body":97721,"description":257,"extension":258,"meta":98213,"navigation":260,"path":98214,"seo":98215,"stem":98216,"__hash__":98217},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97722,"toc":98205},[97723,97726,97730,97733,97736,97789,97792,97817,97820,97839,97859,97862,97878,97882,97928,97932,97974,97978,97981,97984,97987,97990,97993,98055,98115,98119,98122,98179,98183,98188,98197,98202],[10,97724,97720],{"id":97725},"_5改变数组的维度",[14,97727,97729],{"id":97728},"_51-使用reshape","5.1 使用reshape()",[19,97731,97732],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97734,97735],{},"①一维数组转换为二维数组",[58,97737,97739],{"className":30579,"code":97738,"language":30581,"meta":63,"style":63},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[65,97740,97741,97757,97762,97767,97772],{"__ignoreMap":63},[68,97742,97743,97745,97747,97749,97751,97753,97755],{"class":70,"line":71},[68,97744,30],{"class":335},[68,97746,381],{"class":331},[68,97748,93203],{"class":335},[68,97750,551],{"class":82},[68,97752,711],{"class":335},[68,97754,856],{"class":82},[68,97756,342],{"class":335},[68,97758,97759],{"class":70,"line":92},[68,97760,97761],{"class":393},"#将一维数组进行转换\n",[68,97763,97764],{"class":70,"line":1387},[68,97765,97766],{"class":393},"#注意点：元素个数不可以变\n",[68,97768,97769],{"class":70,"line":1402},[68,97770,97771],{"class":393},"#转换维度要保持一致，不一致就异常！！！\n",[68,97773,97774,97776,97778,97781,97783,97785,97787],{"class":70,"line":1408},[68,97775,93507],{"class":335},[68,97777,381],{"class":331},[68,97779,97780],{"class":335},"a.reshape(",[68,97782,412],{"class":82},[68,97784,711],{"class":335},[68,97786,677],{"class":82},[68,97788,342],{"class":335},[19,97790,97791],{},"②一维数组转换为三维数组",[58,97793,97795],{"className":30579,"code":97794,"language":30581,"meta":63,"style":63},"aaa=a.reshape(2,3,2)\n",[65,97796,97797],{"__ignoreMap":63},[68,97798,97799,97801,97803,97805,97807,97809,97811,97813,97815],{"class":70,"line":71},[68,97800,95722],{"class":335},[68,97802,381],{"class":331},[68,97804,97780],{"class":335},[68,97806,412],{"class":82},[68,97808,711],{"class":335},[68,97810,406],{"class":82},[68,97812,711],{"class":335},[68,97814,412],{"class":82},[68,97816,342],{"class":335},[19,97818,97819],{},"③二维数组转化为一维数组",[58,97821,97823],{"className":30579,"code":97822,"language":30581,"meta":63,"style":63},"#知道元素个数：\naa.reshape(12)\n",[65,97824,97825,97830],{"__ignoreMap":63},[68,97826,97827],{"class":70,"line":71},[68,97828,97829],{"class":393},"#知道元素个数：\n",[68,97831,97832,97835,97837],{"class":70,"line":92},[68,97833,97834],{"class":335},"aa.reshape(",[68,97836,831],{"class":82},[68,97838,342],{"class":335},[58,97840,97842],{"className":30579,"code":97841,"language":30581,"meta":63,"style":63},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[65,97843,97844,97849],{"__ignoreMap":63},[68,97845,97846],{"class":70,"line":71},[68,97847,97848],{"class":393},"#不知道元素个数，参数传递-1\n",[68,97850,97851,97853,97855,97857],{"class":70,"line":92},[68,97852,97834],{"class":335},[68,97854,865],{"class":331},[68,97856,551],{"class":82},[68,97858,342],{"class":335},[19,97860,97861],{},"④三维数组转换为一维数组",[58,97863,97865],{"className":30579,"code":97864,"language":30581,"meta":63,"style":63},"aaa.reshape(-1)\n",[65,97866,97867],{"__ignoreMap":63},[68,97868,97869,97872,97874,97876],{"class":70,"line":71},[68,97870,97871],{"class":335},"aaa.reshape(",[68,97873,865],{"class":331},[68,97875,551],{"class":82},[68,97877,342],{"class":335},[14,97879,97881],{"id":97880},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[58,97883,97885],{"className":30579,"code":97884,"language":30581,"meta":63,"style":63},"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",[65,97886,97887,97914,97919,97923],{"__ignoreMap":63},[68,97888,97889,97891,97893,97895,97897,97899,97901,97903,97905,97907,97909,97911],{"class":70,"line":71},[68,97890,93507],{"class":335},[68,97892,381],{"class":331},[68,97894,93203],{"class":335},[68,97896,551],{"class":82},[68,97898,711],{"class":335},[68,97900,856],{"class":82},[68,97902,93208],{"class":335},[68,97904,412],{"class":82},[68,97906,711],{"class":335},[68,97908,677],{"class":82},[68,97910,762],{"class":335},[68,97912,97913],{"class":393},"#转换为2行6列的数组\n",[68,97915,97916],{"class":70,"line":92},[68,97917,97918],{"class":335},"aa.revel()\n",[68,97920,97921],{"class":70,"line":1387},[68,97922,93765],{"class":393},[68,97924,97925],{"class":70,"line":1402},[68,97926,97927],{"class":393},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97929,97931],{"id":97930},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[58,97933,97935],{"className":30579,"code":97934,"language":30581,"meta":63,"style":63},"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",[65,97936,97937,97961,97966,97970],{"__ignoreMap":63},[68,97938,97939,97941,97943,97945,97947,97949,97951,97953,97955,97957,97959],{"class":70,"line":71},[68,97940,93507],{"class":335},[68,97942,381],{"class":331},[68,97944,93203],{"class":335},[68,97946,551],{"class":82},[68,97948,711],{"class":335},[68,97950,856],{"class":82},[68,97952,93208],{"class":335},[68,97954,412],{"class":82},[68,97956,711],{"class":335},[68,97958,677],{"class":82},[68,97960,342],{"class":335},[68,97962,97963],{"class":70,"line":92},[68,97964,97965],{"class":335},"aa.flatten()\n",[68,97967,97968],{"class":70,"line":1387},[68,97969,93765],{"class":393},[68,97971,97972],{"class":70,"line":1402},[68,97973,97927],{"class":393},[14,97975,97977],{"id":97976},"_54-使用resize","5.4 使用resize()",[19,97979,97980],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97982,97983],{},"通过resize方法可以改变数组的维度",[19,97985,97986],{},"#resize修改数组维度",[19,97988,97989],{},"#以元组的形式指定形状",[19,97991,97992],{},"#改变的是原数组",[58,97994,97996],{"className":30579,"code":97995,"language":30581,"meta":63,"style":63},"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",[65,97997,97998,98014,98034,98047,98051],{"__ignoreMap":63},[68,97999,98000,98002,98004,98006,98008,98010,98012],{"class":70,"line":71},[68,98001,30],{"class":335},[68,98003,381],{"class":331},[68,98005,93203],{"class":335},[68,98007,551],{"class":82},[68,98009,711],{"class":335},[68,98011,856],{"class":82},[68,98013,342],{"class":335},[68,98015,98016,98019,98021,98023,98025,98027,98029,98031],{"class":70,"line":92},[68,98017,98018],{"class":335},"a.shape",[68,98020,381],{"class":331},[68,98022,336],{"class":335},[68,98024,412],{"class":82},[68,98026,711],{"class":335},[68,98028,677],{"class":82},[68,98030,762],{"class":335},[68,98032,98033],{"class":393},"#改变了原数组\n",[68,98035,98036,98038,98040,98043,98045],{"class":70,"line":1387},[68,98037,30],{"class":335},[68,98039,381],{"class":331},[68,98041,98042],{"class":335},"resize((",[68,98044,831],{"class":82},[68,98046,30698],{"class":335},[68,98048,98049],{"class":70,"line":1402},[68,98050,93765],{"class":393},[68,98052,98053],{"class":70,"line":1408},[68,98054,97927],{"class":393},[58,98056,98058],{"className":30579,"code":98057,"language":30581,"meta":63,"style":63},"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",[65,98059,98060,98073,98077,98081,98086,98091,98096,98101,98106,98111],{"__ignoreMap":63},[68,98061,98062,98065,98067,98069,98071],{"class":70,"line":71},[68,98063,98064],{"class":335},"a.resize((",[68,98066,677],{"class":82},[68,98068,711],{"class":335},[68,98070,412],{"class":82},[68,98072,30698],{"class":335},[68,98074,98075],{"class":70,"line":92},[68,98076,93765],{"class":393},[68,98078,98079],{"class":70,"line":1387},[68,98080,94129],{"class":78},[68,98082,98083],{"class":70,"line":1402},[68,98084,98085],{"class":78},"array([[ 1,  2],\n",[68,98087,98088],{"class":70,"line":1408},[68,98089,98090],{"class":78},"       [ 3,  4],\n",[68,98092,98093],{"class":70,"line":1422},[68,98094,98095],{"class":78},"       [ 5,  6],\n",[68,98097,98098],{"class":70,"line":1428},[68,98099,98100],{"class":78},"       [ 7,  8],\n",[68,98102,98103],{"class":70,"line":1519},[68,98104,98105],{"class":78},"       [ 9, 10],\n",[68,98107,98108],{"class":70,"line":1525},[68,98109,98110],{"class":78},"       [11, 12]])\n",[68,98112,98113],{"class":70,"line":1537},[68,98114,94129],{"class":78},[14,98116,98118],{"id":98117},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98120,98121],{},"改变了原数组",[58,98123,98125],{"className":30579,"code":98124,"language":30581,"meta":63,"style":63},"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",[65,98126,98127,98143,98159,98163,98167,98171,98175],{"__ignoreMap":63},[68,98128,98129,98131,98133,98135,98137,98139,98141],{"class":70,"line":71},[68,98130,30],{"class":335},[68,98132,381],{"class":331},[68,98134,93203],{"class":335},[68,98136,551],{"class":82},[68,98138,711],{"class":335},[68,98140,856],{"class":82},[68,98142,342],{"class":335},[68,98144,98145,98147,98149,98151,98153,98155,98157],{"class":70,"line":92},[68,98146,98018],{"class":335},[68,98148,381],{"class":331},[68,98150,336],{"class":335},[68,98152,412],{"class":82},[68,98154,711],{"class":335},[68,98156,677],{"class":82},[68,98158,342],{"class":335},[68,98160,98161],{"class":70,"line":1387},[68,98162,93765],{"class":393},[68,98164,98165],{"class":70,"line":1402},[68,98166,94129],{"class":78},[68,98168,98169],{"class":70,"line":1408},[68,98170,97389],{"class":78},[68,98172,98173],{"class":70,"line":1422},[68,98174,97394],{"class":78},[68,98176,98177],{"class":70,"line":1428},[68,98178,94129],{"class":78},[14,98180,98182],{"id":98181},"_56-重要比较","5.6 重要比较：",[19,98184,98185],{},[48,98186],{"alt":63,"src":98187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98189,98190,98191,98193,98194,98196],{},"口诀：NumPy 函数要么用 ",[65,98192,96164],{},"，要么用 ",[65,98195,31697],{},"，创建结构用 shape，造数据用 size",[19,98198,98199],{},[48,98200],{"alt":63,"src":98201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[250,98203,98204],{},"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":63,"searchDepth":92,"depth":92,"links":98206},[98207,98208,98209,98210,98211,98212],{"id":97728,"depth":92,"text":97729},{"id":97880,"depth":92,"text":97881},{"id":97930,"depth":92,"text":97931},{"id":97976,"depth":92,"text":97977},{"id":98117,"depth":92,"text":98118},{"id":98181,"depth":92,"text":98182},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97720,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98219,"title":98220,"body":98221,"description":257,"extension":258,"meta":99293,"navigation":260,"path":99294,"seo":99295,"stem":99296,"__hash__":99297},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98222,"toc":99287},[98223,98226,98230,98233,98236,98239,98304,98307,98347,98350,98432,98435,98440,98462,98464,98469,98474,98477,98480,98635,98638,98840,98844,98847,98850,98918,98920,98925,98928,98931,99011,99015,99018,99020,99093,99095,99100,99102,99182,99186,99189,99192,99195,99198,99201,99204,99284],[10,98224,98220],{"id":98225},"_6数组的拼接",[14,98227,98229],{"id":98228},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98231,98232],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98234,98235],{},"函数内部传两个数列构成的数列或者元组",[19,98237,98238],{},"①一维数组的拼接",[58,98240,98242],{"className":30579,"code":98241,"language":30581,"meta":63,"style":63},"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",[65,98243,98244,98264,98284,98289,98294,98299],{"__ignoreMap":63},[68,98245,98246,98248,98250,98252,98254,98256,98258,98260,98262],{"class":70,"line":71},[68,98247,30],{"class":335},[68,98249,381],{"class":331},[68,98251,93225],{"class":335},[68,98253,551],{"class":82},[68,98255,711],{"class":335},[68,98257,412],{"class":82},[68,98259,711],{"class":335},[68,98261,406],{"class":82},[68,98263,4863],{"class":335},[68,98265,98266,98268,98270,98272,98274,98276,98278,98280,98282],{"class":70,"line":92},[68,98267,596],{"class":335},[68,98269,381],{"class":331},[68,98271,93225],{"class":335},[68,98273,626],{"class":82},[68,98275,711],{"class":335},[68,98277,652],{"class":82},[68,98279,711],{"class":335},[68,98281,677],{"class":82},[68,98283,4863],{"class":335},[68,98285,98286],{"class":70,"line":1387},[68,98287,98288],{"class":393},"#调用concatenate进行数组拼接\n",[68,98290,98291],{"class":70,"line":1402},[68,98292,98293],{"class":335},"np.concatenate((a,b))\n",[68,98295,98296],{"class":70,"line":1408},[68,98297,98298],{"class":393},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[68,98300,98301],{"class":70,"line":1422},[68,98302,98303],{"class":393},"#np.concatenate([a,b])\n",[19,98305,98306],{},"②一维多个数组拼接",[58,98308,98310],{"className":30579,"code":98309,"language":30581,"meta":63,"style":63},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[65,98311,98312,98317,98337,98342],{"__ignoreMap":63},[68,98313,98314],{"class":70,"line":71},[68,98315,98316],{"class":393},"#也可以多个数组进行拼接\n",[68,98318,98319,98321,98323,98325,98327,98329,98331,98333,98335],{"class":70,"line":92},[68,98320,621],{"class":335},[68,98322,381],{"class":331},[68,98324,93225],{"class":335},[68,98326,779],{"class":82},[68,98328,711],{"class":335},[68,98330,805],{"class":82},[68,98332,711],{"class":335},[68,98334,856],{"class":82},[68,98336,4863],{"class":335},[68,98338,98339],{"class":70,"line":1387},[68,98340,98341],{"class":335},"c\n",[68,98343,98344],{"class":70,"line":1402},[68,98345,98346],{"class":335},"np.concatenate((a,b,c))\n",[19,98348,98349],{},"③二维数组拼接",[58,98351,98353],{"className":30579,"code":98352,"language":30581,"meta":63,"style":63},"#二维数组使用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",[65,98354,98355,98360,98384,98409,98414,98419],{"__ignoreMap":63},[68,98356,98357],{"class":70,"line":71},[68,98358,98359],{"class":393},"#二维数组使用concatenate进行拼接\n",[68,98361,98362,98364,98366,98368,98370,98372,98374,98376,98378,98380,98382],{"class":70,"line":92},[68,98363,93507],{"class":335},[68,98365,381],{"class":331},[68,98367,93203],{"class":335},[68,98369,551],{"class":82},[68,98371,711],{"class":335},[68,98373,856],{"class":82},[68,98375,93208],{"class":335},[68,98377,406],{"class":82},[68,98379,711],{"class":335},[68,98381,626],{"class":82},[68,98383,342],{"class":335},[68,98385,98386,98389,98391,98393,98395,98397,98399,98401,98403,98405,98407],{"class":70,"line":1387},[68,98387,98388],{"class":335},"bb",[68,98390,381],{"class":331},[68,98392,93203],{"class":335},[68,98394,670],{"class":82},[68,98396,711],{"class":335},[68,98398,975],{"class":82},[68,98400,93208],{"class":335},[68,98402,406],{"class":82},[68,98404,711],{"class":335},[68,98406,626],{"class":82},[68,98408,342],{"class":335},[68,98410,98411],{"class":70,"line":1402},[68,98412,98413],{"class":393},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[68,98415,98416],{"class":70,"line":1408},[68,98417,98418],{"class":393},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[68,98420,98421,98424,98426,98428,98430],{"class":70,"line":1422},[68,98422,98423],{"class":335},"np.concatenate((aa,bb),",[68,98425,47715],{"class":5421},[68,98427,381],{"class":331},[68,98429,525],{"class":82},[68,98431,342],{"class":335},[19,98433,98434],{},"结果：",[19,98436,98437],{},[48,98438],{"alt":63,"src":98439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[58,98441,98443],{"className":30579,"code":98442,"language":30581,"meta":63,"style":63},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[65,98444,98445,98450],{"__ignoreMap":63},[68,98446,98447],{"class":70,"line":71},[68,98448,98449],{"class":393},"#指定axis为1进行拼接\n",[68,98451,98452,98454,98456,98458,98460],{"class":70,"line":92},[68,98453,98423],{"class":335},[68,98455,47715],{"class":5421},[68,98457,381],{"class":331},[68,98459,551],{"class":82},[68,98461,342],{"class":335},[19,98463,98434],{},[19,98465,98466],{},[48,98467],{"alt":63,"src":98468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98470,98471],{},[483,98472,98473],{},"二维数组总结：0竖着方向，1横着方向",[19,98475,98476],{},"④三维数组拼接",[19,98478,98479],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[58,98481,98483],{"className":30579,"code":98482,"language":30581,"meta":63,"style":63},"#两个三行六列\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",[65,98484,98485,98490,98518,98548,98553,98570,98575,98580,98585,98602,98607,98612,98617,98630],{"__ignoreMap":63},[68,98486,98487],{"class":70,"line":71},[68,98488,98489],{"class":393},"#两个三行六列\n",[68,98491,98492,98494,98496,98498,98500,98502,98504,98506,98508,98510,98512,98514,98516],{"class":70,"line":92},[68,98493,95722],{"class":335},[68,98495,381],{"class":331},[68,98497,93203],{"class":335},[68,98499,551],{"class":82},[68,98501,711],{"class":335},[68,98503,658],{"class":82},[68,98505,93208],{"class":335},[68,98507,412],{"class":82},[68,98509,711],{"class":335},[68,98511,406],{"class":82},[68,98513,711],{"class":335},[68,98515,677],{"class":82},[68,98517,342],{"class":335},[68,98519,98520,98523,98525,98527,98529,98531,98534,98536,98538,98540,98542,98544,98546],{"class":70,"line":1387},[68,98521,98522],{"class":335},"bbb",[68,98524,381],{"class":331},[68,98526,93203],{"class":335},[68,98528,670],{"class":82},[68,98530,711],{"class":335},[68,98532,98533],{"class":82},"137",[68,98535,93208],{"class":335},[68,98537,412],{"class":82},[68,98539,711],{"class":335},[68,98541,406],{"class":82},[68,98543,711],{"class":335},[68,98545,677],{"class":82},[68,98547,342],{"class":335},[68,98549,98550],{"class":70,"line":1402},[68,98551,98552],{"class":393},"#axis=0\n",[68,98554,98555,98557,98559,98562,98564,98566,98568],{"class":70,"line":1408},[68,98556,1028],{"class":335},[68,98558,381],{"class":331},[68,98560,98561],{"class":335},"np.concatenate((aaa,bbb),",[68,98563,47715],{"class":5421},[68,98565,381],{"class":331},[68,98567,525],{"class":82},[68,98569,342],{"class":335},[68,98571,98572],{"class":70,"line":1422},[68,98573,98574],{"class":335},"s.shape\n",[68,98576,98577],{"class":70,"line":1428},[68,98578,98579],{"class":393},"#输出：(4,3,6)\n",[68,98581,98582],{"class":70,"line":1519},[68,98583,98584],{"class":393},"#axis=1\n",[68,98586,98587,98590,98592,98594,98596,98598,98600],{"class":70,"line":1525},[68,98588,98589],{"class":335},"ss",[68,98591,381],{"class":331},[68,98593,98561],{"class":335},[68,98595,47715],{"class":5421},[68,98597,381],{"class":331},[68,98599,551],{"class":82},[68,98601,342],{"class":335},[68,98603,98604],{"class":70,"line":1537},[68,98605,98606],{"class":335},"ss.shape\n",[68,98608,98609],{"class":70,"line":1819},[68,98610,98611],{"class":393},"#输出：(2,6,6)\n",[68,98613,98614],{"class":70,"line":1824},[68,98615,98616],{"class":393},"#axis=2\n",[68,98618,98619,98621,98623,98625,98627],{"class":70,"line":1830},[68,98620,98561],{"class":335},[68,98622,47715],{"class":5421},[68,98624,381],{"class":331},[68,98626,412],{"class":82},[68,98628,98629],{"class":335},").shape\n",[68,98631,98632],{"class":70,"line":1835},[68,98633,98634],{"class":393},"#输出：（2，3，12）\n",[19,98636,98637],{},"⑤四维数组拼接",[58,98639,98641],{"className":30579,"code":98640,"language":30581,"meta":63,"style":63},"#两个三行六列\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",[65,98642,98643,98647,98675,98703,98728,98754,98758,98771,98776,98780,98792,98797,98801,98813,98818,98823,98835],{"__ignoreMap":63},[68,98644,98645],{"class":70,"line":71},[68,98646,98489],{"class":393},[68,98648,98649,98651,98653,98655,98657,98659,98661,98663,98665,98667,98669,98671,98673],{"class":70,"line":92},[68,98650,95722],{"class":335},[68,98652,381],{"class":331},[68,98654,93203],{"class":335},[68,98656,551],{"class":82},[68,98658,711],{"class":335},[68,98660,658],{"class":82},[68,98662,93208],{"class":335},[68,98664,412],{"class":82},[68,98666,711],{"class":335},[68,98668,406],{"class":82},[68,98670,711],{"class":335},[68,98672,677],{"class":82},[68,98674,342],{"class":335},[68,98676,98677,98679,98681,98683,98685,98687,98689,98691,98693,98695,98697,98699,98701],{"class":70,"line":1387},[68,98678,98522],{"class":335},[68,98680,381],{"class":331},[68,98682,93203],{"class":335},[68,98684,670],{"class":82},[68,98686,711],{"class":335},[68,98688,98533],{"class":82},[68,98690,93208],{"class":335},[68,98692,412],{"class":82},[68,98694,711],{"class":335},[68,98696,406],{"class":82},[68,98698,711],{"class":335},[68,98700,677],{"class":82},[68,98702,342],{"class":335},[68,98704,98705,98708,98710,98712,98714,98716,98718,98720,98722,98724,98726],{"class":70,"line":1402},[68,98706,98707],{"class":335},"aaaa",[68,98709,381],{"class":331},[68,98711,97871],{"class":335},[68,98713,412],{"class":82},[68,98715,711],{"class":335},[68,98717,406],{"class":82},[68,98719,711],{"class":335},[68,98721,406],{"class":82},[68,98723,711],{"class":335},[68,98725,412],{"class":82},[68,98727,342],{"class":335},[68,98729,98730,98733,98735,98738,98740,98742,98744,98746,98748,98750,98752],{"class":70,"line":1408},[68,98731,98732],{"class":335},"bbbb",[68,98734,381],{"class":331},[68,98736,98737],{"class":335},"bbb.reshape(",[68,98739,412],{"class":82},[68,98741,711],{"class":335},[68,98743,406],{"class":82},[68,98745,711],{"class":335},[68,98747,406],{"class":82},[68,98749,711],{"class":335},[68,98751,412],{"class":82},[68,98753,342],{"class":335},[68,98755,98756],{"class":70,"line":1422},[68,98757,98552],{"class":393},[68,98759,98760,98763,98765,98767,98769],{"class":70,"line":1428},[68,98761,98762],{"class":335},"np.concatenate((aaaa,bbbb),",[68,98764,47715],{"class":5421},[68,98766,381],{"class":331},[68,98768,525],{"class":82},[68,98770,98629],{"class":335},[68,98772,98773],{"class":70,"line":1519},[68,98774,98775],{"class":393},"#结果：（4，3，3，2）\n",[68,98777,98778],{"class":70,"line":1525},[68,98779,98584],{"class":393},[68,98781,98782,98784,98786,98788,98790],{"class":70,"line":1537},[68,98783,98762],{"class":335},[68,98785,47715],{"class":5421},[68,98787,381],{"class":331},[68,98789,551],{"class":82},[68,98791,98629],{"class":335},[68,98793,98794],{"class":70,"line":1819},[68,98795,98796],{"class":393},"#结果：（2，6，3，2）\n",[68,98798,98799],{"class":70,"line":1824},[68,98800,98616],{"class":393},[68,98802,98803,98805,98807,98809,98811],{"class":70,"line":1830},[68,98804,98762],{"class":335},[68,98806,47715],{"class":5421},[68,98808,381],{"class":331},[68,98810,412],{"class":82},[68,98812,98629],{"class":335},[68,98814,98815],{"class":70,"line":1835},[68,98816,98817],{"class":393},"#结果：（2，3，6，2）\n",[68,98819,98820],{"class":70,"line":1849},[68,98821,98822],{"class":393},"#axis=3\n",[68,98824,98825,98827,98829,98831,98833],{"class":70,"line":1854},[68,98826,98762],{"class":335},[68,98828,47715],{"class":5421},[68,98830,381],{"class":331},[68,98832,406],{"class":82},[68,98834,98629],{"class":335},[68,98836,98837],{"class":70,"line":1860},[68,98838,98839],{"class":393},"#结果：（2，3，3，4）\n",[14,98841,98843],{"id":98842},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98845,98846],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98848,98849],{},"①二维数组",[58,98851,98853],{"className":30579,"code":98852,"language":30581,"meta":63,"style":63},"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",[65,98854,98855,98879,98903,98908,98913],{"__ignoreMap":63},[68,98856,98857,98859,98861,98863,98865,98867,98869,98871,98873,98875,98877],{"class":70,"line":71},[68,98858,93507],{"class":335},[68,98860,381],{"class":331},[68,98862,93203],{"class":335},[68,98864,551],{"class":82},[68,98866,711],{"class":335},[68,98868,856],{"class":82},[68,98870,93208],{"class":335},[68,98872,406],{"class":82},[68,98874,711],{"class":335},[68,98876,626],{"class":82},[68,98878,342],{"class":335},[68,98880,98881,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901],{"class":70,"line":92},[68,98882,98388],{"class":335},[68,98884,381],{"class":331},[68,98886,93203],{"class":335},[68,98888,670],{"class":82},[68,98890,711],{"class":335},[68,98892,975],{"class":82},[68,98894,93208],{"class":335},[68,98896,406],{"class":82},[68,98898,711],{"class":335},[68,98900,626],{"class":82},[68,98902,342],{"class":335},[68,98904,98905],{"class":70,"line":1387},[68,98906,98907],{"class":335},"np.hstack((aa,bb))\n",[68,98909,98910],{"class":70,"line":1402},[68,98911,98912],{"class":393},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[68,98914,98915],{"class":70,"line":1408},[68,98916,98917],{"class":393},"#np.hstack([aa,bb])\n",[19,98919,98434],{},[19,98921,98922],{},[48,98923],{"alt":63,"src":98924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98926,98927],{},"等效于concatenate()函数中axis=1时的情况",[19,98929,98930],{},"②三维数组",[58,98932,98934],{"className":30579,"code":98933,"language":30581,"meta":63,"style":63},"#两个三行六列\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",[65,98935,98936,98940,98968,98996,99001,99006],{"__ignoreMap":63},[68,98937,98938],{"class":70,"line":71},[68,98939,98489],{"class":393},[68,98941,98942,98944,98946,98948,98950,98952,98954,98956,98958,98960,98962,98964,98966],{"class":70,"line":92},[68,98943,95722],{"class":335},[68,98945,381],{"class":331},[68,98947,93203],{"class":335},[68,98949,551],{"class":82},[68,98951,711],{"class":335},[68,98953,658],{"class":82},[68,98955,93208],{"class":335},[68,98957,412],{"class":82},[68,98959,711],{"class":335},[68,98961,406],{"class":82},[68,98963,711],{"class":335},[68,98965,677],{"class":82},[68,98967,342],{"class":335},[68,98969,98970,98972,98974,98976,98978,98980,98982,98984,98986,98988,98990,98992,98994],{"class":70,"line":1387},[68,98971,98522],{"class":335},[68,98973,381],{"class":331},[68,98975,93203],{"class":335},[68,98977,670],{"class":82},[68,98979,711],{"class":335},[68,98981,98533],{"class":82},[68,98983,93208],{"class":335},[68,98985,412],{"class":82},[68,98987,711],{"class":335},[68,98989,406],{"class":82},[68,98991,711],{"class":335},[68,98993,677],{"class":82},[68,98995,342],{"class":335},[68,98997,98998],{"class":70,"line":1402},[68,98999,99000],{"class":393},"#使用hstack\n",[68,99002,99003],{"class":70,"line":1408},[68,99004,99005],{"class":335},"np.hstack((aaa,bbb)).shape\n",[68,99007,99008],{"class":70,"line":1422},[68,99009,99010],{"class":393},"#输出：（2，6，6）\n",[14,99012,99014],{"id":99013},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99016,99017],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99019,98849],{},[58,99021,99023],{"className":30579,"code":99022,"language":30581,"meta":63,"style":63},"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",[65,99024,99025,99049,99073,99078,99083,99088],{"__ignoreMap":63},[68,99026,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047],{"class":70,"line":71},[68,99028,93507],{"class":335},[68,99030,381],{"class":331},[68,99032,93203],{"class":335},[68,99034,551],{"class":82},[68,99036,711],{"class":335},[68,99038,856],{"class":82},[68,99040,93208],{"class":335},[68,99042,406],{"class":82},[68,99044,711],{"class":335},[68,99046,626],{"class":82},[68,99048,342],{"class":335},[68,99050,99051,99053,99055,99057,99059,99061,99063,99065,99067,99069,99071],{"class":70,"line":92},[68,99052,98388],{"class":335},[68,99054,381],{"class":331},[68,99056,93203],{"class":335},[68,99058,670],{"class":82},[68,99060,711],{"class":335},[68,99062,975],{"class":82},[68,99064,93208],{"class":335},[68,99066,406],{"class":82},[68,99068,711],{"class":335},[68,99070,626],{"class":82},[68,99072,342],{"class":335},[68,99074,99075],{"class":70,"line":1387},[68,99076,99077],{"class":393},"#vstack 垂直方向进行堆叠\n",[68,99079,99080],{"class":70,"line":1402},[68,99081,99082],{"class":335},"np.vstack((aa,bb))\n",[68,99084,99085],{"class":70,"line":1408},[68,99086,99087],{"class":393},"#与hstack传的参数类似，等价于：\n",[68,99089,99090],{"class":70,"line":1422},[68,99091,99092],{"class":335},"np.vstack([aa,bb])\n",[19,99094,98434],{},[19,99096,99097],{},[48,99098],{"alt":63,"src":99099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99101,98930],{},[58,99103,99105],{"className":30579,"code":99104,"language":30581,"meta":63,"style":63},"#两个三行六列\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",[65,99106,99107,99111,99139,99167,99172,99177],{"__ignoreMap":63},[68,99108,99109],{"class":70,"line":71},[68,99110,98489],{"class":393},[68,99112,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135,99137],{"class":70,"line":92},[68,99114,95722],{"class":335},[68,99116,381],{"class":331},[68,99118,93203],{"class":335},[68,99120,551],{"class":82},[68,99122,711],{"class":335},[68,99124,658],{"class":82},[68,99126,93208],{"class":335},[68,99128,412],{"class":82},[68,99130,711],{"class":335},[68,99132,406],{"class":82},[68,99134,711],{"class":335},[68,99136,677],{"class":82},[68,99138,342],{"class":335},[68,99140,99141,99143,99145,99147,99149,99151,99153,99155,99157,99159,99161,99163,99165],{"class":70,"line":1387},[68,99142,98522],{"class":335},[68,99144,381],{"class":331},[68,99146,93203],{"class":335},[68,99148,670],{"class":82},[68,99150,711],{"class":335},[68,99152,98533],{"class":82},[68,99154,93208],{"class":335},[68,99156,412],{"class":82},[68,99158,711],{"class":335},[68,99160,406],{"class":82},[68,99162,711],{"class":335},[68,99164,677],{"class":82},[68,99166,342],{"class":335},[68,99168,99169],{"class":70,"line":1402},[68,99170,99171],{"class":393},"#使用vstack\n",[68,99173,99174],{"class":70,"line":1408},[68,99175,99176],{"class":335},"np.vstack((aaa,bbb)).shape\n",[68,99178,99179],{"class":70,"line":1422},[68,99180,99181],{"class":393},"#输出：（4，3，6）\n",[14,99183,99185],{"id":99184},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99187,99188],{},"该方法是三维数组特有的方法",[19,99190,99191],{},"也就是说",[19,99193,99194],{},"一维数组拼接方法用：concatenate()",[19,99196,99197],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99199,99200],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99202,99203],{},"四维数组及多维数组只能用concatenate进行拼接",[58,99205,99207],{"className":30579,"code":99206,"language":30581,"meta":63,"style":63},"#两个三行六列\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",[65,99208,99209,99213,99241,99269,99274,99279],{"__ignoreMap":63},[68,99210,99211],{"class":70,"line":71},[68,99212,98489],{"class":393},[68,99214,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237,99239],{"class":70,"line":92},[68,99216,95722],{"class":335},[68,99218,381],{"class":331},[68,99220,93203],{"class":335},[68,99222,551],{"class":82},[68,99224,711],{"class":335},[68,99226,658],{"class":82},[68,99228,93208],{"class":335},[68,99230,412],{"class":82},[68,99232,711],{"class":335},[68,99234,406],{"class":82},[68,99236,711],{"class":335},[68,99238,677],{"class":82},[68,99240,342],{"class":335},[68,99242,99243,99245,99247,99249,99251,99253,99255,99257,99259,99261,99263,99265,99267],{"class":70,"line":1387},[68,99244,98522],{"class":335},[68,99246,381],{"class":331},[68,99248,93203],{"class":335},[68,99250,670],{"class":82},[68,99252,711],{"class":335},[68,99254,98533],{"class":82},[68,99256,93208],{"class":335},[68,99258,412],{"class":82},[68,99260,711],{"class":335},[68,99262,406],{"class":82},[68,99264,711],{"class":335},[68,99266,677],{"class":82},[68,99268,342],{"class":335},[68,99270,99271],{"class":70,"line":1402},[68,99272,99273],{"class":393},"#使用dstack\n",[68,99275,99276],{"class":70,"line":1408},[68,99277,99278],{"class":335},"np.dstack((aaa,bbb)).shape\n",[68,99280,99281],{"class":70,"line":1422},[68,99282,99283],{"class":393},"#结果：（2，3，12）\n",[250,99285,99286],{},"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":63,"searchDepth":92,"depth":92,"links":99288},[99289,99290,99291,99292],{"id":98228,"depth":92,"text":98229},{"id":98842,"depth":92,"text":98843},{"id":99013,"depth":92,"text":99014},{"id":99184,"depth":92,"text":99185},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98220,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99299,"title":99300,"body":99301,"description":257,"extension":258,"meta":99576,"navigation":260,"path":99577,"seo":99578,"stem":99579,"__hash__":99580},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99302,"toc":99574},[99303,99306,99309,99403,99406,99409,99412,99415,99418,99421,99424,99427,99571],[10,99304,99300],{"id":99305},"_7数组转置",[19,99307,99308],{},"使用transpose()函数",[58,99310,99312],{"className":30579,"code":99311,"language":30581,"meta":63,"style":63},"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",[65,99313,99314,99324,99348,99353,99358,99363,99368,99376,99380,99384,99389,99394,99399],{"__ignoreMap":63},[68,99315,99316,99318,99320,99322],{"class":70,"line":71},[68,99317,30593],{"class":331},[68,99319,31581],{"class":335},[68,99321,31584],{"class":331},[68,99323,31587],{"class":335},[68,99325,99326,99328,99330,99332,99334,99336,99338,99340,99342,99344,99346],{"class":70,"line":92},[68,99327,30],{"class":335},[68,99329,381],{"class":331},[68,99331,31918],{"class":335},[68,99333,551],{"class":82},[68,99335,711],{"class":335},[68,99337,856],{"class":82},[68,99339,93208],{"class":335},[68,99341,626],{"class":82},[68,99343,711],{"class":335},[68,99345,406],{"class":82},[68,99347,342],{"class":335},[68,99349,99350],{"class":70,"line":1387},[68,99351,99352],{"class":393},"#二维数组转置\n",[68,99354,99355],{"class":70,"line":1402},[68,99356,99357],{"class":393},"#调用transpose()函数\n",[68,99359,99360],{"class":70,"line":1408},[68,99361,99362],{"class":335},"a.transpose()\n",[68,99364,99365],{"class":70,"line":1422},[68,99366,99367],{"class":393},"#对于二维数组也可以采用.T来实现\n",[68,99369,99370,99373],{"class":70,"line":1428},[68,99371,99372],{"class":335},"a.T",[68,99374,99375],{"class":393},"#与上述代码一样\n",[68,99377,99378],{"class":70,"line":1519},[68,99379,93765],{"class":393},[68,99381,99382],{"class":70,"line":1525},[68,99383,94129],{"class":78},[68,99385,99386],{"class":70,"line":1537},[68,99387,99388],{"class":78},"array([[ 1,  4,  7, 10],\n",[68,99390,99391],{"class":70,"line":1819},[68,99392,99393],{"class":78},"       [ 2,  5,  8, 11],\n",[68,99395,99396],{"class":70,"line":1824},[68,99397,99398],{"class":78},"       [ 3,  6,  9, 12]])\n",[68,99400,99401],{"class":70,"line":1830},[68,99402,94129],{"class":78},[19,99404,99405],{},"也可以使用np.transpose()的形式",[19,99407,99408],{},"#多维数组进行转置 np.transpose()",[19,99410,99411],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99413,99414],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99416,99417],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99419,99420],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99422,99423],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99425,99426],{},"四维及以上的数组也是一样的道理",[58,99428,99430],{"className":30579,"code":99429,"language":30581,"meta":63,"style":63},"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",[65,99431,99432,99460,99465,99470,99475,99493,99498,99530,99535,99540,99545,99566],{"__ignoreMap":63},[68,99433,99434,99436,99438,99440,99442,99444,99446,99448,99450,99452,99454,99456,99458],{"class":70,"line":71},[68,99435,1153],{"class":335},[68,99437,381],{"class":331},[68,99439,93203],{"class":335},[68,99441,551],{"class":82},[68,99443,711],{"class":335},[68,99445,658],{"class":82},[68,99447,93208],{"class":335},[68,99449,406],{"class":82},[68,99451,711],{"class":335},[68,99453,677],{"class":82},[68,99455,711],{"class":335},[68,99457,412],{"class":82},[68,99459,342],{"class":335},[68,99461,99462],{"class":70,"line":92},[68,99463,99464],{"class":335},"x.shape\n",[68,99466,99467],{"class":70,"line":1387},[68,99468,99469],{"class":393},"#结果：（3,6,2）\n",[68,99471,99472],{"class":70,"line":1402},[68,99473,99474],{"class":393},"#使用np.transpose()进行转置 变为(2,6,3)\n",[68,99476,99477,99480,99482,99484,99486,99488,99490],{"class":70,"line":1408},[68,99478,99479],{"class":335},"np.transpose(x,(",[68,99481,412],{"class":82},[68,99483,711],{"class":335},[68,99485,551],{"class":82},[68,99487,711],{"class":335},[68,99489,525],{"class":82},[68,99491,99492],{"class":335},")).shape\n",[68,99494,99495],{"class":70,"line":1422},[68,99496,99497],{"class":393},"#结果：(2,6,3)\n",[68,99499,99500,99502,99504,99506,99508,99510,99512,99514,99516,99518,99520,99522,99524,99526,99528],{"class":70,"line":1428},[68,99501,98707],{"class":335},[68,99503,381],{"class":331},[68,99505,93203],{"class":335},[68,99507,551],{"class":82},[68,99509,711],{"class":335},[68,99511,658],{"class":82},[68,99513,93208],{"class":335},[68,99515,406],{"class":82},[68,99517,711],{"class":335},[68,99519,412],{"class":82},[68,99521,711],{"class":335},[68,99523,551],{"class":82},[68,99525,711],{"class":335},[68,99527,677],{"class":82},[68,99529,342],{"class":335},[68,99531,99532],{"class":70,"line":1519},[68,99533,99534],{"class":335},"aaaa.shape\n",[68,99536,99537],{"class":70,"line":1525},[68,99538,99539],{"class":393},"#结果：（3，2，1，6）\n",[68,99541,99542],{"class":70,"line":1537},[68,99543,99544],{"class":393},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[68,99546,99547,99550,99552,99554,99556,99558,99560,99562,99564],{"class":70,"line":1819},[68,99548,99549],{"class":335},"np.transpose(aaaa,(",[68,99551,551],{"class":82},[68,99553,711],{"class":335},[68,99555,412],{"class":82},[68,99557,711],{"class":335},[68,99559,525],{"class":82},[68,99561,711],{"class":335},[68,99563,406],{"class":82},[68,99565,99492],{"class":335},[68,99567,99568],{"class":70,"line":1824},[68,99569,99570],{"class":393},"#结果：(2,1,3,6)\n",[250,99572,99573],{},"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":63,"searchDepth":92,"depth":92,"links":99575},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99300,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99582,"title":99583,"body":99584,"description":257,"extension":258,"meta":100318,"navigation":260,"path":100319,"seo":100320,"stem":100321,"__hash__":100322},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99585,"toc":100316},[99586,99589,99592,99595,99598,99601,99604,99607,99610,99719,99722,99725,100313],[10,99587,99583],{"id":99588},"_8数组分割",[19,99590,99591],{},"split分割",[19,99593,99594],{},"numpy.split(ary,indics_or_sections,axis)",[19,99596,99597],{},"解释：",[19,99599,99600],{},"ary:被分割的数组",[19,99602,99603],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99605,99606],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99608,99609],{},"①一维数组的分割",[58,99611,99613],{"className":30579,"code":99612,"language":30581,"meta":63,"style":63},"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",[65,99614,99615,99631,99636,99645,99649,99654,99662,99666,99671,99676,99689,99693,99698,99710,99714],{"__ignoreMap":63},[68,99616,99617,99619,99621,99623,99625,99627,99629],{"class":70,"line":71},[68,99618,30],{"class":335},[68,99620,381],{"class":331},[68,99622,93203],{"class":335},[68,99624,551],{"class":82},[68,99626,711],{"class":335},[68,99628,753],{"class":82},[68,99630,342],{"class":335},[68,99632,99633],{"class":70,"line":92},[68,99634,99635],{"class":393},"#如果传入整数，必须能够平分，否则会报错\n",[68,99637,99638,99641,99643],{"class":70,"line":1387},[68,99639,99640],{"class":335},"np.split(a,",[68,99642,412],{"class":82},[68,99644,342],{"class":335},[68,99646,99647],{"class":70,"line":1402},[68,99648,93765],{"class":393},[68,99650,99651],{"class":70,"line":1408},[68,99652,99653],{"class":393},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[68,99655,99656,99658,99660],{"class":70,"line":1422},[68,99657,99640],{"class":335},[68,99659,626],{"class":82},[68,99661,342],{"class":335},[68,99663,99664],{"class":70,"line":1428},[68,99665,93765],{"class":393},[68,99667,99668],{"class":70,"line":1519},[68,99669,99670],{"class":393},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[68,99672,99673],{"class":70,"line":1525},[68,99674,99675],{"class":393},"#传入数组\n",[68,99677,99678,99681,99683,99685,99687],{"class":70,"line":1537},[68,99679,99680],{"class":335},"np.split(a,[",[68,99682,406],{"class":82},[68,99684,711],{"class":335},[68,99686,652],{"class":82},[68,99688,4863],{"class":335},[68,99690,99691],{"class":70,"line":1819},[68,99692,93765],{"class":393},[68,99694,99695],{"class":70,"line":1824},[68,99696,99697],{"class":393},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[68,99699,99700,99702,99704,99706,99708],{"class":70,"line":1830},[68,99701,99680],{"class":335},[68,99703,652],{"class":82},[68,99705,711],{"class":335},[68,99707,702],{"class":82},[68,99709,4863],{"class":335},[68,99711,99712],{"class":70,"line":1835},[68,99713,93765],{"class":393},[68,99715,99716],{"class":70,"line":1849},[68,99717,99718],{"class":393},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99720,99721],{},"②二维数组的分割",[19,99723,99724],{},"使用split()",[58,99726,99728],{"className":30579,"code":99727,"language":30581,"meta":63,"style":63},"#二维数组分割\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",[65,99729,99730,99735,99759,99764,99773,99777,99781,99786,99791,99796,99801,99806,99811,99816,99820,99833,99837,99841,99845,99849,99853,99858,99863,99868,99872,99877,99893,99897,99901,99906,99911,99916,99921,99926,99931,99936,99941,99946,99951,99956,99961,99966,99971,99976,99981,99986,99991,99995,99999,100019,100023,100027,100032,100037,100042,100047,100052,100057,100062,100067,100072,100077,100082,100087,100092,100097,100102,100107,100112,100117,100121,100126,100135,100139,100143,100147,100151,100155,100159,100163,100167,100171,100180,100184,100188,100192,100196,100200,100204,100208,100212,100216,100220,100224,100228,100232,100236,100240,100244,100248,100252,100256,100260,100264,100277,100281,100285,100289,100293,100297,100301,100305,100309],{"__ignoreMap":63},[68,99731,99732],{"class":70,"line":71},[68,99733,99734],{"class":393},"#二维数组分割\n",[68,99736,99737,99739,99741,99743,99745,99747,99749,99751,99753,99755,99757],{"class":70,"line":92},[68,99738,93507],{"class":335},[68,99740,381],{"class":331},[68,99742,93203],{"class":335},[68,99744,551],{"class":82},[68,99746,711],{"class":335},[68,99748,658],{"class":82},[68,99750,93208],{"class":335},[68,99752,677],{"class":82},[68,99754,711],{"class":335},[68,99756,677],{"class":82},[68,99758,342],{"class":335},[68,99760,99761],{"class":70,"line":1387},[68,99762,99763],{"class":393},"#默认axis=0  传入整数平均分,按行来的\n",[68,99765,99766,99769,99771],{"class":70,"line":1402},[68,99767,99768],{"class":335},"np.split(aa,",[68,99770,406],{"class":82},[68,99772,342],{"class":335},[68,99774,99775],{"class":70,"line":1408},[68,99776,95965],{"class":393},[68,99778,99779],{"class":70,"line":1422},[68,99780,94129],{"class":78},[68,99782,99783],{"class":70,"line":1428},[68,99784,99785],{"class":78},"[array([[ 1,  2,  3,  4,  5,  6],\n",[68,99787,99788],{"class":70,"line":1519},[68,99789,99790],{"class":78},"        [ 7,  8,  9, 10, 11, 12]]),\n",[68,99792,99793],{"class":70,"line":1525},[68,99794,99795],{"class":78}," array([[13, 14, 15, 16, 17, 18],\n",[68,99797,99798],{"class":70,"line":1537},[68,99799,99800],{"class":78},"        [19, 20, 21, 22, 23, 24]]),\n",[68,99802,99803],{"class":70,"line":1819},[68,99804,99805],{"class":78}," array([[25, 26, 27, 28, 29, 30],\n",[68,99807,99808],{"class":70,"line":1824},[68,99809,99810],{"class":78},"        [31, 32, 33, 34, 35, 36]])]\n",[68,99812,99813],{"class":70,"line":1830},[68,99814,99815],{"class":78}," '''\n",[68,99817,99818],{"class":70,"line":1835},[68,99819,99675],{"class":393},[68,99821,99822,99825,99827,99829,99831],{"class":70,"line":1849},[68,99823,99824],{"class":335},"np.split(aa,[",[68,99826,412],{"class":82},[68,99828,711],{"class":335},[68,99830,652],{"class":82},[68,99832,4863],{"class":335},[68,99834,99835],{"class":70,"line":1854},[68,99836,95965],{"class":393},[68,99838,99839],{"class":70,"line":1860},[68,99840,94129],{"class":78},[68,99842,99843],{"class":70,"line":1881},[68,99844,99785],{"class":78},[68,99846,99847],{"class":70,"line":1886},[68,99848,99790],{"class":78},[68,99850,99851],{"class":70,"line":1900},[68,99852,99795],{"class":78},[68,99854,99855],{"class":70,"line":1905},[68,99856,99857],{"class":78},"        [19, 20, 21, 22, 23, 24],\n",[68,99859,99860],{"class":70,"line":1934},[68,99861,99862],{"class":78},"        [25, 26, 27, 28, 29, 30]]),\n",[68,99864,99865],{"class":70,"line":1939},[68,99866,99867],{"class":78}," array([[31, 32, 33, 34, 35, 36]])]\n",[68,99869,99870],{"class":70,"line":1956},[68,99871,94129],{"class":78},[68,99873,99874],{"class":70,"line":1961},[68,99875,99876],{"class":393},"#axis=1 按照列来分\n",[68,99878,99879,99881,99883,99885,99887,99889,99891],{"class":70,"line":1966},[68,99880,99768],{"class":335},[68,99882,406],{"class":82},[68,99884,711],{"class":335},[68,99886,47715],{"class":5421},[68,99888,381],{"class":331},[68,99890,551],{"class":82},[68,99892,342],{"class":335},[68,99894,99895],{"class":70,"line":1971},[68,99896,95965],{"class":393},[68,99898,99899],{"class":70,"line":1985},[68,99900,94129],{"class":78},[68,99902,99903],{"class":70,"line":1990},[68,99904,99905],{"class":78},"[array([[ 1,  2],\n",[68,99907,99908],{"class":70,"line":2783},[68,99909,99910],{"class":78},"        [ 7,  8],\n",[68,99912,99913],{"class":70,"line":2797},[68,99914,99915],{"class":78},"        [13, 14],\n",[68,99917,99918],{"class":70,"line":2805},[68,99919,99920],{"class":78},"        [19, 20],\n",[68,99922,99923],{"class":70,"line":2810},[68,99924,99925],{"class":78},"        [25, 26],\n",[68,99927,99928],{"class":70,"line":2816},[68,99929,99930],{"class":78},"        [31, 32]]),\n",[68,99932,99933],{"class":70,"line":2822},[68,99934,99935],{"class":78}," array([[ 3,  4],\n",[68,99937,99938],{"class":70,"line":2827},[68,99939,99940],{"class":78},"        [ 9, 10],\n",[68,99942,99943],{"class":70,"line":8153},[68,99944,99945],{"class":78},"        [15, 16],\n",[68,99947,99948],{"class":70,"line":8177},[68,99949,99950],{"class":78},"        [21, 22],\n",[68,99952,99953],{"class":70,"line":8182},[68,99954,99955],{"class":78},"        [27, 28],\n",[68,99957,99958],{"class":70,"line":8188},[68,99959,99960],{"class":78},"        [33, 34]]),\n",[68,99962,99963],{"class":70,"line":8215},[68,99964,99965],{"class":78}," array([[ 5,  6],\n",[68,99967,99968],{"class":70,"line":8220},[68,99969,99970],{"class":78},"        [11, 12],\n",[68,99972,99973],{"class":70,"line":8226},[68,99974,99975],{"class":78},"        [17, 18],\n",[68,99977,99978],{"class":70,"line":8238},[68,99979,99980],{"class":78},"        [23, 24],\n",[68,99982,99983],{"class":70,"line":8250},[68,99984,99985],{"class":78},"        [29, 30],\n",[68,99987,99988],{"class":70,"line":8262},[68,99989,99990],{"class":78},"        [35, 36]])]\n",[68,99992,99993],{"class":70,"line":9921},[68,99994,99815],{"class":78},[68,99996,99997],{"class":70,"line":9946},[68,99998,99675],{"class":393},[68,100000,100001,100003,100005,100007,100009,100011,100013,100015,100017],{"class":70,"line":9969},[68,100002,99824],{"class":335},[68,100004,551],{"class":82},[68,100006,711],{"class":335},[68,100008,412],{"class":82},[68,100010,41810],{"class":335},[68,100012,47715],{"class":5421},[68,100014,381],{"class":331},[68,100016,551],{"class":82},[68,100018,342],{"class":335},[68,100020,100021],{"class":70,"line":9993},[68,100022,93765],{"class":393},[68,100024,100025],{"class":70,"line":9998},[68,100026,94129],{"class":78},[68,100028,100029],{"class":70,"line":10003},[68,100030,100031],{"class":78},"[array([[ 1],\n",[68,100033,100034],{"class":70,"line":10008},[68,100035,100036],{"class":78},"        [ 7],\n",[68,100038,100039],{"class":70,"line":10017},[68,100040,100041],{"class":78},"        [13],\n",[68,100043,100044],{"class":70,"line":10022},[68,100045,100046],{"class":78},"        [19],\n",[68,100048,100049],{"class":70,"line":10028},[68,100050,100051],{"class":78},"        [25],\n",[68,100053,100054],{"class":70,"line":10049},[68,100055,100056],{"class":78},"        [31]]),\n",[68,100058,100059],{"class":70,"line":10055},[68,100060,100061],{"class":78}," array([[ 2],\n",[68,100063,100064],{"class":70,"line":10069},[68,100065,100066],{"class":78},"        [ 8],\n",[68,100068,100069],{"class":70,"line":10075},[68,100070,100071],{"class":78},"        [14],\n",[68,100073,100074],{"class":70,"line":10102},[68,100075,100076],{"class":78},"        [20],\n",[68,100078,100079],{"class":70,"line":10111},[68,100080,100081],{"class":78},"        [26],\n",[68,100083,100084],{"class":70,"line":10117},[68,100085,100086],{"class":78},"        [32]]),\n",[68,100088,100089],{"class":70,"line":10125},[68,100090,100091],{"class":78}," array([[ 3,  4,  5,  6],\n",[68,100093,100094],{"class":70,"line":10130},[68,100095,100096],{"class":78},"        [ 9, 10, 11, 12],\n",[68,100098,100099],{"class":70,"line":16809},[68,100100,100101],{"class":78},"        [15, 16, 17, 18],\n",[68,100103,100104],{"class":70,"line":16815},[68,100105,100106],{"class":78},"        [21, 22, 23, 24],\n",[68,100108,100109],{"class":70,"line":16838},[68,100110,100111],{"class":78},"        [27, 28, 29, 30],\n",[68,100113,100114],{"class":70,"line":16844},[68,100115,100116],{"class":78},"        [33, 34, 35, 36]])]\n",[68,100118,100119],{"class":70,"line":16867},[68,100120,94129],{"class":78},[68,100122,100123],{"class":70,"line":16881},[68,100124,100125],{"class":393},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[68,100127,100128,100131,100133],{"class":70,"line":16901},[68,100129,100130],{"class":335},"np.vsplit(aa,",[68,100132,406],{"class":82},[68,100134,342],{"class":335},[68,100136,100137],{"class":70,"line":16907},[68,100138,93765],{"class":393},[68,100140,100141],{"class":70,"line":16918},[68,100142,94129],{"class":78},[68,100144,100145],{"class":70,"line":16941},[68,100146,99785],{"class":78},[68,100148,100149],{"class":70,"line":16963},[68,100150,99790],{"class":78},[68,100152,100153],{"class":70,"line":16968},[68,100154,99795],{"class":78},[68,100156,100157],{"class":70,"line":16974},[68,100158,99800],{"class":78},[68,100160,100161],{"class":70,"line":16988},[68,100162,99805],{"class":78},[68,100164,100165],{"class":70,"line":17001},[68,100166,99810],{"class":78},[68,100168,100169],{"class":70,"line":17006},[68,100170,94129],{"class":78},[68,100172,100173,100176,100178],{"class":70,"line":17020},[68,100174,100175],{"class":335},"np.hsplit(aa,",[68,100177,406],{"class":82},[68,100179,342],{"class":335},[68,100181,100182],{"class":70,"line":17025},[68,100183,93765],{"class":393},[68,100185,100186],{"class":70,"line":17031},[68,100187,94129],{"class":78},[68,100189,100190],{"class":70,"line":17036},[68,100191,99905],{"class":78},[68,100193,100194],{"class":70,"line":17050},[68,100195,99910],{"class":78},[68,100197,100198],{"class":70,"line":17055},[68,100199,99915],{"class":78},[68,100201,100202],{"class":70,"line":17060},[68,100203,99920],{"class":78},[68,100205,100206],{"class":70,"line":17074},[68,100207,99925],{"class":78},[68,100209,100210],{"class":70,"line":17086},[68,100211,99930],{"class":78},[68,100213,100214],{"class":70,"line":17091},[68,100215,99935],{"class":78},[68,100217,100218],{"class":70,"line":17104},[68,100219,99940],{"class":78},[68,100221,100222],{"class":70,"line":17109},[68,100223,99945],{"class":78},[68,100225,100226],{"class":70,"line":17114},[68,100227,99950],{"class":78},[68,100229,100230],{"class":70,"line":17119},[68,100231,99955],{"class":78},[68,100233,100234],{"class":70,"line":17132},[68,100235,99960],{"class":78},[68,100237,100238],{"class":70,"line":17137},[68,100239,99965],{"class":78},[68,100241,100242],{"class":70,"line":32834},[68,100243,99970],{"class":78},[68,100245,100246],{"class":70,"line":32840},[68,100247,99975],{"class":78},[68,100249,100250],{"class":70,"line":32846},[68,100251,99980],{"class":78},[68,100253,100254],{"class":70,"line":32852},[68,100255,99985],{"class":78},[68,100257,100258],{"class":70,"line":32858},[68,100259,99990],{"class":78},[68,100261,100262],{"class":70,"line":32869},[68,100263,94129],{"class":78},[68,100265,100266,100269,100271,100273,100275],{"class":70,"line":32875},[68,100267,100268],{"class":335},"np.vsplit(aa,[",[68,100270,412],{"class":82},[68,100272,711],{"class":335},[68,100274,652],{"class":82},[68,100276,4863],{"class":335},[68,100278,100279],{"class":70,"line":32895},[68,100280,93765],{"class":393},[68,100282,100283],{"class":70,"line":32901},[68,100284,94129],{"class":78},[68,100286,100287],{"class":70,"line":32912},[68,100288,99785],{"class":78},[68,100290,100291],{"class":70,"line":32918},[68,100292,99790],{"class":78},[68,100294,100295],{"class":70,"line":32924},[68,100296,99795],{"class":78},[68,100298,100299],{"class":70,"line":32930},[68,100300,99857],{"class":78},[68,100302,100303],{"class":70,"line":32936},[68,100304,99862],{"class":78},[68,100306,100307],{"class":70,"line":32942},[68,100308,99867],{"class":78},[68,100310,100311],{"class":70,"line":32948},[68,100312,99815],{"class":78},[250,100314,100315],{},"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":63,"searchDepth":92,"depth":92,"links":100317},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99583,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100324,"title":100325,"body":100326,"description":257,"extension":258,"meta":100820,"navigation":260,"path":100821,"seo":100822,"stem":100823,"__hash__":100824},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100327,"toc":100811},[100328,100331,100334,100359,100363,100422,100474,100478,100480,100516,100570,100572,100610,100681,100685,100690,100694,100697,100730,100733,100737,100740,100743,100746,100749,100754,100758,100761,100764,100767,100770,100775,100779,100784,100787,100808],[10,100329,100325],{"id":100330},"_9数学函数",[19,100332,100333],{},"补充回顾：python的列表推导式",[58,100335,100337],{"className":30579,"code":100336,"language":30581,"meta":63,"style":63},"[1\u002Fi for i in a]\n",[65,100338,100339],{"__ignoreMap":63},[68,100340,100341,100343,100345,100347,100350,100352,100354,100356],{"class":70,"line":71},[68,100342,1223],{"class":335},[68,100344,551],{"class":82},[68,100346,917],{"class":331},[68,100348,100349],{"class":335},"i ",[68,100351,3231],{"class":331},[68,100353,9643],{"class":335},[68,100355,26247],{"class":331},[68,100357,100358],{"class":335}," a]\n",[14,100360,100362],{"id":100361},"_91-求倒数","9.1 求倒数",[58,100364,100366],{"className":30579,"code":100365,"language":30581,"meta":63,"style":63},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[65,100367,100368,100373,100401,100413],{"__ignoreMap":63},[68,100369,100370],{"class":70,"line":71},[68,100371,100372],{"class":393},"#数组求倒数\n",[68,100374,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397,100399],{"class":70,"line":92},[68,100376,30],{"class":335},[68,100378,381],{"class":331},[68,100380,1223],{"class":335},[68,100382,551],{"class":82},[68,100384,711],{"class":335},[68,100386,412],{"class":82},[68,100388,711],{"class":335},[68,100390,406],{"class":82},[68,100392,711],{"class":335},[68,100394,626],{"class":82},[68,100396,711],{"class":335},[68,100398,652],{"class":82},[68,100400,33447],{"class":335},[68,100402,100403,100405,100407,100410],{"class":70,"line":1387},[68,100404,596],{"class":335},[68,100406,381],{"class":331},[68,100408,100409],{"class":335},"np.array(a)",[68,100411,100412],{"class":393},"#将列表转换为数组\n",[68,100414,100415,100417,100419],{"class":70,"line":1402},[68,100416,551],{"class":82},[68,100418,917],{"class":331},[68,100420,100421],{"class":335},"b\n",[58,100423,100425],{"className":30579,"code":100424,"language":30581,"meta":63,"style":63},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[65,100426,100427,100455,100464,100469],{"__ignoreMap":63},[68,100428,100429,100431,100433,100435,100437,100439,100441,100443,100445,100447,100449,100451,100453],{"class":70,"line":71},[68,100430,30],{"class":335},[68,100432,381],{"class":331},[68,100434,1223],{"class":335},[68,100436,551],{"class":82},[68,100438,711],{"class":335},[68,100440,412],{"class":82},[68,100442,711],{"class":335},[68,100444,406],{"class":82},[68,100446,711],{"class":335},[68,100448,626],{"class":82},[68,100450,711],{"class":335},[68,100452,652],{"class":82},[68,100454,33447],{"class":335},[68,100456,100457,100459,100461],{"class":70,"line":92},[68,100458,596],{"class":335},[68,100460,381],{"class":331},[68,100462,100463],{"class":335},"np.array(a)\n",[68,100465,100466],{"class":70,"line":1387},[68,100467,100468],{"class":393},"#调用numpy中的函数reciprocal()\n",[68,100470,100471],{"class":70,"line":1402},[68,100472,100473],{"class":335},"np.reciprocal(b)\n",[14,100475,100477],{"id":100476},"_92-求平方","9.2 求平方",[19,100479,94731],{},[58,100481,100483],{"className":30579,"code":100482,"language":30581,"meta":63,"style":63},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[65,100484,100485,100490,100495,100511],{"__ignoreMap":63},[68,100486,100487],{"class":70,"line":71},[68,100488,100489],{"class":393},"#square()，求平方\n",[68,100491,100492],{"class":70,"line":92},[68,100493,100494],{"class":393},"#一维数组\n",[68,100496,100497,100499,100501,100503,100505,100507,100509],{"class":70,"line":1387},[68,100498,30],{"class":335},[68,100500,381],{"class":331},[68,100502,93203],{"class":335},[68,100504,551],{"class":82},[68,100506,711],{"class":335},[68,100508,779],{"class":82},[68,100510,342],{"class":335},[68,100512,100513],{"class":70,"line":1402},[68,100514,100515],{"class":335},"np.square(a)\n",[58,100517,100519],{"className":30579,"code":100518,"language":30581,"meta":63,"style":63},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[65,100520,100521,100526,100531,100552],{"__ignoreMap":63},[68,100522,100523],{"class":70,"line":71},[68,100524,100525],{"class":393},"#或者通过循环遍历的形式来计算\n",[68,100527,100528],{"class":70,"line":92},[68,100529,100530],{"class":393},"#这是一个列表\n",[68,100532,100533,100536,100538,100540,100542,100544,100546,100549],{"class":70,"line":1387},[68,100534,100535],{"class":335},"[i",[68,100537,788],{"class":331},[68,100539,100349],{"class":335},[68,100541,3231],{"class":331},[68,100543,9643],{"class":335},[68,100545,26247],{"class":331},[68,100547,100548],{"class":335}," a]",[68,100550,100551],{"class":393},"#这个求完之后在数列当中\n",[68,100553,100554,100557,100559,100561,100563,100565,100567],{"class":70,"line":1402},[68,100555,100556],{"class":335},"np.array([i",[68,100558,788],{"class":331},[68,100560,100349],{"class":335},[68,100562,3231],{"class":331},[68,100564,9643],{"class":335},[68,100566,26247],{"class":331},[68,100568,100569],{"class":335}," a])\n",[19,100571,93492],{},[58,100573,100575],{"className":30579,"code":100574,"language":30581,"meta":63,"style":63},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[65,100576,100577,100581,100605],{"__ignoreMap":63},[68,100578,100579],{"class":70,"line":71},[68,100580,93502],{"class":393},[68,100582,100583,100585,100587,100589,100591,100593,100595,100597,100599,100601,100603],{"class":70,"line":92},[68,100584,93507],{"class":335},[68,100586,381],{"class":331},[68,100588,93203],{"class":335},[68,100590,551],{"class":82},[68,100592,711],{"class":335},[68,100594,856],{"class":82},[68,100596,93208],{"class":335},[68,100598,626],{"class":82},[68,100600,711],{"class":335},[68,100602,406],{"class":82},[68,100604,342],{"class":335},[68,100606,100607],{"class":70,"line":1387},[68,100608,100609],{"class":335},"np.square(aa)\n",[58,100611,100613],{"className":30579,"code":100612,"language":30581,"meta":63,"style":63},"#传统的方式\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",[65,100614,100615,100620,100629,100645,100661,100676],{"__ignoreMap":63},[68,100616,100617],{"class":70,"line":71},[68,100618,100619],{"class":393},"#传统的方式\n",[68,100621,100622,100624,100626],{"class":70,"line":92},[68,100623,98388],{"class":335},[68,100625,381],{"class":331},[68,100627,100628],{"class":335},"np.empty_like(aa)\n",[68,100630,100631,100633,100635,100637,100639,100641,100643],{"class":70,"line":1387},[68,100632,3231],{"class":331},[68,100634,9643],{"class":335},[68,100636,26247],{"class":331},[68,100638,32644],{"class":82},[68,100640,336],{"class":335},[68,100642,626],{"class":82},[68,100644,30987],{"class":335},[68,100646,100647,100649,100651,100653,100655,100657,100659],{"class":70,"line":1402},[68,100648,3407],{"class":331},[68,100650,9705],{"class":335},[68,100652,26247],{"class":331},[68,100654,32644],{"class":82},[68,100656,336],{"class":335},[68,100658,406],{"class":82},[68,100660,30987],{"class":335},[68,100662,100663,100666,100668,100671,100673],{"class":70,"line":1408},[68,100664,100665],{"class":335},"        bb[i,j]",[68,100667,381],{"class":331},[68,100669,100670],{"class":335},"aa[i,j]",[68,100672,788],{"class":331},[68,100674,100675],{"class":335},"aa[i,j]\n",[68,100677,100678],{"class":70,"line":1422},[68,100679,100680],{"class":335},"bb\n",[14,100682,100684],{"id":100683},"_93-求各元素的符号","9.3 求各元素的符号",[19,100686,100687],{},[48,100688],{"alt":63,"src":100689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100691,100693],{"id":100692},"_94-modf函数","9.4 modf函数",[19,100695,100696],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[58,100698,100700],{"className":30579,"code":100699,"language":30581,"meta":63,"style":63},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[65,100701,100702,100725],{"__ignoreMap":63},[68,100703,100704,100706,100708,100710,100712,100714,100716,100718,100720,100723],{"class":70,"line":71},[68,100705,30],{"class":335},[68,100707,381],{"class":331},[68,100709,93203],{"class":335},[68,100711,865],{"class":331},[68,100713,779],{"class":82},[68,100715,711],{"class":335},[68,100717,779],{"class":82},[68,100719,711],{"class":335},[68,100721,100722],{"class":82},"0.3",[68,100724,342],{"class":335},[68,100726,100727],{"class":70,"line":92},[68,100728,100729],{"class":335},"np.modf(a)\n",[19,100731,100732],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100734,100736],{"id":100735},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100738,100739],{},"np.cell()",[19,100741,100742],{},"np.floor()",[19,100744,100745],{},"np.rint()",[19,100747,100748],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100750,100751],{},[48,100752],{"alt":63,"src":100753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100755,100757],{"id":100756},"_96-around函数","9.6 around()函数",[19,100759,100760],{},"around()函数也可以实现对数的小数位数进行操作",[19,100762,100763],{},"其中的参数：",[19,100765,100766],{},"1.要传的数组",[19,100768,100769],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100771,100772],{},[48,100773],{"alt":63,"src":100774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100776,100778],{"id":100777},"_97-三角函数","9.7 三角函数",[19,100780,100781],{},[48,100782],{"alt":63,"src":100783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100785,100786],{},"引入图像模块非常重要",[58,100788,100790],{"className":30579,"code":100789,"language":30581,"meta":63,"style":63},"from matplotlib import pyplot as plt\n",[65,100791,100792],{"__ignoreMap":63},[68,100793,100794,100796,100799,100801,100804,100806],{"class":70,"line":71},[68,100795,30938],{"class":331},[68,100797,100798],{"class":335}," matplotlib ",[68,100800,30593],{"class":331},[68,100802,100803],{"class":335}," pyplot ",[68,100805,31584],{"class":331},[68,100807,31638],{"class":335},[250,100809,100810],{},"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":63,"searchDepth":92,"depth":92,"links":100812},[100813,100814,100815,100816,100817,100818,100819],{"id":100361,"depth":92,"text":100362},{"id":100476,"depth":92,"text":100477},{"id":100683,"depth":92,"text":100684},{"id":100692,"depth":92,"text":100693},{"id":100735,"depth":92,"text":100736},{"id":100756,"depth":92,"text":100757},{"id":100777,"depth":92,"text":100778},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100325,"description":257},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100826,"title":100827,"body":100828,"description":257,"extension":258,"meta":100832,"navigation":260,"path":100833,"seo":100834,"stem":100835,"__hash__":100836},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100829,"toc":100830},[],{"title":63,"searchDepth":92,"depth":92,"links":100831},[],{"category":50621},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100827,"description":257},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100838,"title":100839,"body":100840,"description":63,"extension":258,"meta":102847,"navigation":260,"path":102848,"seo":102849,"stem":102850,"__hash__":102851},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100841,"toc":102823},[100842,100845,100849,100852,100855,100861,100864,100887,100890,100924,100927,100968,100972,100975,101068,101071,101114,101117,101134,101137,101151,101154,101157,101202,101205,101242,101246,101249,101255,101260,101280,101284,101287,101353,101356,101374,101378,101381,101410,101420,101426,101430,101433,101439,101450,101454,101457,101487,101490,101770,101773,101776,101787,101790,101793,101815,101822,101825,101843,101846,101849,101863,101871,101874,101900,101906,101909,101912,101922,101934,101954,101963,101983,101993,102017,102030,102044,102049,102090,102107,102132,102144,102164,102170,102215,102234,102251,102264,102280,102287,102299,102308,102343,102364,102389,102402,102426,102441,102466,102469,102490,102499,102502,102513,102517,102520,102526,102538,102545,102549,102552,102564,102567,102581,102584,102594,102604,102607,102647,102650,102654,102660,102663,102677,102681,102684,102717,102721,102724,102747,102755,102758,102764,102770,102773,102776,102804,102808,102811,102817,102820],[10,100843,100839],{"id":100844},"_1环境安装与第一个-mujoco-程序",[14,100846,100848],{"id":100847},"_1目标说明","1.目标说明",[19,100850,100851],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100853,100854],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[58,100856,100859],{"className":100857,"code":100858,"language":5393,"meta":63},[5391],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[65,100860,100858],{"__ignoreMap":63},[19,100862,100863],{},"需要掌握:",[23,100865,100866,100869,100872,100877,100882],{},[26,100867,100868],{},"Fedora 44 下 MuJoCo 的系统依赖",[26,100870,100871],{},"Python 虚拟环境创建",[26,100873,100874],{},[65,100875,100876],{},"mujoco.MjModel",[26,100878,100879],{},[65,100880,100881],{},"mujoco.MjData",[26,100883,100884],{},[65,100885,100886],{},"mujoco.mj_step(model, data)",[19,100888,100889],{},"MuJoCo 中最重要的两个对象:",[471,100891,100892,100902],{},[474,100893,100894],{},[477,100895,100896,100899],{},[480,100897,100898],{"align":23941},"对象",[480,100900,100901],{"align":23941},"含义",[518,100903,100904,100914],{},[477,100905,100906,100911],{},[523,100907,100908],{"align":23941},[65,100909,100910],{},"MjModel",[523,100912,100913],{"align":23941},"模型结构，来自 XML，基本不随时间变化",[477,100915,100916,100921],{},[523,100917,100918],{"align":23941},[65,100919,100920],{},"MjData",[523,100922,100923],{"align":23941},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100925,100926],{},"可以先用一个类比理解：",[471,100928,100929,100939],{},[474,100930,100931],{},[477,100932,100933,100936],{},[480,100934,100935],{"align":23941},"类比",[480,100937,100938],{"align":23941},"MuJoCo 对象",[518,100940,100941,100950,100959],{},[477,100942,100943,100946],{},[523,100944,100945],{"align":23941},"游戏地图和角色配置",[523,100947,100948],{"align":23941},[65,100949,100910],{},[477,100951,100952,100955],{},[523,100953,100954],{"align":23941},"游戏运行到当前帧的状态",[523,100956,100957],{"align":23941},[65,100958,100920],{},[477,100960,100961,100964],{},[523,100962,100963],{"align":23941},"前进一帧",[523,100965,100966],{"align":23941},[65,100967,100886],{},[14,100969,100971],{"id":100970},"_2环境与依赖安装","2.环境与依赖安装",[19,100973,100974],{},"Fedora 44 系统依赖:",[58,100976,100978],{"className":24027,"code":100977,"language":24029,"meta":63,"style":63},"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",[65,100979,100980,100992,101005,101018,101028,101038,101057],{"__ignoreMap":63},[68,100981,100982,100984,100986,100988,100990],{"class":70,"line":71},[68,100983,24780],{"class":74},[68,100985,26519],{"class":78},[68,100987,24039],{"class":78},[68,100989,26604],{"class":82},[68,100991,24882],{"class":82},[68,100993,100994,100997,101000,101003],{"class":70,"line":92},[68,100995,100996],{"class":78},"  python3",[68,100998,100999],{"class":78}," python3-pip",[68,101001,101002],{"class":78}," python3-virtualenv",[68,101004,24882],{"class":82},[68,101006,101007,101010,101013,101016],{"class":70,"line":1387},[68,101008,101009],{"class":78},"  mesa-libGL",[68,101011,101012],{"class":78}," mesa-libGLU",[68,101014,101015],{"class":78}," mesa-dri-drivers",[68,101017,24882],{"class":82},[68,101019,101020,101023,101026],{"class":70,"line":1402},[68,101021,101022],{"class":78},"  libglvnd-glx",[68,101024,101025],{"class":78}," libglvnd-opengl",[68,101027,24882],{"class":82},[68,101029,101030,101033,101036],{"class":70,"line":1408},[68,101031,101032],{"class":78},"  glfw",[68,101034,101035],{"class":78}," glfw-devel",[68,101037,24882],{"class":82},[68,101039,101040,101043,101046,101049,101052,101055],{"class":70,"line":1422},[68,101041,101042],{"class":78},"  libX11",[68,101044,101045],{"class":78}," libXcursor",[68,101047,101048],{"class":78}," libXi",[68,101050,101051],{"class":78}," libXinerama",[68,101053,101054],{"class":78}," libXrandr",[68,101056,24882],{"class":82},[68,101058,101059,101062,101065],{"class":70,"line":1428},[68,101060,101061],{"class":78},"  gcc",[68,101063,101064],{"class":78}," gcc-c++",[68,101066,101067],{"class":78}," make\n",[19,101069,101070],{},"创建 Python 环境:",[58,101072,101074],{"className":24027,"code":101073,"language":24029,"meta":63,"style":63},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[65,101075,101076,101089,101097],{"__ignoreMap":63},[68,101077,101078,101081,101083,101086],{"class":70,"line":71},[68,101079,101080],{"class":74},"python3",[68,101082,161],{"class":82},[68,101084,101085],{"class":78}," venv",[68,101087,101088],{"class":78}," .venv\n",[68,101090,101091,101094],{"class":70,"line":92},[68,101092,101093],{"class":82},"source",[68,101095,101096],{"class":78}," .venv\u002Fbin\u002Factivate\n",[68,101098,101099,101101,101103,101106,101108,101111],{"class":70,"line":1387},[68,101100,30581],{"class":74},[68,101102,161],{"class":82},[68,101104,101105],{"class":78}," pip",[68,101107,24039],{"class":78},[68,101109,101110],{"class":82}," --upgrade",[68,101112,101113],{"class":78}," pip\n",[19,101115,101116],{},"pip 安装:",[58,101118,101120],{"className":24027,"code":101119,"language":24029,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy\n",[65,101121,101122],{"__ignoreMap":63},[68,101123,101124,101126,101128,101131],{"class":70,"line":71},[68,101125,24036],{"class":74},[68,101127,24039],{"class":78},[68,101129,101130],{"class":78}," \"mujoco>=2.3\"",[68,101132,101133],{"class":78}," numpy\n",[19,101135,101136],{},"安装完成后，先做最小检查：",[58,101138,101140],{"className":24027,"code":101139,"language":24029,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[65,101141,101142],{"__ignoreMap":63},[68,101143,101144,101146,101148],{"class":70,"line":71},[68,101145,30581],{"class":74},[68,101147,30559],{"class":82},[68,101149,101150],{"class":78}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101152,101153],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101155,101156],{},"conda 安装:",[58,101158,101160],{"className":24027,"code":101159,"language":24029,"meta":63,"style":63},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[65,101161,101162,101182,101192],{"__ignoreMap":63},[68,101163,101164,101166,101168,101170,101173,101176,101179],{"class":70,"line":71},[68,101165,30531],{"class":74},[68,101167,29377],{"class":78},[68,101169,25319],{"class":82},[68,101171,101172],{"class":78}," mujoco-study",[68,101174,101175],{"class":78}," python=",[68,101177,101178],{"class":82},"3.10",[68,101180,101181],{"class":82}," -y\n",[68,101183,101184,101186,101189],{"class":70,"line":92},[68,101185,30531],{"class":74},[68,101187,101188],{"class":78}," activate",[68,101190,101191],{"class":78}," mujoco-study\n",[68,101193,101194,101196,101198,101200],{"class":70,"line":1387},[68,101195,24036],{"class":74},[68,101197,24039],{"class":78},[68,101199,101130],{"class":78},[68,101201,101133],{"class":78},[19,101203,101204],{},"版本冲突说明:",[23,101206,101207,101213,101223,101232],{},[26,101208,101209,101210,28588],{},"不要安装 ",[65,101211,101212],{},"mujoco-py",[26,101214,101215,101216,101218,101219,101222],{},"如果旧项目里同时安装了 ",[65,101217,101212],{}," 和 ",[65,101220,101221],{},"mujoco","，建议新建干净虚拟环境。",[26,101224,101225,101228,101229,28588],{},[65,101226,101227],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[65,101230,101231],{},"~\u002F.mujoco\u002Fmujoco210",[26,101233,101234,101235,82740,101238,101241],{},"离屏渲染可能涉及 OpenGL 后端，",[65,101236,101237],{},"MUJOCO_GL=egl",[65,101239,101240],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101243,101245],{"id":101244},"_3核心概念解释","3.核心概念解释",[19,101247,101248],{},"MuJoCo 的基本执行流程:",[58,101250,101253],{"className":101251,"code":101252,"language":5393,"meta":63},[5391],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[65,101254,101252],{"__ignoreMap":63},[19,101256,101257,101259],{},[65,101258,100910],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101261,101262,101264,101265,546,101268,546,101271,546,101274,546,101277,28588],{},[65,101263,100920],{}," 存放仿真运行时状态，例如 ",[65,101266,101267],{},"data.time",[65,101269,101270],{},"data.qpos",[65,101272,101273],{},"data.qvel",[65,101275,101276],{},"data.ctrl",[65,101278,101279],{},"data.xpos",[301,101281,101283],{"id":101282},"xml-是什么","XML 是什么",[19,101285,101286],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[58,101288,101290],{"className":53268,"code":101289,"language":53270,"meta":63,"style":63},"\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",[65,101291,101292,101314,101345],{"__ignoreMap":63},[68,101293,101294,101296,101298,101300,101302,101304,101307,101309,101312],{"class":70,"line":71},[68,101295,1243],{"class":335},[68,101297,52001],{"class":51501},[68,101299,15125],{"class":74},[68,101301,381],{"class":335},[68,101303,53692],{"class":78},[68,101305,101306],{"class":74}," pos",[68,101308,381],{"class":335},[68,101310,101311],{"class":78},"\"0 0 1\"",[68,101313,51508],{"class":335},[68,101315,101316,101318,101321,101323,101325,101328,101330,101332,101334,101337,101339,101342],{"class":70,"line":92},[68,101317,52345],{"class":335},[68,101319,101320],{"class":51501},"geom",[68,101322,15125],{"class":74},[68,101324,381],{"class":335},[68,101326,101327],{"class":78},"\"box_geom\"",[68,101329,54025],{"class":74},[68,101331,381],{"class":335},[68,101333,53692],{"class":78},[68,101335,101336],{"class":74}," size",[68,101338,381],{"class":335},[68,101340,101341],{"class":78},"\"0.1 0.1 0.1\"",[68,101343,101344],{"class":335},"\u002F>\n",[68,101346,101347,101349,101351],{"class":70,"line":1387},[68,101348,51986],{"class":335},[68,101350,52001],{"class":51501},[68,101352,51508],{"class":335},[19,101354,101355],{},"这段意思是：",[23,101357,101358,101364,101371],{},[26,101359,101360,101361,101363],{},"创建一个叫 ",[65,101362,53915],{}," 的刚体。",[26,101365,101366,101367,101370],{},"它初始放在 ",[65,101368,101369],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[26,101372,101373],{},"它里面有一个盒子形状的几何体。",[301,101375,101377],{"id":101376},"timestep-是什么","timestep 是什么",[19,101379,101380],{},"XML 里的：",[58,101382,101384],{"className":53268,"code":101383,"language":53270,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[65,101385,101386],{"__ignoreMap":63},[68,101387,101388,101390,101392,101395,101397,101400,101403,101405,101408],{"class":70,"line":71},[68,101389,1243],{"class":335},[68,101391,69367],{"class":51501},[68,101393,101394],{"class":74}," timestep",[68,101396,381],{"class":335},[68,101398,101399],{"class":78},"\"0.01\"",[68,101401,101402],{"class":74}," gravity",[68,101404,381],{"class":335},[68,101406,101407],{"class":78},"\"0 0 -9.81\"",[68,101409,101344],{"class":335},[19,101411,101412,101413,101416,101417,101419],{},"表示每调用一次 ",[65,101414,101415],{},"mj_step","，仿真时间前进 ",[65,101418,39187],{}," 秒。循环 100 次，大约就是 1 秒：",[58,101421,101424],{"className":101422,"code":101423,"language":5393,"meta":63},[5391],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[65,101425,101423],{"__ignoreMap":63},[301,101427,101429],{"id":101428},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101431,101432],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[58,101434,101437],{"className":101435,"code":101436,"language":5393,"meta":63},[5391],"x y z qw qx qy qz\n",[65,101438,101436],{"__ignoreMap":63},[19,101440,101441,101442,101445,101446,101449],{},"表示一个自由刚体的位置和姿态。其中 ",[65,101443,101444],{},"x y z"," 是位置，",[65,101447,101448],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101451,101453],{"id":101452},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101455,101456],{},"新建文件:",[58,101458,101460],{"className":24027,"code":101459,"language":24029,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[65,101461,101462,101472,101479],{"__ignoreMap":63},[68,101463,101464,101467,101469],{"class":70,"line":71},[68,101465,101466],{"class":74},"mkdir",[68,101468,29417],{"class":82},[68,101470,101471],{"class":78}," mujoco_tutorial\n",[68,101473,101474,101477],{"class":70,"line":92},[68,101475,101476],{"class":82},"cd",[68,101478,101471],{"class":78},[68,101480,101481,101484],{"class":70,"line":1387},[68,101482,101483],{"class":74},"touch",[68,101485,101486],{"class":78}," ch1_first_sim.py\n",[19,101488,101489],{},"写入:",[58,101491,101493],{"className":30579,"code":101492,"language":30581,"meta":63,"style":63},"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",[65,101494,101495,101502,101506,101510,101520,101525,101530,101534,101539,101544,101548,101553,101558,101563,101568,101573,101578,101582,101586,101590,101603,101617,101627,101631,101643,101655,101667,101679,101691,101695,101712,101717,101721,101732,101743,101747,101751,101765],{"__ignoreMap":63},[68,101496,101497,101499],{"class":70,"line":71},[68,101498,30593],{"class":331},[68,101500,101501],{"class":335}," mujoco\n",[68,101503,101504],{"class":70,"line":92},[68,101505,2606],{"emptyLinePlaceholder":260},[68,101507,101508],{"class":70,"line":1387},[68,101509,2606],{"emptyLinePlaceholder":260},[68,101511,101512,101515,101517],{"class":70,"line":1402},[68,101513,101514],{"class":82},"XML",[68,101516,13769],{"class":331},[68,101518,101519],{"class":78}," \"\"\"\n",[68,101521,101522],{"class":70,"line":1408},[68,101523,101524],{"class":78},"\u003Cmujoco model=\"first_sim\">\n",[68,101526,101527],{"class":70,"line":1422},[68,101528,101529],{"class":78},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[68,101531,101532],{"class":70,"line":1428},[68,101533,2606],{"emptyLinePlaceholder":260},[68,101535,101536],{"class":70,"line":1519},[68,101537,101538],{"class":78},"  \u003Cworldbody>\n",[68,101540,101541],{"class":70,"line":1525},[68,101542,101543],{"class":78},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,101545,101546],{"class":70,"line":1537},[68,101547,2606],{"emptyLinePlaceholder":260},[68,101549,101550],{"class":70,"line":1819},[68,101551,101552],{"class":78},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[68,101554,101555],{"class":70,"line":1824},[68,101556,101557],{"class":78},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[68,101559,101560],{"class":70,"line":1830},[68,101561,101562],{"class":78},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,101564,101565],{"class":70,"line":1835},[68,101566,101567],{"class":78},"    \u003C\u002Fbody>\n",[68,101569,101570],{"class":70,"line":1849},[68,101571,101572],{"class":78},"  \u003C\u002Fworldbody>\n",[68,101574,101575],{"class":70,"line":1854},[68,101576,101577],{"class":78},"\u003C\u002Fmujoco>\n",[68,101579,101580],{"class":70,"line":1860},[68,101581,95899],{"class":78},[68,101583,101584],{"class":70,"line":1881},[68,101585,2606],{"emptyLinePlaceholder":260},[68,101587,101588],{"class":70,"line":1886},[68,101589,2606],{"emptyLinePlaceholder":260},[68,101591,101592,101594,101596,101599,101601],{"class":70,"line":1900},[68,101593,32148],{"class":331},[68,101595,2179],{"class":74},[68,101597,101598],{"class":335},"() -> ",[68,101600,95887],{"class":82},[68,101602,3945],{"class":335},[68,101604,101605,101608,101610,101613,101615],{"class":70,"line":1905},[68,101606,101607],{"class":335},"    model ",[68,101609,381],{"class":331},[68,101611,101612],{"class":335}," mujoco.MjModel.from_xml_string(",[68,101614,101514],{"class":82},[68,101616,342],{"class":335},[68,101618,101619,101622,101624],{"class":70,"line":1934},[68,101620,101621],{"class":335},"    data ",[68,101623,381],{"class":331},[68,101625,101626],{"class":335}," mujoco.MjData(model)\n",[68,101628,101629],{"class":70,"line":1939},[68,101630,2606],{"emptyLinePlaceholder":260},[68,101632,101633,101635,101637,101640],{"class":70,"line":1956},[68,101634,31500],{"class":82},[68,101636,336],{"class":335},[68,101638,101639],{"class":78},"\"nq:\"",[68,101641,101642],{"class":335},", model.nq)\n",[68,101644,101645,101647,101649,101652],{"class":70,"line":1961},[68,101646,31500],{"class":82},[68,101648,336],{"class":335},[68,101650,101651],{"class":78},"\"nv:\"",[68,101653,101654],{"class":335},", model.nv)\n",[68,101656,101657,101659,101661,101664],{"class":70,"line":1966},[68,101658,31500],{"class":82},[68,101660,336],{"class":335},[68,101662,101663],{"class":78},"\"nu:\"",[68,101665,101666],{"class":335},", model.nu)\n",[68,101668,101669,101671,101673,101676],{"class":70,"line":1971},[68,101670,31500],{"class":82},[68,101672,336],{"class":335},[68,101674,101675],{"class":78},"\"initial time:\"",[68,101677,101678],{"class":335},", data.time)\n",[68,101680,101681,101683,101685,101688],{"class":70,"line":1985},[68,101682,31500],{"class":82},[68,101684,336],{"class":335},[68,101686,101687],{"class":78},"\"initial qpos:\"",[68,101689,101690],{"class":335},", data.qpos.copy())\n",[68,101692,101693],{"class":70,"line":1990},[68,101694,2606],{"emptyLinePlaceholder":260},[68,101696,101697,101699,101702,101704,101706,101708,101710],{"class":70,"line":2783},[68,101698,3407],{"class":331},[68,101700,101701],{"class":335}," _ ",[68,101703,26247],{"class":331},[68,101705,32644],{"class":82},[68,101707,336],{"class":335},[68,101709,644],{"class":82},[68,101711,30987],{"class":335},[68,101713,101714],{"class":70,"line":2797},[68,101715,101716],{"class":335},"        mujoco.mj_step(model, data)\n",[68,101718,101719],{"class":70,"line":2805},[68,101720,2606],{"emptyLinePlaceholder":260},[68,101722,101723,101725,101727,101730],{"class":70,"line":2810},[68,101724,31500],{"class":82},[68,101726,336],{"class":335},[68,101728,101729],{"class":78},"\"final time:\"",[68,101731,101678],{"class":335},[68,101733,101734,101736,101738,101741],{"class":70,"line":2816},[68,101735,31500],{"class":82},[68,101737,336],{"class":335},[68,101739,101740],{"class":78},"\"final qpos:\"",[68,101742,101690],{"class":335},[68,101744,101745],{"class":70,"line":2822},[68,101746,2606],{"emptyLinePlaceholder":260},[68,101748,101749],{"class":70,"line":2827},[68,101750,2606],{"emptyLinePlaceholder":260},[68,101752,101753,101755,101757,101760,101763],{"class":70,"line":8153},[68,101754,1738],{"class":331},[68,101756,31421],{"class":82},[68,101758,101759],{"class":331}," ==",[68,101761,101762],{"class":78}," \"__main__\"",[68,101764,3945],{"class":335},[68,101766,101767],{"class":70,"line":8177},[68,101768,101769],{"class":335},"    main()\n",[301,101771,101772],{"id":101772},"代码逐段解释",[19,101774,101775],{},"导入库：",[58,101777,101779],{"className":30579,"code":101778,"language":30581,"meta":63,"style":63},"import mujoco\n",[65,101780,101781],{"__ignoreMap":63},[68,101782,101783,101785],{"class":70,"line":71},[68,101784,30593],{"class":331},[68,101786,101501],{"class":335},[19,101788,101789],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101791,101792],{},"定义 XML：",[58,101794,101796],{"className":30579,"code":101795,"language":30581,"meta":63,"style":63},"XML = \"\"\"\n...\n\"\"\"\n",[65,101797,101798,101806,101811],{"__ignoreMap":63},[68,101799,101800,101802,101804],{"class":70,"line":71},[68,101801,101514],{"class":82},[68,101803,13769],{"class":331},[68,101805,101519],{"class":78},[68,101807,101808],{"class":70,"line":92},[68,101809,101810],{"class":78},"...\n",[68,101812,101813],{"class":70,"line":1387},[68,101814,95899],{"class":78},[19,101816,101817,101818,101821],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[65,101819,101820],{},"freejoint"," 的方块。",[19,101823,101824],{},"编译模型：",[58,101826,101828],{"className":30579,"code":101827,"language":30581,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\n",[65,101829,101830],{"__ignoreMap":63},[68,101831,101832,101835,101837,101839,101841],{"class":70,"line":71},[68,101833,101834],{"class":335},"model ",[68,101836,381],{"class":331},[68,101838,101612],{"class":335},[68,101840,101514],{"class":82},[68,101842,342],{"class":335},[19,101844,101845],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101847,101848],{},"创建数据：",[58,101850,101852],{"className":30579,"code":101851,"language":30581,"meta":63,"style":63},"data = mujoco.MjData(model)\n",[65,101853,101854],{"__ignoreMap":63},[68,101855,101856,101859,101861],{"class":70,"line":71},[68,101857,101858],{"class":335},"data ",[68,101860,381],{"class":331},[68,101862,101626],{"class":335},[19,101864,101865,101867,101868,101870],{},[65,101866,33602],{}," 会保存仿真当前状态。刚创建时，时间是 ",[65,101869,525],{},"，方块还在初始位置。",[19,101872,101873],{},"推进仿真：",[58,101875,101877],{"className":30579,"code":101876,"language":30581,"meta":63,"style":63},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[65,101878,101879,101895],{"__ignoreMap":63},[68,101880,101881,101883,101885,101887,101889,101891,101893],{"class":70,"line":71},[68,101882,3231],{"class":331},[68,101884,101701],{"class":335},[68,101886,26247],{"class":331},[68,101888,32644],{"class":82},[68,101890,336],{"class":335},[68,101892,644],{"class":82},[68,101894,30987],{"class":335},[68,101896,101897],{"class":70,"line":92},[68,101898,101899],{"class":335},"    mujoco.mj_step(model, data)\n",[19,101901,101902,101903,101905],{},"每次 ",[65,101904,101415],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[301,101907,101908],{"id":101908},"代码逐行细讲",[19,101910,101911],{},"下面把完整代码按新手视角拆开讲。",[58,101913,101914],{"className":30579,"code":101778,"language":30581,"meta":63,"style":63},[65,101915,101916],{"__ignoreMap":63},[68,101917,101918,101920],{"class":70,"line":71},[68,101919,30593],{"class":331},[68,101921,101501],{"class":335},[19,101923,101924,101926,101927,546,101929,546,101931,28588],{},[65,101925,30593],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[65,101928,100876],{},[65,101930,100881],{},[65,101932,101933],{},"mujoco.mj_step",[58,101935,101936],{"className":30579,"code":101795,"language":30581,"meta":63,"style":63},[65,101937,101938,101946,101950],{"__ignoreMap":63},[68,101939,101940,101942,101944],{"class":70,"line":71},[68,101941,101514],{"class":82},[68,101943,13769],{"class":331},[68,101945,101519],{"class":78},[68,101947,101948],{"class":70,"line":92},[68,101949,101810],{"class":78},[68,101951,101952],{"class":70,"line":1387},[68,101953,95899],{"class":78},[19,101955,101956,101958,101959,101962],{},[65,101957,101514],{}," 是一个变量名。右边的三引号 ",[65,101960,101961],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[58,101964,101965],{"className":53268,"code":101524,"language":53270,"meta":63,"style":63},[65,101966,101967],{"__ignoreMap":63},[68,101968,101969,101971,101973,101976,101978,101981],{"class":70,"line":71},[68,101970,1243],{"class":335},[68,101972,101221],{"class":51501},[68,101974,101975],{"class":74}," model",[68,101977,381],{"class":335},[68,101979,101980],{"class":78},"\"first_sim\"",[68,101982,51508],{"class":335},[19,101984,101985,101986,101989,101990,28588],{},"这是 XML 的根标签。",[65,101987,101988],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[65,101991,101992],{},"first_sim",[58,101994,101995],{"className":53268,"code":101383,"language":53270,"meta":63,"style":63},[65,101996,101997],{"__ignoreMap":63},[68,101998,101999,102001,102003,102005,102007,102009,102011,102013,102015],{"class":70,"line":71},[68,102000,1243],{"class":335},[68,102002,69367],{"class":51501},[68,102004,101394],{"class":74},[68,102006,381],{"class":335},[68,102008,101399],{"class":78},[68,102010,101402],{"class":74},[68,102012,381],{"class":335},[68,102014,101407],{"class":78},[68,102016,101344],{"class":335},[19,102018,102019,102021,102022,102025,102026,102029],{},[65,102020,69367],{}," 用来设置仿真参数。",[65,102023,102024],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[65,102027,102028],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[58,102031,102033],{"className":53268,"code":102032,"language":53270,"meta":63,"style":63},"\u003Cworldbody>\n",[65,102034,102035],{"__ignoreMap":63},[68,102036,102037,102039,102042],{"class":70,"line":71},[68,102038,1243],{"class":335},[68,102040,102041],{"class":51501},"worldbody",[68,102043,51508],{"class":335},[19,102045,102046,102048],{},[65,102047,102041],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[58,102050,102052],{"className":53268,"code":102051,"language":53270,"meta":63,"style":63},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[65,102053,102054],{"__ignoreMap":63},[68,102055,102056,102058,102060,102062,102064,102067,102069,102071,102074,102076,102078,102081,102083,102085,102088],{"class":70,"line":71},[68,102057,1243],{"class":335},[68,102059,101320],{"class":51501},[68,102061,15125],{"class":74},[68,102063,381],{"class":335},[68,102065,102066],{"class":78},"\"floor\"",[68,102068,54025],{"class":74},[68,102070,381],{"class":335},[68,102072,102073],{"class":78},"\"plane\"",[68,102075,101336],{"class":74},[68,102077,381],{"class":335},[68,102079,102080],{"class":78},"\"2 2 0.1\"",[68,102082,78968],{"class":74},[68,102084,381],{"class":335},[68,102086,102087],{"class":78},"\"0.8 0.8 0.8 1\"",[68,102089,101344],{"class":335},[19,102091,102092,102093,102095,102096,102099,102100,102103,102104,102106],{},"这行创建地面。",[65,102094,101320],{}," 是几何体。",[65,102097,102098],{},"name=\"floor\""," 是名字。",[65,102101,102102],{},"type=\"plane\""," 表示平面。",[65,102105,55311],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[58,102108,102110],{"className":53268,"code":102109,"language":53270,"meta":63,"style":63},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[65,102111,102112],{"__ignoreMap":63},[68,102113,102114,102116,102118,102120,102122,102124,102126,102128,102130],{"class":70,"line":71},[68,102115,1243],{"class":335},[68,102117,52001],{"class":51501},[68,102119,15125],{"class":74},[68,102121,381],{"class":335},[68,102123,53692],{"class":78},[68,102125,101306],{"class":74},[68,102127,381],{"class":335},[68,102129,101311],{"class":78},[68,102131,51508],{"class":335},[19,102133,102134,102135,28588,102137,102140,102141,102143],{},"这行创建一个刚体，名字叫 ",[65,102136,53915],{},[65,102138,102139],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[65,102142,101369],{},"，也就是离地面 1 米高。",[58,102145,102147],{"className":53268,"code":102146,"language":53270,"meta":63,"style":63},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[65,102148,102149],{"__ignoreMap":63},[68,102150,102151,102153,102155,102157,102159,102162],{"class":70,"line":71},[68,102152,1243],{"class":335},[68,102154,101820],{"class":51501},[68,102156,15125],{"class":74},[68,102158,381],{"class":335},[68,102160,102161],{"class":78},"\"box_free\"",[68,102163,101344],{"class":335},[19,102165,102166,102167,102169],{},"这行很重要。",[65,102168,101820],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[58,102171,102173],{"className":53268,"code":102172,"language":53270,"meta":63,"style":63},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[65,102174,102175],{"__ignoreMap":63},[68,102176,102177,102179,102181,102183,102185,102187,102189,102191,102193,102195,102197,102199,102202,102204,102206,102208,102210,102213],{"class":70,"line":71},[68,102178,1243],{"class":335},[68,102180,101320],{"class":51501},[68,102182,15125],{"class":74},[68,102184,381],{"class":335},[68,102186,101327],{"class":78},[68,102188,54025],{"class":74},[68,102190,381],{"class":335},[68,102192,53692],{"class":78},[68,102194,101336],{"class":74},[68,102196,381],{"class":335},[68,102198,101341],{"class":78},[68,102200,102201],{"class":74}," mass",[68,102203,381],{"class":335},[68,102205,3884],{"class":78},[68,102207,78968],{"class":74},[68,102209,381],{"class":335},[68,102211,102212],{"class":78},"\"1 0 0 1\"",[68,102214,101344],{"class":335},[19,102216,102217,102218,102221,102222,102225,102226,102229,102230,102233],{},"这行给 box body 添加一个盒子形状。",[65,102219,102220],{},"type=\"box\""," 表示形状是盒子。",[65,102223,102224],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[65,102227,102228],{},"mass=\"1\""," 表示质量是 1。",[65,102231,102232],{},"rgba=\"1 0 0 1\""," 表示红色。",[58,102235,102237],{"className":30579,"code":102236,"language":30581,"meta":63,"style":63},"def main() -> None:\n",[65,102238,102239],{"__ignoreMap":63},[68,102240,102241,102243,102245,102247,102249],{"class":70,"line":71},[68,102242,32148],{"class":331},[68,102244,2179],{"class":74},[68,102246,101598],{"class":335},[68,102248,95887],{"class":82},[68,102250,3945],{"class":335},[19,102252,102253,102255,102256,102259,102260,102263],{},[65,102254,32148],{}," 用来定义函数。这里定义了一个叫 ",[65,102257,102258],{},"main"," 的函数。",[65,102261,102262],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[58,102265,102266],{"className":30579,"code":101827,"language":30581,"meta":63,"style":63},[65,102267,102268],{"__ignoreMap":63},[68,102269,102270,102272,102274,102276,102278],{"class":70,"line":71},[68,102271,101834],{"class":335},[68,102273,381],{"class":331},[68,102275,101612],{"class":335},[68,102277,101514],{"class":82},[68,102279,342],{"class":335},[19,102281,102282,102283,102286],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[65,102284,102285],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[58,102288,102289],{"className":30579,"code":101851,"language":30581,"meta":63,"style":63},[65,102290,102291],{"__ignoreMap":63},[68,102292,102293,102295,102297],{"class":70,"line":71},[68,102294,101858],{"class":335},[68,102296,381],{"class":331},[68,102298,101626],{"class":335},[19,102300,102301,102302,102304,102305,102307],{},"这行创建仿真数据。",[65,102303,33602],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[65,102306,33602],{}," 都会变化。",[58,102309,102311],{"className":30579,"code":102310,"language":30581,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[65,102312,102313,102323,102333],{"__ignoreMap":63},[68,102314,102315,102317,102319,102321],{"class":70,"line":71},[68,102316,30616],{"class":82},[68,102318,336],{"class":335},[68,102320,101639],{"class":78},[68,102322,101642],{"class":335},[68,102324,102325,102327,102329,102331],{"class":70,"line":92},[68,102326,30616],{"class":82},[68,102328,336],{"class":335},[68,102330,101651],{"class":78},[68,102332,101654],{"class":335},[68,102334,102335,102337,102339,102341],{"class":70,"line":1387},[68,102336,30616],{"class":82},[68,102338,336],{"class":335},[68,102340,101663],{"class":78},[68,102342,101666],{"class":335},[19,102344,102345,102347,102348,102351,102352,102355,102356,102359,102360,102363],{},[65,102346,30616],{}," 用来输出信息。",[65,102349,102350],{},"model.nq"," 是位置变量数量，",[65,102353,102354],{},"model.nv"," 是速度变量数量，",[65,102357,102358],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[65,102361,102362],{},"nu"," 是 0。",[58,102365,102367],{"className":30579,"code":102366,"language":30581,"meta":63,"style":63},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[65,102368,102369,102379],{"__ignoreMap":63},[68,102370,102371,102373,102375,102377],{"class":70,"line":71},[68,102372,30616],{"class":82},[68,102374,336],{"class":335},[68,102376,101675],{"class":78},[68,102378,101678],{"class":335},[68,102380,102381,102383,102385,102387],{"class":70,"line":92},[68,102382,30616],{"class":82},[68,102384,336],{"class":335},[68,102386,101687],{"class":78},[68,102388,101690],{"class":335},[19,102390,102391,102392,102394,102395,102397,102398,102401],{},"这里打印初始时间和初始位置。",[65,102393,101267],{}," 一开始是 0。",[65,102396,101270],{}," 是位置数组。",[65,102399,102400],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[58,102403,102404],{"className":30579,"code":101876,"language":30581,"meta":63,"style":63},[65,102405,102406,102422],{"__ignoreMap":63},[68,102407,102408,102410,102412,102414,102416,102418,102420],{"class":70,"line":71},[68,102409,3231],{"class":331},[68,102411,101701],{"class":335},[68,102413,26247],{"class":331},[68,102415,32644],{"class":82},[68,102417,336],{"class":335},[68,102419,644],{"class":82},[68,102421,30987],{"class":335},[68,102423,102424],{"class":70,"line":92},[68,102425,101899],{"class":335},[19,102427,102428,102430,102431,102434,102435,102437,102438,102440],{},[65,102429,3231],{}," 是循环。",[65,102432,102433],{},"range(100)"," 表示循环 100 次。",[65,102436,1325],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[65,102439,101415],{},"，仿真就前进一步。",[58,102442,102444],{"className":30579,"code":102443,"language":30581,"meta":63,"style":63},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[65,102445,102446,102456],{"__ignoreMap":63},[68,102447,102448,102450,102452,102454],{"class":70,"line":71},[68,102449,30616],{"class":82},[68,102451,336],{"class":335},[68,102453,101729],{"class":78},[68,102455,101678],{"class":335},[68,102457,102458,102460,102462,102464],{"class":70,"line":92},[68,102459,30616],{"class":82},[68,102461,336],{"class":335},[68,102463,101740],{"class":78},[68,102465,101690],{"class":335},[19,102467,102468],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[58,102470,102472],{"className":30579,"code":102471,"language":30581,"meta":63,"style":63},"if __name__ == \"__main__\":\n    main()\n",[65,102473,102474,102486],{"__ignoreMap":63},[68,102475,102476,102478,102480,102482,102484],{"class":70,"line":71},[68,102477,1738],{"class":331},[68,102479,31421],{"class":82},[68,102481,101759],{"class":331},[68,102483,101762],{"class":78},[68,102485,3945],{"class":335},[68,102487,102488],{"class":70,"line":92},[68,102489,101769],{"class":335},[19,102491,102492,102493,102496,102497,28588],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[65,102494,102495],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[65,102498,102495],{},[19,102500,102501],{},"运行:",[58,102503,102505],{"className":24027,"code":102504,"language":24029,"meta":63,"style":63},"python ch1_first_sim.py\n",[65,102506,102507],{"__ignoreMap":63},[68,102508,102509,102511],{"class":70,"line":71},[68,102510,30581],{"class":74},[68,102512,101486],{"class":78},[14,102514,102516],{"id":102515},"_5运行结果说明","5.运行结果说明",[19,102518,102519],{},"你应该看到类似输出:",[58,102521,102524],{"className":102522,"code":102523,"language":5393,"meta":63},[5391],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[65,102525,102523],{"__ignoreMap":63},[19,102527,102528,102530,102531,102534,102535,28588],{},[65,102529,101820],{}," 有 7 个位置变量: ",[65,102532,102533],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[65,102536,102537],{},"vx vy vz wx wy wz",[19,102539,102540,102541,102544],{},"你还会看到 ",[65,102542,102543],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102546,102548],{"id":102547},"_6验证步骤","6.验证步骤",[19,102550,102551],{},"确认版本:",[58,102553,102554],{"className":24027,"code":101139,"language":24029,"meta":63,"style":63},[65,102555,102556],{"__ignoreMap":63},[68,102557,102558,102560,102562],{"class":70,"line":71},[68,102559,30581],{"class":74},[68,102561,30559],{"class":82},[68,102563,101150],{"class":78},[19,102565,102566],{},"确认导入的是官方 bindings:",[58,102568,102570],{"className":24027,"code":102569,"language":24029,"meta":63,"style":63},"python -c \"import mujoco; print(mujoco)\"\n",[65,102571,102572],{"__ignoreMap":63},[68,102573,102574,102576,102578],{"class":70,"line":71},[68,102575,30581],{"class":74},[68,102577,30559],{"class":82},[68,102579,102580],{"class":78}," \"import mujoco; print(mujoco)\"\n",[19,102582,102583],{},"运行程序:",[58,102585,102586],{"className":24027,"code":102504,"language":24029,"meta":63,"style":63},[65,102587,102588],{"__ignoreMap":63},[68,102589,102590,102592],{"class":70,"line":71},[68,102591,30581],{"class":74},[68,102593,101486],{"class":78},[19,102595,102596,102597,102600,102601,28588],{},"检查 ",[65,102598,102599],{},"final time"," 是否约等于 ",[65,102602,102603],{},"1.0",[19,102605,102606],{},"再做几个小实验：",[23,102608,102609,102619,102627,102640],{},[26,102610,102611,102612,102614,102615,102618],{},"把 ",[65,102613,102139],{}," 改成 ",[65,102616,102617],{},"pos=\"0 0 2\"","，观察初始高度变化。",[26,102620,102611,102621,102614,102623,102626],{},[65,102622,102028],{},[65,102624,102625],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[26,102628,102611,102629,102614,102631,102634,102635,102637,102638,28588],{},[65,102630,102024],{},[65,102632,102633],{},"timestep=\"0.005\"","，观察 100 步后的 ",[65,102636,102599],{}," 是否变成约 ",[65,102639,35530],{},[26,102641,102642,102643,102646],{},"删除 ",[65,102644,102645],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102648,102649],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102651,102653],{"id":102652},"_7常见错误与解决方案","7.常见错误与解决方案",[301,102655,102657],{"id":102656},"modulenotfounderror-no-module-named-mujoco",[65,102658,102659],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102661,102662],{},"解决:",[58,102664,102666],{"className":24027,"code":102665,"language":24029,"meta":63,"style":63},"pip install \"mujoco>=2.3\"\n",[65,102667,102668],{"__ignoreMap":63},[68,102669,102670,102672,102674],{"class":70,"line":71},[68,102671,24036],{"class":74},[68,102673,24039],{"class":78},[68,102675,102676],{"class":78}," \"mujoco>=2.3\"\n",[301,102678,102680],{"id":102679},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102682,102683],{},"先安装系统依赖:",[58,102685,102687],{"className":24027,"code":102686,"language":24029,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[65,102688,102689],{"__ignoreMap":63},[68,102690,102691,102693,102695,102697,102699,102702,102704,102707,102709,102712,102714],{"class":70,"line":71},[68,102692,24780],{"class":74},[68,102694,26519],{"class":78},[68,102696,24039],{"class":78},[68,102698,26604],{"class":82},[68,102700,102701],{"class":78}," mesa-libGL",[68,102703,101015],{"class":78},[68,102705,102706],{"class":78}," glfw",[68,102708,101035],{"class":78},[68,102710,102711],{"class":78}," libX11",[68,102713,101048],{"class":78},[68,102715,102716],{"class":78}," libXrandr\n",[301,102718,102720],{"id":102719},"xml-解析失败","XML 解析失败",[19,102722,102723],{},"检查:",[23,102725,102726,102729,102732,102738],{},[26,102727,102728],{},"标签是否闭合",[26,102730,102731],{},"属性是否带引号",[26,102733,102734,102735],{},"根节点是否是 ",[65,102736,102737],{},"\u003Cmujoco>",[26,102739,102740,102742,102743,102746],{},[65,102741,52001],{}," 是否放在 ",[65,102744,102745],{},"\u003Cworldbody>"," 内部",[301,102748,102750,102752,102753],{"id":102749},"final-time-不是严格等于-10",[65,102751,102599],{}," 不是严格等于 ",[65,102754,102603],{},[19,102756,102757],{},"这通常不是错误。浮点数计算可能得到：",[58,102759,102762],{"className":102760,"code":102761,"language":5393,"meta":63},[5391],"1.0000000000000007\n",[65,102763,102761],{"__ignoreMap":63},[19,102765,102766,102767,102769],{},"只要接近 ",[65,102768,102603],{}," 就正常。",[301,102771,102772],{"id":102772},"方块没有掉下来",[19,102774,102775],{},"检查：",[23,102777,102778,102784,102790,102795],{},[26,102779,102780,102781],{},"方块 body 里是否有 ",[65,102782,102783],{},"\u003Cfreejoint\u002F>",[26,102785,102786,102787],{},"重力是否是 ",[65,102788,102789],{},"0 0 -9.81",[26,102791,102792,102793],{},"是否真的调用了 ",[65,102794,100886],{},[26,102796,102797,102798,102800,102801],{},"你看的是否是 ",[65,102799,102543],{},"，不是 ",[65,102802,102803],{},"initial qpos",[14,102805,102807],{"id":102806},"_8本章小结","8.本章小结",[19,102809,102810],{},"本章你已经完成了 MuJoCo 的最小闭环：",[58,102812,102815],{"className":102813,"code":102814,"language":5393,"meta":63},[5391],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[65,102816,102814],{"__ignoreMap":63},[19,102818,102819],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[250,102821,102822],{},"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":63,"searchDepth":92,"depth":92,"links":102824},[102825,102826,102827,102832,102836,102837,102838,102846],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":102828},[102829,102830,102831],{"id":101282,"depth":1387,"text":101283},{"id":101376,"depth":1387,"text":101377},{"id":101428,"depth":1387,"text":101429},{"id":101452,"depth":92,"text":101453,"children":102833},[102834,102835],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":102839},[102840,102841,102842,102843,102845],{"id":102656,"depth":1387,"text":102659},{"id":102679,"depth":1387,"text":102680},{"id":102719,"depth":1387,"text":102720},{"id":102749,"depth":1387,"text":102844},"final time 不是严格等于 1.0",{"id":102772,"depth":1387,"text":102772},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100839,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102853,"title":102854,"body":102855,"description":63,"extension":258,"meta":104511,"navigation":260,"path":104512,"seo":104513,"stem":104514,"__hash__":104515},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102856,"toc":104487},[102857,102860,102862,102865,102868,102885,102980,102983,102989,102991,102993,103017,103020,103034,103037,103078,103080,103093,103095,103098,103146,103158,103161,103164,103170,103183,103250,103253,103272,103275,103278,103284,103286,103295,103298,103302,103311,103393,103402,103406,103412,103426,103436,103438,103768,103771,103783,103785,103796,103798,103801,103819,103822,103825,103843,103854,103857,103872,103882,103884,103905,103922,103942,103948,103988,104004,104020,104026,104029,104053,104069,104074,104104,104121,104146,104149,104164,104173,104188,104197,104212,104219,104221,104231,104244,104251,104254,104293,104300,104302,104354,104356,104362,104365,104372,104379,104382,104384,104402,104405,104408,104442,104454,104456,104459,104481,104484],[10,102858,102854],{"id":102859},"_2xml-与-mjcf-物理建模基础",[14,102861,100848],{"id":100847},[19,102863,102864],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102866,102867],{},"本章结束后，你应该能看懂一个简单模型里：",[23,102869,102870,102873,102876,102879,102882],{},[26,102871,102872],{},"地面在哪里。",[26,102874,102875],{},"物体初始位置在哪里。",[26,102877,102878],{},"几何体是什么形状。",[26,102880,102881],{},"哪些 body 可以自由运动。",[26,102883,102884],{},"如何用名字在 Python 里找到 XML 中的对象。",[471,102886,102887,102897],{},[474,102888,102889],{},[477,102890,102891,102894],{},[480,102892,102893],{"align":23941},"标签",[480,102895,102896],{"align":23941},"作用",[518,102898,102899,102908,102918,102927,102937,102947,102960,102970],{},[477,102900,102901,102905],{},[523,102902,102903],{"align":23941},[65,102904,102737],{},[523,102906,102907],{"align":23941},"根节点",[477,102909,102910,102915],{},[523,102911,102912],{"align":23941},[65,102913,102914],{},"\u003Coption>",[523,102916,102917],{"align":23941},"仿真参数",[477,102919,102920,102924],{},[523,102921,102922],{"align":23941},[65,102923,102745],{},[523,102925,102926],{"align":23941},"世界中的物体",[477,102928,102929,102934],{},[523,102930,102931],{"align":23941},[65,102932,102933],{},"\u003Cbody>",[523,102935,102936],{"align":23941},"刚体",[477,102938,102939,102944],{},[523,102940,102941],{"align":23941},[65,102942,102943],{},"\u003Cgeom>",[523,102945,102946],{"align":23941},"几何体、碰撞体、可视体",[477,102948,102949,102957],{},[523,102950,102951,25182,102954],{"align":23941},[65,102952,102953],{},"\u003Cjoint>",[65,102955,102956],{},"\u003Cfreejoint>",[523,102958,102959],{"align":23941},"关节",[477,102961,102962,102967],{},[523,102963,102964],{"align":23941},[65,102965,102966],{},"\u003Csite>",[523,102968,102969],{"align":23941},"标记点",[477,102971,102972,102977],{},[523,102973,102974],{"align":23941},[65,102975,102976],{},"\u003Cactuator>",[523,102978,102979],{"align":23941},"控制器",[19,102981,102982],{},"初学时可以先记住：",[58,102984,102987],{"className":102985,"code":102986,"language":5393,"meta":63},[5391],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[65,102988,102986],{"__ignoreMap":63},[14,102990,100971],{"id":100970},[19,102992,100974],{},[58,102994,102996],{"className":24027,"code":102995,"language":24029,"meta":63,"style":63},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[65,102997,102998],{"__ignoreMap":63},[68,102999,103000,103002,103004,103006,103008,103010,103012,103014],{"class":70,"line":71},[68,103001,24780],{"class":74},[68,103003,26519],{"class":78},[68,103005,24039],{"class":78},[68,103007,26604],{"class":82},[68,103009,102701],{"class":78},[68,103011,101015],{"class":78},[68,103013,102706],{"class":78},[68,103015,103016],{"class":78}," glfw-devel\n",[19,103018,103019],{},"pip:",[58,103021,103022],{"className":24027,"code":101119,"language":24029,"meta":63,"style":63},[65,103023,103024],{"__ignoreMap":63},[68,103025,103026,103028,103030,103032],{"class":70,"line":71},[68,103027,24036],{"class":74},[68,103029,24039],{"class":78},[68,103031,101130],{"class":78},[68,103033,101133],{"class":78},[19,103035,103036],{},"conda:",[58,103038,103040],{"className":24027,"code":103039,"language":24029,"meta":63,"style":63},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[65,103041,103042,103059,103068],{"__ignoreMap":63},[68,103043,103044,103046,103048,103050,103053,103055,103057],{"class":70,"line":71},[68,103045,30531],{"class":74},[68,103047,29377],{"class":78},[68,103049,25319],{"class":82},[68,103051,103052],{"class":78}," mujoco-xml",[68,103054,101175],{"class":78},[68,103056,101178],{"class":82},[68,103058,101181],{"class":82},[68,103060,103061,103063,103065],{"class":70,"line":92},[68,103062,30531],{"class":74},[68,103064,101188],{"class":78},[68,103066,103067],{"class":78}," mujoco-xml\n",[68,103069,103070,103072,103074,103076],{"class":70,"line":1387},[68,103071,24036],{"class":74},[68,103073,24039],{"class":78},[68,103075,101130],{"class":78},[68,103077,101133],{"class":78},[19,103079,101204],{},[23,103081,103082,103085,103090],{},[26,103083,103084],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[26,103086,103087,103088,28588],{},"本章使用基础标签，适用于 ",[65,103089,101227],{},[26,103091,103092],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103094,101245],{"id":101244},[19,103096,103097],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[58,103099,103101],{"className":53268,"code":103100,"language":53270,"meta":63,"style":63},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[65,103102,103103,103117,103125,103130,103138],{"__ignoreMap":63},[68,103104,103105,103107,103109,103111,103113,103115],{"class":70,"line":71},[68,103106,1243],{"class":335},[68,103108,101221],{"class":51501},[68,103110,101975],{"class":74},[68,103112,381],{"class":335},[68,103114,62880],{"class":78},[68,103116,51508],{"class":335},[68,103118,103119,103121,103123],{"class":70,"line":92},[68,103120,52345],{"class":335},[68,103122,102041],{"class":51501},[68,103124,51508],{"class":335},[68,103126,103127],{"class":70,"line":1387},[68,103128,103129],{"class":335},"    ...\n",[68,103131,103132,103134,103136],{"class":70,"line":1402},[68,103133,52618],{"class":335},[68,103135,102041],{"class":51501},[68,103137,51508],{"class":335},[68,103139,103140,103142,103144],{"class":70,"line":1408},[68,103141,51986],{"class":335},[68,103143,101221],{"class":51501},[68,103145,51508],{"class":335},[19,103147,103148,103150,103151,103153,103154,103157],{},[65,103149,52001],{}," 表示刚体。",[65,103152,101320],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[65,103155,103156],{},"joint"," 表示刚体相对父刚体如何运动。",[301,103159,103160],{"id":103160},"层级结构非常重要",[19,103162,103163],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[58,103165,103168],{"className":103166,"code":103167,"language":5393,"meta":63},[5391],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[65,103169,103167],{"__ignoreMap":63},[19,103171,103172,101218,103175,103178,103179,103182],{},[65,103173,103174],{},"red_box_geom",[65,103176,103177],{},"box_center"," 都属于 ",[65,103180,103181],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[58,103184,103186],{"className":53268,"code":103185,"language":53270,"meta":63,"style":63},"\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",[65,103187,103188,103208,103222,103242],{"__ignoreMap":63},[68,103189,103190,103192,103194,103196,103198,103200,103202,103204,103206],{"class":70,"line":71},[68,103191,1243],{"class":335},[68,103193,52001],{"class":51501},[68,103195,15125],{"class":74},[68,103197,381],{"class":335},[68,103199,53692],{"class":78},[68,103201,101306],{"class":74},[68,103203,381],{"class":335},[68,103205,101311],{"class":78},[68,103207,51508],{"class":335},[68,103209,103210,103212,103214,103216,103218,103220],{"class":70,"line":92},[68,103211,52345],{"class":335},[68,103213,101820],{"class":51501},[68,103215,15125],{"class":74},[68,103217,381],{"class":335},[68,103219,102161],{"class":78},[68,103221,101344],{"class":335},[68,103223,103224,103226,103228,103230,103232,103234,103236,103238,103240],{"class":70,"line":1387},[68,103225,52345],{"class":335},[68,103227,101320],{"class":51501},[68,103229,54025],{"class":74},[68,103231,381],{"class":335},[68,103233,53692],{"class":78},[68,103235,101336],{"class":74},[68,103237,381],{"class":335},[68,103239,101341],{"class":78},[68,103241,101344],{"class":335},[68,103243,103244,103246,103248],{"class":70,"line":1402},[68,103245,51986],{"class":335},[68,103247,52001],{"class":51501},[68,103249,51508],{"class":335},[19,103251,103252],{},"含义:",[23,103254,103255,103261,103266,103269],{},[26,103256,103257,103258,103260],{},"创建名为 ",[65,103259,53915],{}," 的刚体",[26,103262,103263,103264],{},"初始位置在世界坐标 ",[65,103265,101369],{},[26,103267,103268],{},"它有一个自由关节",[26,103270,103271],{},"它有一个盒子几何体",[301,103273,103274],{"id":103274},"坐标怎么理解",[19,103276,103277],{},"MuJoCo 默认使用三维坐标：",[58,103279,103282],{"className":103280,"code":103281,"language":5393,"meta":63},[5391],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[65,103283,103281],{"__ignoreMap":63},[19,103285,14838],{},[58,103287,103289],{"className":53268,"code":103288,"language":53270,"meta":63,"style":63},"pos=\"0 0 1\"\n",[65,103290,103291],{"__ignoreMap":63},[68,103292,103293],{"class":70,"line":71},[68,103294,103288],{"class":335},[19,103296,103297],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[301,103299,103301],{"id":103300},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103303,103304,103305,82731,103308,103310],{},"不同 ",[65,103306,103307],{},"type",[65,103309,31697],{}," 含义不同：",[471,103312,103313,103328],{},[474,103314,103315],{},[477,103316,103317,103321,103326],{},[480,103318,103319],{"align":23941},[65,103320,103307],{},[480,103322,103323,103325],{"align":23941},[65,103324,31697],{}," 示例",[480,103327,100901],{"align":23941},[518,103329,103330,103344,103359,103378],{},[477,103331,103332,103336,103341],{},[523,103333,103334],{"align":23941},[65,103335,53915],{},[523,103337,103338],{"align":23941},[65,103339,103340],{},"size=\"0.1 0.2 0.3\"",[523,103342,103343],{"align":23941},"x\u002Fy\u002Fz 半边长，不是完整长度",[477,103345,103346,103351,103356],{},[523,103347,103348],{"align":23941},[65,103349,103350],{},"sphere",[523,103352,103353],{"align":23941},[65,103354,103355],{},"size=\"0.1\"",[523,103357,103358],{"align":23941},"球半径",[477,103360,103361,103366,103371],{},[523,103362,103363],{"align":23941},[65,103364,103365],{},"capsule",[523,103367,103368],{"align":23941},[65,103369,103370],{},"size=\"0.03\"",[523,103372,103373,103374,103377],{"align":23941},"胶囊半径，长度常用 ",[65,103375,103376],{},"fromto"," 指定",[477,103379,103380,103385,103390],{},[523,103381,103382],{"align":23941},[65,103383,103384],{},"plane",[523,103386,103387],{"align":23941},[65,103388,103389],{},"size=\"3 3 0.1\"",[523,103391,103392],{"align":23941},"可视平面大小，通常当地面",[19,103394,103395,103396,103398,103399,103401],{},"最容易踩坑的是 box：",[65,103397,102224],{}," 表示边长大约是 ",[65,103400,32238],{},"，因为 MuJoCo 用的是半边长。",[301,103403,103405],{"id":103404},"site-是什么","site 是什么",[19,103407,103408,103411],{},[65,103409,103410],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[23,103413,103414,103417,103420,103423],{},[26,103415,103416],{},"标记机械臂末端。",[26,103418,103419],{},"标记目标位置。",[26,103421,103422],{},"放传感器或相机参考点。",[26,103424,103425],{},"在 Python 中读取某个关键点的世界坐标。",[19,103427,103428,103429,101218,103432,103435],{},"在后面的 Reacher 任务中，",[65,103430,103431],{},"tip",[65,103433,103434],{},"target"," 就会用 site 表示。",[14,103437,101453],{"id":101452},[58,103439,103441],{"className":30579,"code":103440,"language":30581,"meta":63,"style":63},"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",[65,103442,103443,103449,103459,103463,103467,103475,103480,103484,103488,103492,103497,103501,103506,103511,103516,103521,103525,103529,103533,103537,103541,103545,103557,103569,103577,103581,103596,103611,103615,103628,103643,103656,103669,103673,103689,103693,103697,103708,103720,103732,103744,103748,103752,103764],{"__ignoreMap":63},[68,103444,103445,103447],{"class":70,"line":71},[68,103446,30593],{"class":331},[68,103448,101501],{"class":335},[68,103450,103451,103453,103455,103457],{"class":70,"line":92},[68,103452,30593],{"class":331},[68,103454,31581],{"class":335},[68,103456,31584],{"class":331},[68,103458,31587],{"class":335},[68,103460,103461],{"class":70,"line":1387},[68,103462,2606],{"emptyLinePlaceholder":260},[68,103464,103465],{"class":70,"line":1402},[68,103466,2606],{"emptyLinePlaceholder":260},[68,103468,103469,103471,103473],{"class":70,"line":1408},[68,103470,101514],{"class":82},[68,103472,13769],{"class":331},[68,103474,101519],{"class":78},[68,103476,103477],{"class":70,"line":1422},[68,103478,103479],{"class":78},"\u003Cmujoco model=\"xml_basic\">\n",[68,103481,103482],{"class":70,"line":1428},[68,103483,101529],{"class":78},[68,103485,103486],{"class":70,"line":1519},[68,103487,2606],{"emptyLinePlaceholder":260},[68,103489,103490],{"class":70,"line":1525},[68,103491,101538],{"class":78},[68,103493,103494],{"class":70,"line":1537},[68,103495,103496],{"class":78},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[68,103498,103499],{"class":70,"line":1819},[68,103500,2606],{"emptyLinePlaceholder":260},[68,103502,103503],{"class":70,"line":1824},[68,103504,103505],{"class":78},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[68,103507,103508],{"class":70,"line":1830},[68,103509,103510],{"class":78},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[68,103512,103513],{"class":70,"line":1835},[68,103514,103515],{"class":78},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,103517,103518],{"class":70,"line":1849},[68,103519,103520],{"class":78},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[68,103522,103523],{"class":70,"line":1854},[68,103524,101567],{"class":78},[68,103526,103527],{"class":70,"line":1860},[68,103528,101572],{"class":78},[68,103530,103531],{"class":70,"line":1881},[68,103532,101577],{"class":78},[68,103534,103535],{"class":70,"line":1886},[68,103536,95899],{"class":78},[68,103538,103539],{"class":70,"line":1900},[68,103540,2606],{"emptyLinePlaceholder":260},[68,103542,103543],{"class":70,"line":1905},[68,103544,2606],{"emptyLinePlaceholder":260},[68,103546,103547,103549,103551,103553,103555],{"class":70,"line":1934},[68,103548,32148],{"class":331},[68,103550,2179],{"class":74},[68,103552,101598],{"class":335},[68,103554,95887],{"class":82},[68,103556,3945],{"class":335},[68,103558,103559,103561,103563,103565,103567],{"class":70,"line":1939},[68,103560,101607],{"class":335},[68,103562,381],{"class":331},[68,103564,101612],{"class":335},[68,103566,101514],{"class":82},[68,103568,342],{"class":335},[68,103570,103571,103573,103575],{"class":70,"line":1956},[68,103572,101621],{"class":335},[68,103574,381],{"class":331},[68,103576,101626],{"class":335},[68,103578,103579],{"class":70,"line":1961},[68,103580,2606],{"emptyLinePlaceholder":260},[68,103582,103583,103586,103588,103591,103594],{"class":70,"line":1966},[68,103584,103585],{"class":335},"    box_body_id ",[68,103587,381],{"class":331},[68,103589,103590],{"class":335}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[68,103592,103593],{"class":78},"\"red_box\"",[68,103595,342],{"class":335},[68,103597,103598,103601,103603,103606,103609],{"class":70,"line":1971},[68,103599,103600],{"class":335},"    site_id ",[68,103602,381],{"class":331},[68,103604,103605],{"class":335}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[68,103607,103608],{"class":78},"\"box_center\"",[68,103610,342],{"class":335},[68,103612,103613],{"class":70,"line":1985},[68,103614,2606],{"emptyLinePlaceholder":260},[68,103616,103617,103619,103622,103624,103626],{"class":70,"line":1990},[68,103618,3307],{"class":331},[68,103620,103621],{"class":335}," box_body_id ",[68,103623,1243],{"class":331},[68,103625,4299],{"class":82},[68,103627,3945],{"class":335},[68,103629,103630,103633,103636,103638,103641],{"class":70,"line":2783},[68,103631,103632],{"class":331},"        raise",[68,103634,103635],{"class":82}," RuntimeError",[68,103637,336],{"class":335},[68,103639,103640],{"class":78},"\"body red_box not found\"",[68,103642,342],{"class":335},[68,103644,103645,103647,103650,103652,103654],{"class":70,"line":2797},[68,103646,3307],{"class":331},[68,103648,103649],{"class":335}," site_id ",[68,103651,1243],{"class":331},[68,103653,4299],{"class":82},[68,103655,3945],{"class":335},[68,103657,103658,103660,103662,103664,103667],{"class":70,"line":2805},[68,103659,103632],{"class":331},[68,103661,103635],{"class":82},[68,103663,336],{"class":335},[68,103665,103666],{"class":78},"\"site box_center not found\"",[68,103668,342],{"class":335},[68,103670,103671],{"class":70,"line":2810},[68,103672,2606],{"emptyLinePlaceholder":260},[68,103674,103675,103677,103679,103681,103683,103685,103687],{"class":70,"line":2816},[68,103676,3407],{"class":331},[68,103678,101701],{"class":335},[68,103680,26247],{"class":331},[68,103682,32644],{"class":82},[68,103684,336],{"class":335},[68,103686,1929],{"class":82},[68,103688,30987],{"class":335},[68,103690,103691],{"class":70,"line":2822},[68,103692,101716],{"class":335},[68,103694,103695],{"class":70,"line":2827},[68,103696,2606],{"emptyLinePlaceholder":260},[68,103698,103699,103701,103703,103706],{"class":70,"line":8153},[68,103700,31500],{"class":82},[68,103702,336],{"class":335},[68,103704,103705],{"class":78},"\"simulation time:\"",[68,103707,101678],{"class":335},[68,103709,103710,103712,103714,103717],{"class":70,"line":8177},[68,103711,31500],{"class":82},[68,103713,336],{"class":335},[68,103715,103716],{"class":78},"\"box body position:\"",[68,103718,103719],{"class":335},", data.xpos[box_body_id].copy())\n",[68,103721,103722,103724,103726,103729],{"class":70,"line":8182},[68,103723,31500],{"class":82},[68,103725,336],{"class":335},[68,103727,103728],{"class":78},"\"site position:\"",[68,103730,103731],{"class":335},", data.site_xpos[site_id].copy())\n",[68,103733,103734,103736,103738,103741],{"class":70,"line":8188},[68,103735,31500],{"class":82},[68,103737,336],{"class":335},[68,103739,103740],{"class":78},"\"box qpos:\"",[68,103742,103743],{"class":335},", np.array(data.qpos))\n",[68,103745,103746],{"class":70,"line":8215},[68,103747,2606],{"emptyLinePlaceholder":260},[68,103749,103750],{"class":70,"line":8220},[68,103751,2606],{"emptyLinePlaceholder":260},[68,103753,103754,103756,103758,103760,103762],{"class":70,"line":8226},[68,103755,1738],{"class":331},[68,103757,31421],{"class":82},[68,103759,101759],{"class":331},[68,103761,101762],{"class":78},[68,103763,3945],{"class":335},[68,103765,103766],{"class":70,"line":8238},[68,103767,101769],{"class":335},[19,103769,103770],{},"保存为：",[58,103772,103774],{"className":24027,"code":103773,"language":24029,"meta":63,"style":63},"touch ch2_xml_basic.py\n",[65,103775,103776],{"__ignoreMap":63},[68,103777,103778,103780],{"class":70,"line":71},[68,103779,101483],{"class":74},[68,103781,103782],{"class":78}," ch2_xml_basic.py\n",[19,103784,102501],{},[58,103786,103788],{"className":24027,"code":103787,"language":24029,"meta":63,"style":63},"python ch2_xml_basic.py\n",[65,103789,103790],{"__ignoreMap":63},[68,103791,103792,103794],{"class":70,"line":71},[68,103793,30581],{"class":74},[68,103795,103782],{"class":78},[301,103797,101772],{"id":101772},[19,103799,103800],{},"用名字查找 body：",[58,103802,103804],{"className":30579,"code":103803,"language":30581,"meta":63,"style":63},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[65,103805,103806],{"__ignoreMap":63},[68,103807,103808,103811,103813,103815,103817],{"class":70,"line":71},[68,103809,103810],{"class":335},"box_body_id ",[68,103812,381],{"class":331},[68,103814,103590],{"class":335},[68,103816,103593],{"class":78},[68,103818,342],{"class":335},[19,103820,103821],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103823,103824],{},"用名字查找 site：",[58,103826,103828],{"className":30579,"code":103827,"language":30581,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[65,103829,103830],{"__ignoreMap":63},[68,103831,103832,103835,103837,103839,103841],{"class":70,"line":71},[68,103833,103834],{"class":335},"site_id ",[68,103836,381],{"class":331},[68,103838,103605],{"class":335},[68,103840,103608],{"class":78},[68,103842,342],{"class":335},[19,103844,103845,103846,103849,103850,103853],{},"注意第二个参数是对象类型。查 body 就用 ",[65,103847,103848],{},"mjOBJ_BODY","，查 site 就用 ",[65,103851,103852],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103855,103856],{},"读取世界坐标：",[58,103858,103860],{"className":30579,"code":103859,"language":30581,"meta":63,"style":63},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[65,103861,103862,103867],{"__ignoreMap":63},[68,103863,103864],{"class":70,"line":71},[68,103865,103866],{"class":335},"data.xpos[box_body_id]\n",[68,103868,103869],{"class":70,"line":92},[68,103870,103871],{"class":335},"data.site_xpos[site_id]\n",[19,103873,103874,103877,103878,103881],{},[65,103875,103876],{},"xpos"," 是 body 的世界坐标，",[65,103879,103880],{},"site_xpos"," 是 site 的世界坐标。",[301,103883,101908],{"id":101908},[58,103885,103887],{"className":30579,"code":103886,"language":30581,"meta":63,"style":63},"import mujoco\nimport numpy as np\n",[65,103888,103889,103895],{"__ignoreMap":63},[68,103890,103891,103893],{"class":70,"line":71},[68,103892,30593],{"class":331},[68,103894,101501],{"class":335},[68,103896,103897,103899,103901,103903],{"class":70,"line":92},[68,103898,30593],{"class":331},[68,103900,31581],{"class":335},[68,103902,31584],{"class":331},[68,103904,31587],{"class":335},[19,103906,103907,103908,103911,103912,103915,103916,546,103919,28588],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[65,103909,103910],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[65,103913,103914],{},"as np"," 是习惯写法，后面就可以写 ",[65,103917,103918],{},"np.array(...)",[65,103920,103921],{},"np.round(...)",[58,103923,103924],{"className":30579,"code":101795,"language":30581,"meta":63,"style":63},[65,103925,103926,103934,103938],{"__ignoreMap":63},[68,103927,103928,103930,103932],{"class":70,"line":71},[68,103929,101514],{"class":82},[68,103931,13769],{"class":331},[68,103933,101519],{"class":78},[68,103935,103936],{"class":70,"line":92},[68,103937,101810],{"class":78},[68,103939,103940],{"class":70,"line":1387},[68,103941,95899],{"class":78},[19,103943,103944,103945,28588],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[65,103946,103947],{},"mujoco.MjModel.from_xml_string(XML)",[58,103949,103951],{"className":53268,"code":103950,"language":53270,"meta":63,"style":63},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[65,103952,103953],{"__ignoreMap":63},[68,103954,103955,103957,103959,103961,103963,103965,103967,103969,103972,103974,103976,103979,103981,103983,103986],{"class":70,"line":71},[68,103956,1243],{"class":335},[68,103958,103410],{"class":51501},[68,103960,15125],{"class":74},[68,103962,381],{"class":335},[68,103964,103608],{"class":78},[68,103966,101306],{"class":74},[68,103968,381],{"class":335},[68,103970,103971],{"class":78},"\"0 0 0\"",[68,103973,101336],{"class":74},[68,103975,381],{"class":335},[68,103977,103978],{"class":78},"\"0.03\"",[68,103980,78968],{"class":74},[68,103982,381],{"class":335},[68,103984,103985],{"class":78},"\"0 1 0 1\"",[68,103987,101344],{"class":335},[19,103989,103990,103992,103993,103996,103997,103999,104000,104003],{},[65,103991,103410],{}," 是标记点。",[65,103994,103995],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[65,103998,103370],{}," 表示显示出来的小球大小。",[65,104001,104002],{},"rgba=\"0 1 0 1\""," 表示绿色。",[58,104005,104006],{"className":30579,"code":103803,"language":30581,"meta":63,"style":63},[65,104007,104008],{"__ignoreMap":63},[68,104009,104010,104012,104014,104016,104018],{"class":70,"line":71},[68,104011,103810],{"class":335},[68,104013,381],{"class":331},[68,104015,103590],{"class":335},[68,104017,103593],{"class":78},[68,104019,342],{"class":335},[19,104021,104022,104023,104025],{},"这行的作用是：根据名字 ",[65,104024,103593],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104027,104028],{},"拆开看：",[23,104030,104031,104037,104042,104048],{},[26,104032,104033,104036],{},[65,104034,104035],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[26,104038,104039,104041],{},[65,104040,102285],{}," 是被查询的模型。",[26,104043,104044,104047],{},[65,104045,104046],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[26,104049,104050,104052],{},[65,104051,103593],{}," 是 XML 里写的名字。",[58,104054,104055],{"className":30579,"code":103827,"language":30581,"meta":63,"style":63},[65,104056,104057],{"__ignoreMap":63},[68,104058,104059,104061,104063,104065,104067],{"class":70,"line":71},[68,104060,103834],{"class":335},[68,104062,381],{"class":331},[68,104064,103605],{"class":335},[68,104066,103608],{"class":78},[68,104068,342],{"class":335},[19,104070,104071,104072,28588],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[65,104073,103608],{},[58,104075,104077],{"className":30579,"code":104076,"language":30581,"meta":63,"style":63},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[65,104078,104079,104091],{"__ignoreMap":63},[68,104080,104081,104083,104085,104087,104089],{"class":70,"line":71},[68,104082,1738],{"class":331},[68,104084,103621],{"class":335},[68,104086,1243],{"class":331},[68,104088,4299],{"class":82},[68,104090,3945],{"class":335},[68,104092,104093,104096,104098,104100,104102],{"class":70,"line":92},[68,104094,104095],{"class":331},"    raise",[68,104097,103635],{"class":82},[68,104099,336],{"class":335},[68,104101,103640],{"class":78},[68,104103,342],{"class":335},[19,104105,104106,104108,104109,104112,104113,104116,104117,104120],{},[65,104107,1738],{}," 是条件判断。",[65,104110,104111],{},"mj_name2id"," 找不到对象时会返回 ",[65,104114,104115],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[65,104118,104119],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[58,104122,104124],{"className":30579,"code":104123,"language":30581,"meta":63,"style":63},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[65,104125,104126,104142],{"__ignoreMap":63},[68,104127,104128,104130,104132,104134,104136,104138,104140],{"class":70,"line":71},[68,104129,3231],{"class":331},[68,104131,101701],{"class":335},[68,104133,26247],{"class":331},[68,104135,32644],{"class":82},[68,104137,336],{"class":335},[68,104139,1929],{"class":82},[68,104141,30987],{"class":335},[68,104143,104144],{"class":70,"line":92},[68,104145,101899],{"class":335},[19,104147,104148],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[58,104150,104152],{"className":30579,"code":104151,"language":30581,"meta":63,"style":63},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[65,104153,104154],{"__ignoreMap":63},[68,104155,104156,104158,104160,104162],{"class":70,"line":71},[68,104157,30616],{"class":82},[68,104159,336],{"class":335},[68,104161,103716],{"class":78},[68,104163,103719],{"class":335},[19,104165,104166,104168,104169,104172],{},[65,104167,101279],{}," 保存所有 body 的世界坐标。",[65,104170,104171],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[58,104174,104176],{"className":30579,"code":104175,"language":30581,"meta":63,"style":63},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[65,104177,104178],{"__ignoreMap":63},[68,104179,104180,104182,104184,104186],{"class":70,"line":71},[68,104181,30616],{"class":82},[68,104183,336],{"class":335},[68,104185,103728],{"class":78},[68,104187,103731],{"class":335},[19,104189,104190,104193,104194,104196],{},[65,104191,104192],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[65,104195,103177],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[58,104198,104200],{"className":30579,"code":104199,"language":30581,"meta":63,"style":63},"print(\"box qpos:\", np.array(data.qpos))\n",[65,104201,104202],{"__ignoreMap":63},[68,104203,104204,104206,104208,104210],{"class":70,"line":71},[68,104205,30616],{"class":82},[68,104207,336],{"class":335},[68,104209,103740],{"class":78},[68,104211,103743],{"class":335},[19,104213,104214,104215,104218],{},"这里打印广义位置数组。",[65,104216,104217],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104220,102516],{"id":102515},[19,104222,104223,104224,104227,104228,28588],{},"程序会输出 ",[65,104225,104226],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[65,104229,104230],{},"qpos",[19,104232,104233,104235,104236,104239,104240,104243],{},[65,104234,104171],{}," 是 body 的世界坐标位置。",[65,104237,104238],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[65,104241,104242],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104245,82423,104246,82731,104248,104250],{},[65,104247,103177],{},[65,104249,103995],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104252,104253],{},"如果你把 site 改成：",[58,104255,104257],{"className":53268,"code":104256,"language":53270,"meta":63,"style":63},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[65,104258,104259],{"__ignoreMap":63},[68,104260,104261,104263,104265,104267,104269,104272,104274,104276,104279,104281,104283,104285,104287,104289,104291],{"class":70,"line":71},[68,104262,1243],{"class":335},[68,104264,103410],{"class":51501},[68,104266,15125],{"class":74},[68,104268,381],{"class":335},[68,104270,104271],{"class":78},"\"box_top\"",[68,104273,101306],{"class":74},[68,104275,381],{"class":335},[68,104277,104278],{"class":78},"\"0 0 0.15\"",[68,104280,101336],{"class":74},[68,104282,381],{"class":335},[68,104284,103978],{"class":78},[68,104286,78968],{"class":74},[68,104288,381],{"class":335},[68,104290,103985],{"class":78},[68,104292,101344],{"class":335},[19,104294,104295,104296,104299],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[65,104297,104298],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104301,102548],{"id":102547},[23,104303,104304,104313,104316,104323,104329,104340],{},[26,104305,102611,104306,104308,104309,102614,104311,28588],{},[65,104307,103181],{}," 的初始高度从 ",[65,104310,551],{},[65,104312,412],{},[26,104314,104315],{},"重新运行程序。",[26,104317,104318,104319,104322],{},"观察 ",[65,104320,104321],{},"box qpos"," 和最终位置是否变化。",[26,104324,104325,104326,104328],{},"故意把 ",[65,104327,103410],{}," 名称改错，确认程序能报错。",[26,104330,102611,104331,104333,104334,102614,104336,104339],{},[65,104332,101320],{}," 的颜色 ",[65,104335,102232],{},[65,104337,104338],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[26,104341,102611,104342,82731,104344,102614,104347,104350,104351,104353],{},[65,104343,103177],{},[65,104345,104346],{},"pos",[65,104348,104349],{},"0 0 0.2","，观察 ",[65,104352,104298],{}," 如何变化。",[14,104355,102653],{"id":102652},[301,104357,104359],{"id":104358},"xml-error-schema-violation",[65,104360,104361],{},"XML Error: Schema violation",[19,104363,104364],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[301,104366,104368,81491,104370],{"id":104367},"mj_name2id-返回-1",[65,104369,104111],{},[65,104371,104115],{},[19,104373,104374,104375,104378],{},"说明名字没有找到。检查 XML 中 ",[65,104376,104377],{},"name=\"...\"","，并确认对象类型正确。",[301,104380,104381],{"id":104381},"物体不下落",[19,104383,102723],{},[23,104385,104386,104391,104396],{},[26,104387,104388,104389],{},"body 是否有 ",[65,104390,101820],{},[26,104392,104393,104394],{},"gravity 是否为 ",[65,104395,102789],{},[26,104397,104398,104399,104401],{},"body 是否被固定在 ",[65,104400,102041],{}," 中",[301,104403,104404],{"id":104404},"坐标看起来不符合预期",[19,104406,104407],{},"先区分两种坐标：",[471,104409,104410,104419],{},[474,104411,104412],{},[477,104413,104414,104417],{},[480,104415,104416],{"align":23941},"坐标",[480,104418,100901],{"align":23941},[518,104420,104421,104431],{},[477,104422,104423,104428],{},[523,104424,104425,104426],{"align":23941},"XML 里的 ",[65,104427,104346],{},[523,104429,104430],{"align":23941},"相对父 body 的局部坐标",[477,104432,104433,104439],{},[523,104434,104435,25182,104437],{"align":23941},[65,104436,101279],{},[65,104438,104192],{},[523,104440,104441],{"align":23941},"仿真更新后的世界坐标",[19,104443,104444,104445,104447,104448,82740,104451,104453],{},"如果你修改了 ",[65,104446,101270],{},"，但还没调用 ",[65,104449,104450],{},"mj_forward",[65,104452,101415],{},"，世界坐标可能还没有更新。",[14,104455,102807],{"id":102806},[19,104457,104458],{},"MJCF 建模先掌握四件事：",[23,104460,104461,104466,104471,104476],{},[26,104462,104463,104465],{},[65,104464,52001],{}," 表示刚体层级。",[26,104467,104468,104470],{},[65,104469,101320],{}," 表示形状、碰撞和质量。",[26,104472,104473,104475],{},[65,104474,103156],{}," 决定 body 能不能动、怎么动。",[26,104477,104478,104480],{},[65,104479,103410],{}," 用来标记关键点，方便 Python 读取位置。",[19,104482,104483],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[250,104485,104486],{},"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":63,"searchDepth":92,"depth":92,"links":104488},[104489,104490,104491,104497,104501,104502,104503,104510],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":104492},[104493,104494,104495,104496],{"id":103160,"depth":1387,"text":103160},{"id":103274,"depth":1387,"text":103274},{"id":103300,"depth":1387,"text":103301},{"id":103404,"depth":1387,"text":103405},{"id":101452,"depth":92,"text":101453,"children":104498},[104499,104500],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":104504},[104505,104506,104508,104509],{"id":104358,"depth":1387,"text":104361},{"id":104367,"depth":1387,"text":104507},"mj_name2id 返回 -1",{"id":104381,"depth":1387,"text":104381},{"id":104404,"depth":1387,"text":104404},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102854,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104517,"title":104518,"body":104519,"description":63,"extension":258,"meta":106014,"navigation":260,"path":106015,"seo":106016,"stem":106017,"__hash__":106018},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104520,"toc":105986},[104521,104524,104526,104529,104532,104570,104573,104579,104582,104584,104586,104613,104615,104629,104631,104672,104674,104698,104700,104703,104712,104721,104724,104733,104741,104750,104753,104763,104766,104818,104825,104831,104839,104887,104890,104909,104912,104920,104924,104933,104966,104968,105316,105318,105330,105332,105343,105345,105348,105369,105375,105378,105403,105413,105416,105424,105427,105430,105451,105462,105464,105484,105487,105508,105517,105536,105542,105567,105570,105584,105591,105615,105618,105626,105635,105651,105663,105671,105680,105682,105685,105709,105714,105717,105739,105741,105780,105782,105789,105791,105799,105802,105805,105817,105858,105865,105876,105883,105886,105935,105938,105941,105947,105949,105954,105980,105983],[10,104522,104518],{"id":104523},"_3python-控制接口读取状态与推进仿真",[14,104525,100848],{"id":100847},[19,104527,104528],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104530,104531],{},"你将学习:",[23,104533,104534,104539,104544,104548,104553,104564],{},[26,104535,104536],{},[65,104537,104538],{},"MjModel.from_xml_string",[26,104540,104541],{},[65,104542,104543],{},"MjData(model)",[26,104545,104546],{},[65,104547,101415],{},[26,104549,104550],{},[65,104551,104552],{},"mj_resetData",[26,104554,104555,104556,546,104558,546,104561],{},"读取 ",[65,104557,104230],{},[65,104559,104560],{},"qvel",[65,104562,104563],{},"ctrl",[26,104565,104566,104567],{},"使用 ",[65,104568,104569],{},"model.opt.timestep",[19,104571,104572],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[58,104574,104577],{"className":104575,"code":104576,"language":5393,"meta":63},[5391],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[65,104578,104576],{"__ignoreMap":63},[19,104580,104581],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104583,100971],{"id":100970},[19,104585,100974],{},[58,104587,104589],{"className":24027,"code":104588,"language":24029,"meta":63,"style":63},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[65,104590,104591],{"__ignoreMap":63},[68,104592,104593,104595,104597,104599,104601,104604,104606,104608,104610],{"class":70,"line":71},[68,104594,24780],{"class":74},[68,104596,26519],{"class":78},[68,104598,24039],{"class":78},[68,104600,26604],{"class":82},[68,104602,104603],{"class":78}," python3",[68,104605,100999],{"class":78},[68,104607,102701],{"class":78},[68,104609,101015],{"class":78},[68,104611,104612],{"class":78}," glfw\n",[19,104614,103019],{},[58,104616,104617],{"className":24027,"code":101119,"language":24029,"meta":63,"style":63},[65,104618,104619],{"__ignoreMap":63},[68,104620,104621,104623,104625,104627],{"class":70,"line":71},[68,104622,24036],{"class":74},[68,104624,24039],{"class":78},[68,104626,101130],{"class":78},[68,104628,101133],{"class":78},[19,104630,103036],{},[58,104632,104634],{"className":24027,"code":104633,"language":24029,"meta":63,"style":63},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[65,104635,104636,104653,104662],{"__ignoreMap":63},[68,104637,104638,104640,104642,104644,104647,104649,104651],{"class":70,"line":71},[68,104639,30531],{"class":74},[68,104641,29377],{"class":78},[68,104643,25319],{"class":82},[68,104645,104646],{"class":78}," mujoco-python-api",[68,104648,101175],{"class":78},[68,104650,101178],{"class":82},[68,104652,101181],{"class":82},[68,104654,104655,104657,104659],{"class":70,"line":92},[68,104656,30531],{"class":74},[68,104658,101188],{"class":78},[68,104660,104661],{"class":78}," mujoco-python-api\n",[68,104663,104664,104666,104668,104670],{"class":70,"line":1387},[68,104665,24036],{"class":74},[68,104667,24039],{"class":78},[68,104669,101130],{"class":78},[68,104671,101133],{"class":78},[19,104673,101204],{},[23,104675,104676,104683,104692],{},[26,104677,104678,101218,104680,104682],{},[65,104679,100876],{},[65,104681,100881],{}," 是官方 Python bindings 的类名。",[26,104684,104685,104686,104689,104690,28588],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[65,104687,104688],{},"mjModel"," 在 Python 中是 ",[65,104691,100910],{},[26,104693,104694,104695,28588],{},"不要使用 ",[65,104696,104697],{},"sim = mujoco_py.MjSim(...)",[14,104699,101245],{"id":101244},[19,104701,104702],{},"仿真推进核心代码:",[58,104704,104706],{"className":30579,"code":104705,"language":30581,"meta":63,"style":63},"mujoco.mj_step(model, data)\n",[65,104707,104708],{"__ignoreMap":63},[68,104709,104710],{"class":70,"line":71},[68,104711,104705],{"class":335},[19,104713,104714,104715,546,104717,546,104719,28588],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[65,104716,101270],{},[65,104718,101273],{},[65,104720,101267],{},[19,104722,104723],{},"重置仿真:",[58,104725,104727],{"className":30579,"code":104726,"language":30581,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\n",[65,104728,104729],{"__ignoreMap":63},[68,104730,104731],{"class":70,"line":71},[68,104732,104726],{"class":335},[19,104734,104735,104736,82740,104738,104740],{},"如果手动修改了 ",[65,104737,101270],{},[65,104739,101273],{},"，通常应调用:",[58,104742,104744],{"className":30579,"code":104743,"language":30581,"meta":63,"style":63},"mujoco.mj_forward(model, data)\n",[65,104745,104746],{"__ignoreMap":63},[68,104747,104748],{"class":70,"line":71},[68,104749,104743],{"class":335},[19,104751,104752],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[301,104754,104756,546,104758,546,104760,104762],{"id":104755},"qposqvelctrl-是什么",[65,104757,104230],{},[65,104759,104560],{},[65,104761,104563],{}," 是什么",[19,104764,104765],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[471,104767,104768,104780],{},[474,104769,104770],{},[477,104771,104772,104775,104777],{},[480,104773,104774],{"align":23941},"字段",[480,104776,100901],{"align":23941},[480,104778,104779],{"align":23941},"谁来修改",[518,104781,104782,104794,104806],{},[477,104783,104784,104788,104791],{},[523,104785,104786],{"align":23941},[65,104787,101270],{},[523,104789,104790],{"align":23941},"广义位置，例如小车位置、关节角、自由物体位置姿态",[523,104792,104793],{"align":23941},"MuJoCo 更新，也可以手动设置初始状态",[477,104795,104796,104800,104803],{},[523,104797,104798],{"align":23941},[65,104799,101273],{},[523,104801,104802],{"align":23941},"广义速度，例如小车速度、关节角速度",[523,104804,104805],{"align":23941},"MuJoCo 更新，也可以手动清零",[477,104807,104808,104812,104815],{},[523,104809,104810],{"align":23941},[65,104811,101276],{},[523,104813,104814],{"align":23941},"actuator 的控制输入",[523,104816,104817],{"align":23941},"主要由你的控制代码写入",[19,104819,9230,104820,101218,104822,104824],{},[65,104821,104230],{},[65,104823,104560],{}," 不一定同维。自由刚体就是典型例子：",[58,104826,104829],{"className":104827,"code":104828,"language":5393,"meta":63},[5391],"freejoint: qpos 7 维，qvel 6 维\n",[65,104830,104828],{"__ignoreMap":63},[301,104832,104834,101218,104836,104838],{"id":104833},"mj_step-和-mj_forward-的区别",[65,104835,101415],{},[65,104837,104450],{}," 的区别",[471,104840,104841,104854],{},[474,104842,104843],{},[477,104844,104845,104848,104851],{},[480,104846,104847],{"align":23941},"函数",[480,104849,104850],{"align":23941},"是否推进时间",[480,104852,104853],{"align":23941},"什么时候用",[518,104855,104856,104869],{},[477,104857,104858,104863,104866],{},[523,104859,104860],{"align":23941},[65,104861,104862],{},"mj_step(model, data)",[523,104864,104865],{"align":23941},"是",[523,104867,104868],{"align":23941},"正常仿真循环，每调用一次前进一步",[477,104870,104871,104876,104879],{},[523,104872,104873],{"align":23941},[65,104874,104875],{},"mj_forward(model, data)",[523,104877,104878],{"align":23941},"否",[523,104880,104881,104882,546,104884,104886],{"align":23941},"手动改了 ",[65,104883,104230],{},[65,104885,104560],{}," 后，刷新派生量",[19,104888,104889],{},"例如你写：",[58,104891,104893],{"className":30579,"code":104892,"language":30581,"meta":63,"style":63},"data.qpos[2] = 2.0\n",[65,104894,104895],{"__ignoreMap":63},[68,104896,104897,104900,104902,104904,104906],{"class":70,"line":71},[68,104898,104899],{"class":335},"data.qpos[",[68,104901,412],{"class":82},[68,104903,4649],{"class":335},[68,104905,381],{"class":331},[68,104907,104908],{"class":82}," 2.0\n",[19,104910,104911],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[58,104913,104914],{"className":30579,"code":104743,"language":30581,"meta":63,"style":63},[65,104915,104916],{"__ignoreMap":63},[68,104917,104918],{"class":70,"line":71},[68,104919,104743],{"class":335},[301,104921,104923],{"id":104922},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104925,104926,104929,104930,104932],{},[65,104927,104928],{},"mujoco.mj_resetData(model, data)"," 会把 ",[65,104931,33602],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[58,104934,104936],{"className":30579,"code":104935,"language":30581,"meta":63,"style":63},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[65,104937,104938,104942,104952,104962],{"__ignoreMap":63},[68,104939,104940],{"class":70,"line":71},[68,104941,104726],{"class":335},[68,104943,104944,104947,104949],{"class":70,"line":92},[68,104945,104946],{"class":335},"data.qpos[:] ",[68,104948,381],{"class":331},[68,104950,104951],{"class":335}," random_qpos\n",[68,104953,104954,104957,104959],{"class":70,"line":1387},[68,104955,104956],{"class":335},"data.qvel[:] ",[68,104958,381],{"class":331},[68,104960,104961],{"class":82}," 0.0\n",[68,104963,104964],{"class":70,"line":1402},[68,104965,104743],{"class":335},[14,104967,101453],{"id":101452},[58,104969,104971],{"className":30579,"code":104970,"language":30581,"meta":63,"style":63},"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",[65,104972,104973,104979,104989,104993,104997,105005,105010,105014,105018,105022,105027,105031,105036,105041,105046,105050,105054,105058,105062,105066,105070,105089,105096,105108,105119,105135,105151,105155,105159,105171,105183,105191,105195,105206,105210,105226,105230,105234,105243,105247,105252,105261,105265,105278,105283,105292,105296,105300,105312],{"__ignoreMap":63},[68,104974,104975,104977],{"class":70,"line":71},[68,104976,30593],{"class":331},[68,104978,101501],{"class":335},[68,104980,104981,104983,104985,104987],{"class":70,"line":92},[68,104982,30593],{"class":331},[68,104984,31581],{"class":335},[68,104986,31584],{"class":331},[68,104988,31587],{"class":335},[68,104990,104991],{"class":70,"line":1387},[68,104992,2606],{"emptyLinePlaceholder":260},[68,104994,104995],{"class":70,"line":1402},[68,104996,2606],{"emptyLinePlaceholder":260},[68,104998,104999,105001,105003],{"class":70,"line":1408},[68,105000,101514],{"class":82},[68,105002,13769],{"class":331},[68,105004,101519],{"class":78},[68,105006,105007],{"class":70,"line":1422},[68,105008,105009],{"class":78},"\u003Cmujoco model=\"state_api\">\n",[68,105011,105012],{"class":70,"line":1428},[68,105013,101529],{"class":78},[68,105015,105016],{"class":70,"line":1519},[68,105017,2606],{"emptyLinePlaceholder":260},[68,105019,105020],{"class":70,"line":1525},[68,105021,101538],{"class":78},[68,105023,105024],{"class":70,"line":1537},[68,105025,105026],{"class":78},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[68,105028,105029],{"class":70,"line":1819},[68,105030,2606],{"emptyLinePlaceholder":260},[68,105032,105033],{"class":70,"line":1824},[68,105034,105035],{"class":78},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[68,105037,105038],{"class":70,"line":1830},[68,105039,105040],{"class":78},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[68,105042,105043],{"class":70,"line":1835},[68,105044,105045],{"class":78},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[68,105047,105048],{"class":70,"line":1849},[68,105049,101567],{"class":78},[68,105051,105052],{"class":70,"line":1854},[68,105053,101572],{"class":78},[68,105055,105056],{"class":70,"line":1860},[68,105057,101577],{"class":78},[68,105059,105060],{"class":70,"line":1881},[68,105061,95899],{"class":78},[68,105063,105064],{"class":70,"line":1886},[68,105065,2606],{"emptyLinePlaceholder":260},[68,105067,105068],{"class":70,"line":1900},[68,105069,2606],{"emptyLinePlaceholder":260},[68,105071,105072,105074,105077,105080,105082,105085,105087],{"class":70,"line":1905},[68,105073,32148],{"class":331},[68,105075,105076],{"class":74}," print_state",[68,105078,105079],{"class":335},"(prefix: ",[68,105081,1507],{"class":82},[68,105083,105084],{"class":335},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[68,105086,95887],{"class":82},[68,105088,3945],{"class":335},[68,105090,105091,105093],{"class":70,"line":1934},[68,105092,31500],{"class":82},[68,105094,105095],{"class":335},"(prefix)\n",[68,105097,105098,105100,105102,105105],{"class":70,"line":1939},[68,105099,31500],{"class":82},[68,105101,336],{"class":335},[68,105103,105104],{"class":78},"\"  timestep:\"",[68,105106,105107],{"class":335},", model.opt.timestep)\n",[68,105109,105110,105112,105114,105117],{"class":70,"line":1956},[68,105111,31500],{"class":82},[68,105113,336],{"class":335},[68,105115,105116],{"class":78},"\"  time:\"",[68,105118,101678],{"class":335},[68,105120,105121,105123,105125,105128,105131,105133],{"class":70,"line":1961},[68,105122,31500],{"class":82},[68,105124,336],{"class":335},[68,105126,105127],{"class":78},"\"  qpos:\"",[68,105129,105130],{"class":335},", np.round(data.qpos.copy(), ",[68,105132,626],{"class":82},[68,105134,30698],{"class":335},[68,105136,105137,105139,105141,105144,105147,105149],{"class":70,"line":1966},[68,105138,31500],{"class":82},[68,105140,336],{"class":335},[68,105142,105143],{"class":78},"\"  qvel:\"",[68,105145,105146],{"class":335},", np.round(data.qvel.copy(), ",[68,105148,626],{"class":82},[68,105150,30698],{"class":335},[68,105152,105153],{"class":70,"line":1971},[68,105154,2606],{"emptyLinePlaceholder":260},[68,105156,105157],{"class":70,"line":1985},[68,105158,2606],{"emptyLinePlaceholder":260},[68,105160,105161,105163,105165,105167,105169],{"class":70,"line":1990},[68,105162,32148],{"class":331},[68,105164,2179],{"class":74},[68,105166,101598],{"class":335},[68,105168,95887],{"class":82},[68,105170,3945],{"class":335},[68,105172,105173,105175,105177,105179,105181],{"class":70,"line":2783},[68,105174,101607],{"class":335},[68,105176,381],{"class":331},[68,105178,101612],{"class":335},[68,105180,101514],{"class":82},[68,105182,342],{"class":335},[68,105184,105185,105187,105189],{"class":70,"line":2797},[68,105186,101621],{"class":335},[68,105188,381],{"class":331},[68,105190,101626],{"class":335},[68,105192,105193],{"class":70,"line":2805},[68,105194,2606],{"emptyLinePlaceholder":260},[68,105196,105197,105200,105203],{"class":70,"line":2810},[68,105198,105199],{"class":335},"    print_state(",[68,105201,105202],{"class":78},"\"initial\"",[68,105204,105205],{"class":335},", model, data)\n",[68,105207,105208],{"class":70,"line":2816},[68,105209,2606],{"emptyLinePlaceholder":260},[68,105211,105212,105214,105216,105218,105220,105222,105224],{"class":70,"line":2822},[68,105213,3407],{"class":331},[68,105215,101701],{"class":335},[68,105217,26247],{"class":331},[68,105219,32644],{"class":82},[68,105221,336],{"class":335},[68,105223,989],{"class":82},[68,105225,30987],{"class":335},[68,105227,105228],{"class":70,"line":2827},[68,105229,101716],{"class":335},[68,105231,105232],{"class":70,"line":8153},[68,105233,2606],{"emptyLinePlaceholder":260},[68,105235,105236,105238,105241],{"class":70,"line":8177},[68,105237,105199],{"class":335},[68,105239,105240],{"class":78},"\"after 50 steps\"",[68,105242,105205],{"class":335},[68,105244,105245],{"class":70,"line":8182},[68,105246,2606],{"emptyLinePlaceholder":260},[68,105248,105249],{"class":70,"line":8188},[68,105250,105251],{"class":335},"    mujoco.mj_resetData(model, data)\n",[68,105253,105254,105256,105259],{"class":70,"line":8215},[68,105255,105199],{"class":335},[68,105257,105258],{"class":78},"\"after reset\"",[68,105260,105205],{"class":335},[68,105262,105263],{"class":70,"line":8220},[68,105264,2606],{"emptyLinePlaceholder":260},[68,105266,105267,105270,105272,105274,105276],{"class":70,"line":8226},[68,105268,105269],{"class":335},"    data.qpos[",[68,105271,412],{"class":82},[68,105273,4649],{"class":335},[68,105275,381],{"class":331},[68,105277,104908],{"class":82},[68,105279,105280],{"class":70,"line":8238},[68,105281,105282],{"class":335},"    mujoco.mj_forward(model, data)\n",[68,105284,105285,105287,105290],{"class":70,"line":8250},[68,105286,105199],{"class":335},[68,105288,105289],{"class":78},"\"after manual qpos edit\"",[68,105291,105205],{"class":335},[68,105293,105294],{"class":70,"line":8262},[68,105295,2606],{"emptyLinePlaceholder":260},[68,105297,105298],{"class":70,"line":9921},[68,105299,2606],{"emptyLinePlaceholder":260},[68,105301,105302,105304,105306,105308,105310],{"class":70,"line":9946},[68,105303,1738],{"class":331},[68,105305,31421],{"class":82},[68,105307,101759],{"class":331},[68,105309,101762],{"class":78},[68,105311,3945],{"class":335},[68,105313,105314],{"class":70,"line":9969},[68,105315,101769],{"class":335},[19,105317,103770],{},[58,105319,105321],{"className":24027,"code":105320,"language":24029,"meta":63,"style":63},"touch ch3_python_state.py\n",[65,105322,105323],{"__ignoreMap":63},[68,105324,105325,105327],{"class":70,"line":71},[68,105326,101483],{"class":74},[68,105328,105329],{"class":78}," ch3_python_state.py\n",[19,105331,102501],{},[58,105333,105335],{"className":24027,"code":105334,"language":24029,"meta":63,"style":63},"python ch3_python_state.py\n",[65,105336,105337],{"__ignoreMap":63},[68,105338,105339,105341],{"class":70,"line":71},[68,105340,30581],{"class":74},[68,105342,105329],{"class":78},[301,105344,101772],{"id":101772},[19,105346,105347],{},"打印状态的函数：",[58,105349,105351],{"className":30579,"code":105350,"language":30581,"meta":63,"style":63},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[65,105352,105353],{"__ignoreMap":63},[68,105354,105355,105357,105359,105361,105363,105365,105367],{"class":70,"line":71},[68,105356,32148],{"class":331},[68,105358,105076],{"class":74},[68,105360,105079],{"class":335},[68,105362,1507],{"class":82},[68,105364,105084],{"class":335},[68,105366,95887],{"class":82},[68,105368,3945],{"class":335},[19,105370,105371,105372,105374],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[65,105373,33602],{}," 里发生了什么。",[19,105376,105377],{},"推进 50 步：",[58,105379,105381],{"className":30579,"code":105380,"language":30581,"meta":63,"style":63},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[65,105382,105383,105399],{"__ignoreMap":63},[68,105384,105385,105387,105389,105391,105393,105395,105397],{"class":70,"line":71},[68,105386,3231],{"class":331},[68,105388,101701],{"class":335},[68,105390,26247],{"class":331},[68,105392,32644],{"class":82},[68,105394,336],{"class":335},[68,105396,989],{"class":82},[68,105398,30987],{"class":335},[68,105400,105401],{"class":70,"line":92},[68,105402,101899],{"class":335},[19,105404,105405,105406,105409,105410,105412],{},"由于 ",[65,105407,105408],{},"timestep=0.01","，所以 50 步后时间约为 ",[65,105411,35530],{}," 秒。",[19,105414,105415],{},"重置：",[58,105417,105418],{"className":30579,"code":104726,"language":30581,"meta":63,"style":63},[65,105419,105420],{"__ignoreMap":63},[68,105421,105422],{"class":70,"line":71},[68,105423,104726],{"class":335},[19,105425,105426],{},"这会把时间、位置、速度恢复到初始状态。",[19,105428,105429],{},"手动改高度：",[58,105431,105433],{"className":30579,"code":105432,"language":30581,"meta":63,"style":63},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[65,105434,105435,105447],{"__ignoreMap":63},[68,105436,105437,105439,105441,105443,105445],{"class":70,"line":71},[68,105438,104899],{"class":335},[68,105440,412],{"class":82},[68,105442,4649],{"class":335},[68,105444,381],{"class":331},[68,105446,104908],{"class":82},[68,105448,105449],{"class":70,"line":92},[68,105450,104743],{"class":335},[19,105452,105453,105454,105457,105458,105461],{},"这个例子里 ",[65,105455,105456],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[65,105459,105460],{},"2.0"," 表示把小球放到更高的位置。",[301,105463,101908],{"id":101908},[58,105465,105466],{"className":30579,"code":105350,"language":30581,"meta":63,"style":63},[65,105467,105468],{"__ignoreMap":63},[68,105469,105470,105472,105474,105476,105478,105480,105482],{"class":70,"line":71},[68,105471,32148],{"class":331},[68,105473,105076],{"class":74},[68,105475,105079],{"class":335},[68,105477,1507],{"class":82},[68,105479,105084],{"class":335},[68,105481,95887],{"class":82},[68,105483,3945],{"class":335},[19,105485,105486],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[23,105488,105489,105498,105503],{},[26,105490,105491,105494,105495,105497],{},[65,105492,105493],{},"prefix","：一段文字，比如 ",[65,105496,105202],{},"，用来说明现在打印的是哪个阶段。",[26,105499,105500,105502],{},[65,105501,102285],{},"：MuJoCo 模型。",[26,105504,105505,105507],{},[65,105506,33602],{},"：MuJoCo 当前状态。",[19,105509,105510,546,105513,105516],{},[65,105511,105512],{},"prefix: str",[65,105514,105515],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[58,105518,105520],{"className":30579,"code":105519,"language":30581,"meta":63,"style":63},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[65,105521,105522],{"__ignoreMap":63},[68,105523,105524,105526,105528,105530,105532,105534],{"class":70,"line":71},[68,105525,30616],{"class":82},[68,105527,336],{"class":335},[68,105529,105127],{"class":78},[68,105531,105130],{"class":335},[68,105533,626],{"class":82},[68,105535,30698],{"class":335},[19,105537,105538,105541],{},[65,105539,105540],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[58,105543,105545],{"className":30579,"code":105544,"language":30581,"meta":63,"style":63},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[65,105546,105547,105559],{"__ignoreMap":63},[68,105548,105549,105551,105553,105555,105557],{"class":70,"line":71},[68,105550,101834],{"class":335},[68,105552,381],{"class":331},[68,105554,101612],{"class":335},[68,105556,101514],{"class":82},[68,105558,342],{"class":335},[68,105560,105561,105563,105565],{"class":70,"line":92},[68,105562,101858],{"class":335},[68,105564,381],{"class":331},[68,105566,101626],{"class":335},[19,105568,105569],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[58,105571,105573],{"className":30579,"code":105572,"language":30581,"meta":63,"style":63},"print_state(\"initial\", model, data)\n",[65,105574,105575],{"__ignoreMap":63},[68,105576,105577,105580,105582],{"class":70,"line":71},[68,105578,105579],{"class":335},"print_state(",[68,105581,105202],{"class":78},[68,105583,105205],{"class":335},[19,105585,105586,105587,105590],{},"调用刚才定义的 ",[65,105588,105589],{},"print_state"," 函数，打印初始状态。",[58,105592,105593],{"className":30579,"code":105380,"language":30581,"meta":63,"style":63},[65,105594,105595,105611],{"__ignoreMap":63},[68,105596,105597,105599,105601,105603,105605,105607,105609],{"class":70,"line":71},[68,105598,3231],{"class":331},[68,105600,101701],{"class":335},[68,105602,26247],{"class":331},[68,105604,32644],{"class":82},[68,105606,336],{"class":335},[68,105608,989],{"class":82},[68,105610,30987],{"class":335},[68,105612,105613],{"class":70,"line":92},[68,105614,101899],{"class":335},[19,105616,105617],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[58,105619,105620],{"className":30579,"code":104726,"language":30581,"meta":63,"style":63},[65,105621,105622],{"__ignoreMap":63},[68,105623,105624],{"class":70,"line":71},[68,105625,104726],{"class":335},[19,105627,105628,105629,105631,105632,105634],{},"重置 ",[65,105630,33602],{},"。注意它不会重新创建 ",[65,105633,102285],{},"，因为模型结构没有变，只是状态回到初始值。",[58,105636,105637],{"className":30579,"code":104892,"language":30581,"meta":63,"style":63},[65,105638,105639],{"__ignoreMap":63},[68,105640,105641,105643,105645,105647,105649],{"class":70,"line":71},[68,105642,104899],{"class":335},[68,105644,412],{"class":82},[68,105646,4649],{"class":335},[68,105648,381],{"class":331},[68,105650,104908],{"class":82},[19,105652,105653,105654,546,105657,546,105660,105662],{},"这行是“手动改状态”。在 freejoint 中，",[65,105655,105656],{},"qpos[0]",[65,105658,105659],{},"qpos[1]",[65,105661,105456],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[58,105664,105665],{"className":30579,"code":104743,"language":30581,"meta":63,"style":63},[65,105666,105667],{"__ignoreMap":63},[68,105668,105669],{"class":70,"line":71},[68,105670,104743],{"class":335},[19,105672,105673,105674,105676,105677,105679],{},"手动改完 ",[65,105675,104230],{}," 后，调用 ",[65,105678,104450],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105681,102516],{"id":102515},[19,105683,105684],{},"你会看到:",[23,105686,105687,105692,105697,105700],{},[26,105688,105689,105690],{},"初始时间为 ",[65,105691,525],{},[26,105693,105694,105695],{},"50 步后时间约为 ",[65,105696,35530],{},[26,105698,105699],{},"reset 后状态恢复",[26,105701,105702,105703,105706,105707],{},"手动修改 ",[65,105704,105705],{},"data.qpos[2]"," 后，小球高度变为 ",[65,105708,105460],{},[19,105710,105711,105713],{},[65,105712,105456],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105715,105716],{},"输出里可以重点看三件事：",[23,105718,105719,105727,105732],{},[26,105720,105721,105723,105724,105726],{},[65,105722,2593],{}," 是否随着 ",[65,105725,101415],{}," 增加。",[26,105728,105729,105731],{},[65,105730,104230],{}," 的 z 坐标是否因为下落而变化。",[26,105733,105734,105736,105737,28588],{},[65,105735,104552],{}," 后时间是否回到 ",[65,105738,525],{},[14,105740,102548],{"id":102547},[23,105742,105743,105749,105755,105761,105764,105773],{},[26,105744,105745,105746,28588],{},"修改 timestep 为 ",[65,105747,105748],{},"0.005",[26,105750,105751,105752,28588],{},"重新运行，检查 50 步后时间是否约为 ",[65,105753,105754],{},"0.25",[26,105756,105757,105758,28588],{},"修改重力为 ",[65,105759,105760],{},"0 0 -1.0",[26,105762,105763],{},"观察小球下降速度是否变慢。",[26,105765,102611,105766,102614,105769,105772],{},[65,105767,105768],{},"data.qpos[2] = 2.0",[65,105770,105771],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[26,105774,105775,105776,105779],{},"注释掉 ",[65,105777,105778],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105781,102653],{"id":102652},[301,105783,105785,105786,105788],{"id":105784},"修改-dataqpos-后位置没有更新","修改 ",[65,105787,101270],{}," 后位置没有更新",[19,105790,102662],{},[58,105792,105793],{"className":30579,"code":104743,"language":30581,"meta":63,"style":63},[65,105794,105795],{"__ignoreMap":63},[68,105796,105797],{"class":70,"line":71},[68,105798,104743],{"class":335},[301,105800,105801],{"id":105801},"数组维度看不懂",[19,105803,105804],{},"打印模型维度:",[58,105806,105808],{"className":30579,"code":105807,"language":30581,"meta":63,"style":63},"print(model.nq, model.nv, model.nu)\n",[65,105809,105810],{"__ignoreMap":63},[68,105811,105812,105814],{"class":70,"line":71},[68,105813,30616],{"class":82},[68,105815,105816],{"class":335},"(model.nq, model.nv, model.nu)\n",[471,105818,105819,105827],{},[474,105820,105821],{},[477,105822,105823,105825],{},[480,105824,104774],{"align":23941},[480,105826,100901],{"align":23941},[518,105828,105829,105839,105849],{},[477,105830,105831,105836],{},[523,105832,105833],{"align":23941},[65,105834,105835],{},"nq",[523,105837,105838],{"align":23941},"位置变量数量",[477,105840,105841,105846],{},[523,105842,105843],{"align":23941},[65,105844,105845],{},"nv",[523,105847,105848],{"align":23941},"速度变量数量",[477,105850,105851,105855],{},[523,105852,105853],{"align":23941},[65,105854,102362],{},[523,105856,105857],{"align":23941},"控制输入数量",[301,105859,105861,105862,105864],{"id":105860},"误以为-qpos-一定等于关节数","误以为 ",[65,105863,104230],{}," 一定等于关节数",[19,105866,105867,105868,82731,105870,105872,105873,105875],{},"不是。例如 ",[65,105869,101820],{},[65,105871,104230],{}," 是 7 维，但 ",[65,105874,104560],{}," 是 6 维。",[301,105877,105879,105880,105882],{"id":105878},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[65,105881,104230],{}," 的第几位",[19,105884,105885],{},"初学时可以先打印：",[58,105887,105889],{"className":30579,"code":105888,"language":30581,"meta":63,"style":63},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[65,105890,105891,105901,105911,105923],{"__ignoreMap":63},[68,105892,105893,105895,105897,105899],{"class":70,"line":71},[68,105894,30616],{"class":82},[68,105896,336],{"class":335},[68,105898,101639],{"class":78},[68,105900,101642],{"class":335},[68,105902,105903,105905,105907,105909],{"class":70,"line":92},[68,105904,30616],{"class":82},[68,105906,336],{"class":335},[68,105908,101651],{"class":78},[68,105910,101654],{"class":335},[68,105912,105913,105915,105917,105920],{"class":70,"line":1387},[68,105914,30616],{"class":82},[68,105916,336],{"class":335},[68,105918,105919],{"class":78},"\"qpos:\"",[68,105921,105922],{"class":335},", data.qpos)\n",[68,105924,105925,105927,105929,105932],{"class":70,"line":1402},[68,105926,30616],{"class":82},[68,105928,336],{"class":335},[68,105930,105931],{"class":78},"\"qvel:\"",[68,105933,105934],{"class":335},", data.qvel)\n",[19,105936,105937],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[301,105939,105940],{"id":105940},"仿真结果每次都一样",[19,105942,105943,105944,105946],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[65,105945,104230],{},"、目标点或控制输入。",[14,105948,102807],{"id":102806},[19,105950,105951,105952,24822],{},"Python 控制 MuJoCo 的核心就是读写 ",[65,105953,33602],{},[23,105955,105956,105964,105969,105974],{},[26,105957,105958,105959,101218,105961,105963],{},"用 ",[65,105960,101270],{},[65,105962,101273],{}," 读取状态。",[26,105965,105958,105966,105968],{},[65,105967,101276],{}," 写入控制。",[26,105970,105958,105971,105973],{},[65,105972,101415],{}," 推进时间。",[26,105975,105976,105977,105979],{},"手动改状态后用 ",[65,105978,104450],{}," 刷新派生量。",[19,105981,105982],{},"理解这一章后，就可以进入关节和 actuator 控制。",[250,105984,105985],{},"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":63,"searchDepth":92,"depth":92,"links":105987},[105988,105989,105990,105997,106001,106002,106003,106013],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":105991},[105992,105994,105996],{"id":104755,"depth":1387,"text":105993},"qpos、qvel、ctrl 是什么",{"id":104833,"depth":1387,"text":105995},"mj_step 和 mj_forward 的区别",{"id":104922,"depth":1387,"text":104923},{"id":101452,"depth":92,"text":101453,"children":105998},[105999,106000],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":106004},[106005,106007,106008,106010,106012],{"id":105784,"depth":1387,"text":106006},"修改 data.qpos 后位置没有更新",{"id":105801,"depth":1387,"text":105801},{"id":105860,"depth":1387,"text":106009},"误以为 qpos 一定等于关节数",{"id":105878,"depth":1387,"text":106011},"不知道某个元素在 qpos 的第几位",{"id":105940,"depth":1387,"text":105940},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104518,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106020,"title":106021,"body":106022,"description":63,"extension":258,"meta":107712,"navigation":260,"path":107713,"seo":107714,"stem":107715,"__hash__":107716},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106023,"toc":107688},[106024,106027,106029,106032,106034,106059,106062,106081,106084,106086,106088,106112,106114,106128,106130,106171,106173,106197,106199,106202,106236,106238,106251,106254,106322,106331,106335,106338,106372,106378,106381,106385,106424,106427,106447,106451,106494,106496,106525,106528,106534,106537,106539,106933,106935,106947,106949,106960,106962,106965,106994,107002,107005,107040,107043,107045,107053,107056,107058,107069,107079,107099,107102,107138,107150,107198,107217,107259,107272,107300,107305,107326,107336,107354,107357,107391,107394,107414,107417,107436,107442,107444,107447,107453,107459,107469,107472,107478,107487,107489,107535,107537,107543,107549,107552,107555,107575,107578,107584,107590,107592,107615,107618,107621,107630,107633,107671,107673,107676,107682,107685],[10,106025,106021],{"id":106026},"_4关节actuator-与力控制",[14,106028,100848],{"id":100847},[19,106030,106031],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106033,104531],{},[23,106035,106036,106042,106047,106051,106056],{},[26,106037,106038,106041],{},[65,106039,106040],{},"hinge"," 关节",[26,106043,106044],{},[65,106045,106046],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[26,106048,106049],{},[65,106050,101276],{},[26,106052,106053],{},[65,106054,106055],{},"ctrlrange",[26,106057,106058],{},"读取关节角和角速度",[19,106060,106061],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[58,106063,106065],{"className":30579,"code":106064,"language":30581,"meta":63,"style":63},"data.ctrl[0] = ...\n",[65,106066,106067],{"__ignoreMap":63},[68,106068,106069,106072,106074,106076,106078],{"class":70,"line":71},[68,106070,106071],{"class":335},"data.ctrl[",[68,106073,525],{"class":82},[68,106075,4649],{"class":335},[68,106077,381],{"class":331},[68,106079,106080],{"class":82}," ...\n",[19,106082,106083],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106085,100971],{"id":100970},[19,106087,100974],{},[58,106089,106090],{"className":24027,"code":104588,"language":24029,"meta":63,"style":63},[65,106091,106092],{"__ignoreMap":63},[68,106093,106094,106096,106098,106100,106102,106104,106106,106108,106110],{"class":70,"line":71},[68,106095,24780],{"class":74},[68,106097,26519],{"class":78},[68,106099,24039],{"class":78},[68,106101,26604],{"class":82},[68,106103,104603],{"class":78},[68,106105,100999],{"class":78},[68,106107,102701],{"class":78},[68,106109,101015],{"class":78},[68,106111,104612],{"class":78},[19,106113,103019],{},[58,106115,106116],{"className":24027,"code":101119,"language":24029,"meta":63,"style":63},[65,106117,106118],{"__ignoreMap":63},[68,106119,106120,106122,106124,106126],{"class":70,"line":71},[68,106121,24036],{"class":74},[68,106123,24039],{"class":78},[68,106125,101130],{"class":78},[68,106127,101133],{"class":78},[19,106129,103036],{},[58,106131,106133],{"className":24027,"code":106132,"language":24029,"meta":63,"style":63},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[65,106134,106135,106152,106161],{"__ignoreMap":63},[68,106136,106137,106139,106141,106143,106146,106148,106150],{"class":70,"line":71},[68,106138,30531],{"class":74},[68,106140,29377],{"class":78},[68,106142,25319],{"class":82},[68,106144,106145],{"class":78}," mujoco-control",[68,106147,101175],{"class":78},[68,106149,101178],{"class":82},[68,106151,101181],{"class":82},[68,106153,106154,106156,106158],{"class":70,"line":92},[68,106155,30531],{"class":74},[68,106157,101188],{"class":78},[68,106159,106160],{"class":78}," mujoco-control\n",[68,106162,106163,106165,106167,106169],{"class":70,"line":1387},[68,106164,24036],{"class":74},[68,106166,24039],{"class":78},[68,106168,101130],{"class":78},[68,106170,101133],{"class":78},[19,106172,101204],{},[23,106174,106175,106181,106188,106194],{},[26,106176,106177,106180],{},[65,106178,106179],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[26,106182,106183,106185,106186,28588],{},[65,106184,101276],{}," 长度等于 ",[65,106187,102358],{},[26,106189,82423,106190,106193],{},[65,106191,106192],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[26,106195,106196],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106198,101245],{"id":101244},[19,106200,106201],{},"关节决定 body 如何运动:",[58,106203,106205],{"className":53268,"code":106204,"language":53270,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[65,106206,106207],{"__ignoreMap":63},[68,106208,106209,106211,106213,106215,106217,106220,106222,106224,106226,106229,106231,106234],{"class":70,"line":71},[68,106210,1243],{"class":335},[68,106212,103156],{"class":51501},[68,106214,15125],{"class":74},[68,106216,381],{"class":335},[68,106218,106219],{"class":78},"\"hinge\"",[68,106221,54025],{"class":74},[68,106223,381],{"class":335},[68,106225,106219],{"class":78},[68,106227,106228],{"class":74}," axis",[68,106230,381],{"class":335},[68,106232,106233],{"class":78},"\"0 1 0\"",[68,106235,101344],{"class":335},[19,106237,103252],{},[23,106239,106240,106245,106248],{},[26,106241,106242,106243],{},"名字是 ",[65,106244,106040],{},[26,106246,106247],{},"类型是旋转关节",[26,106249,106250],{},"绕 y 轴旋转",[19,106252,106253],{},"actuator 决定如何施加控制:",[58,106255,106257],{"className":53268,"code":106256,"language":53270,"meta":63,"style":63},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[65,106258,106259,106268,106314],{"__ignoreMap":63},[68,106260,106261,106263,106266],{"class":70,"line":71},[68,106262,1243],{"class":335},[68,106264,106265],{"class":51501},"actuator",[68,106267,51508],{"class":335},[68,106269,106270,106272,106275,106277,106279,106282,106285,106287,106289,106292,106294,106296,106299,106301,106304,106307,106309,106312],{"class":70,"line":92},[68,106271,52345],{"class":335},[68,106273,106274],{"class":51501},"motor",[68,106276,15125],{"class":74},[68,106278,381],{"class":335},[68,106280,106281],{"class":78},"\"hinge_motor\"",[68,106283,106284],{"class":74}," joint",[68,106286,381],{"class":335},[68,106288,106219],{"class":78},[68,106290,106291],{"class":74}," gear",[68,106293,381],{"class":335},[68,106295,3884],{"class":78},[68,106297,106298],{"class":74}," ctrlrange",[68,106300,381],{"class":335},[68,106302,106303],{"class":78},"\"-2 2\"",[68,106305,106306],{"class":74}," ctrllimited",[68,106308,381],{"class":335},[68,106310,106311],{"class":78},"\"true\"",[68,106313,101344],{"class":335},[68,106315,106316,106318,106320],{"class":70,"line":1387},[68,106317,51986],{"class":335},[68,106319,106265],{"class":51501},[68,106321,51508],{"class":335},[19,106323,106324,106327,106328,28588],{},[65,106325,106326],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[65,106329,106330],{},"[-2, 2]",[301,106332,106334],{"id":106333},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106336,106337],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[471,106339,106340,106350],{},[474,106341,106342],{},[477,106343,106344,106346,106348],{},[480,106345,25957],{"align":23941},[480,106347,102896],{"align":23941},[480,106349,100935],{"align":23941},[518,106351,106352,106362],{},[477,106353,106354,106356,106359],{},[523,106355,103156],{"align":23941},[523,106357,106358],{"align":23941},"定义能怎么动",[523,106360,106361],{"align":23941},"门轴允许门旋转",[477,106363,106364,106366,106369],{},[523,106365,106265],{"align":23941},[523,106367,106368],{"align":23941},"定义怎么施力或控制",[523,106370,106371],{"align":23941},"人推门、马达带动门",[19,106373,106374,106375,106377],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[65,106376,101276],{}," 主动控制它。",[19,106379,106380],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[301,106382,106384],{"id":106383},"hinge-joint","hinge joint",[58,106386,106388],{"className":53268,"code":106387,"language":53270,"meta":63,"style":63},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[65,106389,106390],{"__ignoreMap":63},[68,106391,106392,106394,106396,106398,106400,106402,106404,106406,106408,106410,106412,106414,106417,106419,106422],{"class":70,"line":71},[68,106393,1243],{"class":335},[68,106395,103156],{"class":51501},[68,106397,15125],{"class":74},[68,106399,381],{"class":335},[68,106401,106219],{"class":78},[68,106403,54025],{"class":74},[68,106405,381],{"class":335},[68,106407,106219],{"class":78},[68,106409,106228],{"class":74},[68,106411,381],{"class":335},[68,106413,106233],{"class":78},[68,106415,106416],{"class":74}," damping",[68,106418,381],{"class":335},[68,106420,106421],{"class":78},"\"0.1\"",[68,106423,101344],{"class":335},[19,106425,106426],{},"含义：",[23,106428,106429,106435,106441],{},[26,106430,106431,106434],{},[65,106432,106433],{},"type=\"hinge\"","：只能绕一个轴旋转。",[26,106436,106437,106440],{},[65,106438,106439],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[26,106442,106443,106446],{},[65,106444,106445],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[301,106448,106450],{"id":106449},"motor-actuator","motor actuator",[58,106452,106454],{"className":53268,"code":106453,"language":53270,"meta":63,"style":63},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[65,106455,106456],{"__ignoreMap":63},[68,106457,106458,106460,106462,106464,106466,106468,106470,106472,106474,106476,106478,106480,106482,106484,106486,106488,106490,106492],{"class":70,"line":71},[68,106459,1243],{"class":335},[68,106461,106274],{"class":51501},[68,106463,15125],{"class":74},[68,106465,381],{"class":335},[68,106467,106281],{"class":78},[68,106469,106284],{"class":74},[68,106471,381],{"class":335},[68,106473,106219],{"class":78},[68,106475,106291],{"class":74},[68,106477,381],{"class":335},[68,106479,3884],{"class":78},[68,106481,106298],{"class":74},[68,106483,381],{"class":335},[68,106485,106303],{"class":78},[68,106487,106306],{"class":74},[68,106489,381],{"class":335},[68,106491,106311],{"class":78},[68,106493,101344],{"class":335},[19,106495,106426],{},[23,106497,106498,106507,106513,106519],{},[26,106499,106500,106503,106504,106506],{},[65,106501,106502],{},"joint=\"hinge\"","：这个电机作用在名为 ",[65,106505,106040],{}," 的关节上。",[26,106508,106509,106512],{},[65,106510,106511],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[26,106514,106515,106518],{},[65,106516,106517],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[26,106520,106521,106524],{},[65,106522,106523],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106526,106527],{},"简单理解：",[58,106529,106532],{"className":106530,"code":106531,"language":5393,"meta":63},[5391],"实际施加效果 ≈ data.ctrl[0] * gear\n",[65,106533,106531],{"__ignoreMap":63},[19,106535,106536],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106538,101453],{"id":101452},[58,106540,106542],{"className":30579,"code":106541,"language":30581,"meta":63,"style":63},"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",[65,106543,106544,106551,106555,106561,106571,106575,106579,106587,106592,106597,106601,106605,106610,106615,106619,106624,106629,106634,106639,106643,106647,106651,106656,106661,106666,106670,106674,106678,106682,106694,106706,106714,106718,106728,106738,106748,106752,106765,106778,106782,106799,106813,106848,106852,106856,106867,106882,106897,106909,106913,106917,106929],{"__ignoreMap":63},[68,106545,106546,106548],{"class":70,"line":71},[68,106547,30593],{"class":331},[68,106549,106550],{"class":335}," math\n",[68,106552,106553],{"class":70,"line":92},[68,106554,2606],{"emptyLinePlaceholder":260},[68,106556,106557,106559],{"class":70,"line":1387},[68,106558,30593],{"class":331},[68,106560,101501],{"class":335},[68,106562,106563,106565,106567,106569],{"class":70,"line":1402},[68,106564,30593],{"class":331},[68,106566,31581],{"class":335},[68,106568,31584],{"class":331},[68,106570,31587],{"class":335},[68,106572,106573],{"class":70,"line":1408},[68,106574,2606],{"emptyLinePlaceholder":260},[68,106576,106577],{"class":70,"line":1422},[68,106578,2606],{"emptyLinePlaceholder":260},[68,106580,106581,106583,106585],{"class":70,"line":1428},[68,106582,101514],{"class":82},[68,106584,13769],{"class":331},[68,106586,101519],{"class":78},[68,106588,106589],{"class":70,"line":1519},[68,106590,106591],{"class":78},"\u003Cmujoco model=\"one_link_motor\">\n",[68,106593,106594],{"class":70,"line":1525},[68,106595,106596],{"class":78},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[68,106598,106599],{"class":70,"line":1537},[68,106600,2606],{"emptyLinePlaceholder":260},[68,106602,106603],{"class":70,"line":1819},[68,106604,101538],{"class":78},[68,106606,106607],{"class":70,"line":1824},[68,106608,106609],{"class":78},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[68,106611,106612],{"class":70,"line":1830},[68,106613,106614],{"class":78},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[68,106616,106617],{"class":70,"line":1835},[68,106618,2606],{"emptyLinePlaceholder":260},[68,106620,106621],{"class":70,"line":1849},[68,106622,106623],{"class":78},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[68,106625,106626],{"class":70,"line":1854},[68,106627,106628],{"class":78},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,106630,106631],{"class":70,"line":1860},[68,106632,106633],{"class":78},"        \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",[68,106635,106636],{"class":70,"line":1881},[68,106637,106638],{"class":78},"      \u003C\u002Fbody>\n",[68,106640,106641],{"class":70,"line":1886},[68,106642,101567],{"class":78},[68,106644,106645],{"class":70,"line":1900},[68,106646,101572],{"class":78},[68,106648,106649],{"class":70,"line":1905},[68,106650,2606],{"emptyLinePlaceholder":260},[68,106652,106653],{"class":70,"line":1934},[68,106654,106655],{"class":78},"  \u003Cactuator>\n",[68,106657,106658],{"class":70,"line":1939},[68,106659,106660],{"class":78},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[68,106662,106663],{"class":70,"line":1956},[68,106664,106665],{"class":78},"  \u003C\u002Factuator>\n",[68,106667,106668],{"class":70,"line":1961},[68,106669,101577],{"class":78},[68,106671,106672],{"class":70,"line":1966},[68,106673,95899],{"class":78},[68,106675,106676],{"class":70,"line":1971},[68,106677,2606],{"emptyLinePlaceholder":260},[68,106679,106680],{"class":70,"line":1985},[68,106681,2606],{"emptyLinePlaceholder":260},[68,106683,106684,106686,106688,106690,106692],{"class":70,"line":1990},[68,106685,32148],{"class":331},[68,106687,2179],{"class":74},[68,106689,101598],{"class":335},[68,106691,95887],{"class":82},[68,106693,3945],{"class":335},[68,106695,106696,106698,106700,106702,106704],{"class":70,"line":2783},[68,106697,101607],{"class":335},[68,106699,381],{"class":331},[68,106701,101612],{"class":335},[68,106703,101514],{"class":82},[68,106705,342],{"class":335},[68,106707,106708,106710,106712],{"class":70,"line":2797},[68,106709,101621],{"class":335},[68,106711,381],{"class":331},[68,106713,101626],{"class":335},[68,106715,106716],{"class":70,"line":2805},[68,106717,2606],{"emptyLinePlaceholder":260},[68,106719,106720,106722,106724,106726],{"class":70,"line":2810},[68,106721,31500],{"class":82},[68,106723,336],{"class":335},[68,106725,101639],{"class":78},[68,106727,101642],{"class":335},[68,106729,106730,106732,106734,106736],{"class":70,"line":2816},[68,106731,31500],{"class":82},[68,106733,336],{"class":335},[68,106735,101651],{"class":78},[68,106737,101654],{"class":335},[68,106739,106740,106742,106744,106746],{"class":70,"line":2822},[68,106741,31500],{"class":82},[68,106743,336],{"class":335},[68,106745,101663],{"class":78},[68,106747,101666],{"class":335},[68,106749,106750],{"class":70,"line":2827},[68,106751,2606],{"emptyLinePlaceholder":260},[68,106753,106754,106756,106759,106761,106763],{"class":70,"line":8153},[68,106755,3307],{"class":331},[68,106757,106758],{"class":335}," model.nu ",[68,106760,21153],{"class":331},[68,106762,25322],{"class":82},[68,106764,3945],{"class":335},[68,106766,106767,106769,106771,106773,106776],{"class":70,"line":8177},[68,106768,103632],{"class":331},[68,106770,103635],{"class":82},[68,106772,336],{"class":335},[68,106774,106775],{"class":78},"\"expected exactly one actuator\"",[68,106777,342],{"class":335},[68,106779,106780],{"class":70,"line":8182},[68,106781,2606],{"emptyLinePlaceholder":260},[68,106783,106784,106786,106788,106790,106792,106794,106797],{"class":70,"line":8188},[68,106785,3407],{"class":331},[68,106787,31817],{"class":335},[68,106789,26247],{"class":331},[68,106791,32644],{"class":82},[68,106793,336],{"class":335},[68,106795,106796],{"class":82},"2000",[68,106798,30987],{"class":335},[68,106800,106801,106804,106806,106808,106810],{"class":70,"line":8215},[68,106802,106803],{"class":335},"        t ",[68,106805,381],{"class":331},[68,106807,31817],{"class":335},[68,106809,788],{"class":331},[68,106811,106812],{"class":335}," model.opt.timestep\n",[68,106814,106815,106818,106820,106822,106824,106827,106829,106832,106834,106836,106839,106841,106843,106845],{"class":70,"line":8220},[68,106816,106817],{"class":335},"        data.ctrl[",[68,106819,525],{"class":82},[68,106821,4649],{"class":335},[68,106823,381],{"class":331},[68,106825,106826],{"class":82}," 1.5",[68,106828,6723],{"class":331},[68,106830,106831],{"class":335}," math.sin(",[68,106833,105460],{"class":82},[68,106835,6723],{"class":331},[68,106837,106838],{"class":335}," math.pi ",[68,106840,788],{"class":331},[68,106842,62068],{"class":82},[68,106844,6723],{"class":331},[68,106846,106847],{"class":335}," t)\n",[68,106849,106850],{"class":70,"line":8226},[68,106851,101716],{"class":335},[68,106853,106854],{"class":70,"line":8238},[68,106855,2606],{"emptyLinePlaceholder":260},[68,106857,106858,106860,106862,106865],{"class":70,"line":8250},[68,106859,31500],{"class":82},[68,106861,336],{"class":335},[68,106863,106864],{"class":78},"\"time:\"",[68,106866,101678],{"class":335},[68,106868,106869,106871,106873,106876,106878,106880],{"class":70,"line":8262},[68,106870,31500],{"class":82},[68,106872,336],{"class":335},[68,106874,106875],{"class":78},"\"joint qpos:\"",[68,106877,105130],{"class":335},[68,106879,626],{"class":82},[68,106881,30698],{"class":335},[68,106883,106884,106886,106888,106891,106893,106895],{"class":70,"line":9921},[68,106885,31500],{"class":82},[68,106887,336],{"class":335},[68,106889,106890],{"class":78},"\"joint qvel:\"",[68,106892,105146],{"class":335},[68,106894,626],{"class":82},[68,106896,30698],{"class":335},[68,106898,106899,106901,106903,106906],{"class":70,"line":9946},[68,106900,31500],{"class":82},[68,106902,336],{"class":335},[68,106904,106905],{"class":78},"\"last ctrl:\"",[68,106907,106908],{"class":335},", data.ctrl.copy())\n",[68,106910,106911],{"class":70,"line":9969},[68,106912,2606],{"emptyLinePlaceholder":260},[68,106914,106915],{"class":70,"line":9993},[68,106916,2606],{"emptyLinePlaceholder":260},[68,106918,106919,106921,106923,106925,106927],{"class":70,"line":9998},[68,106920,1738],{"class":331},[68,106922,31421],{"class":82},[68,106924,101759],{"class":331},[68,106926,101762],{"class":78},[68,106928,3945],{"class":335},[68,106930,106931],{"class":70,"line":10003},[68,106932,101769],{"class":335},[19,106934,103770],{},[58,106936,106938],{"className":24027,"code":106937,"language":24029,"meta":63,"style":63},"touch ch4_joint_motor.py\n",[65,106939,106940],{"__ignoreMap":63},[68,106941,106942,106944],{"class":70,"line":71},[68,106943,101483],{"class":74},[68,106945,106946],{"class":78}," ch4_joint_motor.py\n",[19,106948,102501],{},[58,106950,106952],{"className":24027,"code":106951,"language":24029,"meta":63,"style":63},"python ch4_joint_motor.py\n",[65,106953,106954],{"__ignoreMap":63},[68,106955,106956,106958],{"class":70,"line":71},[68,106957,30581],{"class":74},[68,106959,106946],{"class":78},[301,106961,101772],{"id":101772},[19,106963,106964],{},"检查 actuator 数量：",[58,106966,106968],{"className":30579,"code":106967,"language":30581,"meta":63,"style":63},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[65,106969,106970,106982],{"__ignoreMap":63},[68,106971,106972,106974,106976,106978,106980],{"class":70,"line":71},[68,106973,1738],{"class":331},[68,106975,106758],{"class":335},[68,106977,21153],{"class":331},[68,106979,25322],{"class":82},[68,106981,3945],{"class":335},[68,106983,106984,106986,106988,106990,106992],{"class":70,"line":92},[68,106985,104095],{"class":331},[68,106987,103635],{"class":82},[68,106989,336],{"class":335},[68,106991,106775],{"class":78},[68,106993,342],{"class":335},[19,106995,106996,106998,106999,107001],{},[65,106997,102358],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[65,107000,101276],{}," 长度应该是 1。",[19,107003,107004],{},"产生正弦控制信号：",[58,107006,107008],{"className":30579,"code":107007,"language":30581,"meta":63,"style":63},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[65,107009,107010],{"__ignoreMap":63},[68,107011,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038],{"class":70,"line":71},[68,107013,106071],{"class":335},[68,107015,525],{"class":82},[68,107017,4649],{"class":335},[68,107019,381],{"class":331},[68,107021,106826],{"class":82},[68,107023,6723],{"class":331},[68,107025,106831],{"class":335},[68,107027,105460],{"class":82},[68,107029,6723],{"class":331},[68,107031,106838],{"class":335},[68,107033,788],{"class":331},[68,107035,62068],{"class":82},[68,107037,6723],{"class":331},[68,107039,106847],{"class":335},[19,107041,107042],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107044,101873],{},[58,107046,107047],{"className":30579,"code":104705,"language":30581,"meta":63,"style":63},[65,107048,107049],{"__ignoreMap":63},[68,107050,107051],{"class":70,"line":71},[68,107052,104705],{"class":335},[19,107054,107055],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[301,107057,101908],{"id":101908},[58,107059,107061],{"className":30579,"code":107060,"language":30581,"meta":63,"style":63},"import math\n",[65,107062,107063],{"__ignoreMap":63},[68,107064,107065,107067],{"class":70,"line":71},[68,107066,30593],{"class":331},[68,107068,106550],{"class":335},[19,107070,107071,107072,101218,107075,107078],{},"导入 Python 标准库里的数学模块。后面要用 ",[65,107073,107074],{},"math.sin",[65,107076,107077],{},"math.pi"," 生成周期变化的控制信号。",[58,107080,107081],{"className":30579,"code":103886,"language":30581,"meta":63,"style":63},[65,107082,107083,107089],{"__ignoreMap":63},[68,107084,107085,107087],{"class":70,"line":71},[68,107086,30593],{"class":331},[68,107088,101501],{"class":335},[68,107090,107091,107093,107095,107097],{"class":70,"line":92},[68,107092,30593],{"class":331},[68,107094,31581],{"class":335},[68,107096,31584],{"class":331},[68,107098,31587],{"class":335},[19,107100,107101],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[58,107103,107104],{"className":53268,"code":106387,"language":53270,"meta":63,"style":63},[65,107105,107106],{"__ignoreMap":63},[68,107107,107108,107110,107112,107114,107116,107118,107120,107122,107124,107126,107128,107130,107132,107134,107136],{"class":70,"line":71},[68,107109,1243],{"class":335},[68,107111,103156],{"class":51501},[68,107113,15125],{"class":74},[68,107115,381],{"class":335},[68,107117,106219],{"class":78},[68,107119,54025],{"class":74},[68,107121,381],{"class":335},[68,107123,106219],{"class":78},[68,107125,106228],{"class":74},[68,107127,381],{"class":335},[68,107129,106233],{"class":78},[68,107131,106416],{"class":74},[68,107133,381],{"class":335},[68,107135,106421],{"class":78},[68,107137,101344],{"class":335},[19,107139,107140,107141,107143,107144,107146,107147,107149],{},"这行定义关节。",[65,107142,106040],{}," 表示旋转关节。",[65,107145,106439],{}," 表示绕 y 轴旋转。",[65,107148,106445],{}," 表示有一点阻尼，运动不会完全无损耗。",[58,107151,107153],{"className":53268,"code":107152,"language":53270,"meta":63,"style":63},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[65,107154,107155],{"__ignoreMap":63},[68,107156,107157,107159,107161,107163,107165,107168,107170,107172,107175,107178,107180,107183,107185,107187,107189,107191,107193,107196],{"class":70,"line":71},[68,107158,1243],{"class":335},[68,107160,101320],{"class":51501},[68,107162,15125],{"class":74},[68,107164,381],{"class":335},[68,107166,107167],{"class":78},"\"link_geom\"",[68,107169,54025],{"class":74},[68,107171,381],{"class":335},[68,107173,107174],{"class":78},"\"capsule\"",[68,107176,107177],{"class":74}," fromto",[68,107179,381],{"class":335},[68,107181,107182],{"class":78},"\"0 0 0 0 0 0.5\"",[68,107184,101336],{"class":74},[68,107186,381],{"class":335},[68,107188,103978],{"class":78},[68,107190,102201],{"class":74},[68,107192,381],{"class":335},[68,107194,107195],{"class":78},"\"0.5\"",[68,107197,101344],{"class":335},[19,107199,107200,107201,107203,107204,107206,107207,107210,107211,28588,107214,107216],{},"这行定义摆杆的形状。",[65,107202,103365],{}," 是胶囊体，适合表示杆子。",[65,107205,103376],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[65,107208,107209],{},"(0,0,0)"," 延伸到 ",[65,107212,107213],{},"(0,0,0.5)",[65,107215,103370],{}," 是半径。",[58,107218,107219],{"className":53268,"code":106453,"language":53270,"meta":63,"style":63},[65,107220,107221],{"__ignoreMap":63},[68,107222,107223,107225,107227,107229,107231,107233,107235,107237,107239,107241,107243,107245,107247,107249,107251,107253,107255,107257],{"class":70,"line":71},[68,107224,1243],{"class":335},[68,107226,106274],{"class":51501},[68,107228,15125],{"class":74},[68,107230,381],{"class":335},[68,107232,106281],{"class":78},[68,107234,106284],{"class":74},[68,107236,381],{"class":335},[68,107238,106219],{"class":78},[68,107240,106291],{"class":74},[68,107242,381],{"class":335},[68,107244,3884],{"class":78},[68,107246,106298],{"class":74},[68,107248,381],{"class":335},[68,107250,106303],{"class":78},[68,107252,106306],{"class":74},[68,107254,381],{"class":335},[68,107256,106311],{"class":78},[68,107258,101344],{"class":335},[19,107260,107261,107262,107264,107265,107268,107269,107271],{},"这行定义电机。它作用在 ",[65,107263,106040],{}," 关节上。",[65,107266,107267],{},"gear"," 可以理解成放大倍数。",[65,107270,106055],{}," 限制控制输入范围。",[58,107273,107274],{"className":30579,"code":106967,"language":30581,"meta":63,"style":63},[65,107275,107276,107288],{"__ignoreMap":63},[68,107277,107278,107280,107282,107284,107286],{"class":70,"line":71},[68,107279,1738],{"class":331},[68,107281,106758],{"class":335},[68,107283,21153],{"class":331},[68,107285,25322],{"class":82},[68,107287,3945],{"class":335},[68,107289,107290,107292,107294,107296,107298],{"class":70,"line":92},[68,107291,104095],{"class":331},[68,107293,103635],{"class":82},[68,107295,336],{"class":335},[68,107297,106775],{"class":78},[68,107299,342],{"class":335},[19,107301,107302,107304],{},[65,107303,102358],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[58,107306,107308],{"className":30579,"code":107307,"language":30581,"meta":63,"style":63},"for step in range(2000):\n",[65,107309,107310],{"__ignoreMap":63},[68,107311,107312,107314,107316,107318,107320,107322,107324],{"class":70,"line":71},[68,107313,3231],{"class":331},[68,107315,31817],{"class":335},[68,107317,26247],{"class":331},[68,107319,32644],{"class":82},[68,107321,336],{"class":335},[68,107323,106796],{"class":82},[68,107325,30987],{"class":335},[19,107327,107328,107329,107331,107332,107335],{},"循环 2000 步。这里没有用 ",[65,107330,1325],{},"，而是用 ",[65,107333,107334],{},"step","，因为后面要用当前步数计算时间。",[58,107337,107339],{"className":30579,"code":107338,"language":30581,"meta":63,"style":63},"t = step * model.opt.timestep\n",[65,107340,107341],{"__ignoreMap":63},[68,107342,107343,107346,107348,107350,107352],{"class":70,"line":71},[68,107344,107345],{"class":335},"t ",[68,107347,381],{"class":331},[68,107349,31817],{"class":335},[68,107351,788],{"class":331},[68,107353,106812],{"class":335},[19,107355,107356],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[58,107358,107359],{"className":30579,"code":107007,"language":30581,"meta":63,"style":63},[65,107360,107361],{"__ignoreMap":63},[68,107362,107363,107365,107367,107369,107371,107373,107375,107377,107379,107381,107383,107385,107387,107389],{"class":70,"line":71},[68,107364,106071],{"class":335},[68,107366,525],{"class":82},[68,107368,4649],{"class":335},[68,107370,381],{"class":331},[68,107372,106826],{"class":82},[68,107374,6723],{"class":331},[68,107376,106831],{"class":335},[68,107378,105460],{"class":82},[68,107380,6723],{"class":331},[68,107382,106838],{"class":335},[68,107384,788],{"class":331},[68,107386,62068],{"class":82},[68,107388,6723],{"class":331},[68,107390,106847],{"class":335},[19,107392,107393],{},"这行给电机输入一个正弦波。拆开看：",[23,107395,107396,107402,107408],{},[26,107397,107398,107401],{},[65,107399,107400],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[26,107403,107404,107407],{},[65,107405,107406],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[26,107409,107410,107413],{},[65,107411,107412],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107415,107416],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[58,107418,107420],{"className":30579,"code":107419,"language":30581,"meta":63,"style":63},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[65,107421,107422],{"__ignoreMap":63},[68,107423,107424,107426,107428,107430,107432,107434],{"class":70,"line":71},[68,107425,30616],{"class":82},[68,107427,336],{"class":335},[68,107429,106875],{"class":78},[68,107431,105130],{"class":335},[68,107433,626],{"class":82},[68,107435,30698],{"class":335},[19,107437,107438,107439,107441],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[65,107440,101270],{}," 只有一个数。",[14,107443,102516],{"id":102515},[19,107445,107446],{},"输出类似:",[58,107448,107451],{"className":107449,"code":107450,"language":5393,"meta":63},[5391],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[65,107452,107450],{"__ignoreMap":63},[19,107454,107455,107456,107458],{},"这里 ",[65,107457,106326],{}," 是电机输入。",[19,107460,107461,107464,107465,107468],{},[65,107462,107463],{},"joint qpos"," 是关节角度，单位通常是弧度。",[65,107466,107467],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107470,107471],{},"角度单位提示：",[58,107473,107476],{"className":107474,"code":107475,"language":5393,"meta":63},[5391],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[65,107477,107475],{"__ignoreMap":63},[19,107479,107480,107481,107483,107484,107486],{},"如果你看到 ",[65,107482,104230],{}," 是 ",[65,107485,35530],{},"，大约就是 28.6 度。",[14,107488,102548],{"id":102547},[23,107490,107491,107498,107501,107508,107511,107519,107527],{},[26,107492,102611,107493,102614,107495,28588],{},[65,107494,106511],{},[65,107496,107497],{},"gear=\"5\"",[26,107499,107500],{},"重新运行，观察关节运动是否更剧烈。",[26,107502,102611,107503,102614,107505,28588],{},[65,107504,106055],{},[65,107506,107507],{},"-0.2 0.2",[26,107509,107510],{},"重新运行，观察控制能力是否变弱。",[26,107512,107513,107514,107516,107517,28588],{},"去掉 actuator，确认 ",[65,107515,102358],{}," 变成 ",[65,107518,525],{},[26,107520,102611,107521,102614,107523,107526],{},[65,107522,106445],{},[65,107524,107525],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[26,107528,102611,107529,102614,107531,107534],{},[65,107530,106439],{},[65,107532,107533],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107536,102653],{"id":102652},[301,107538,107540],{"id":107539},"indexerror-index-0-is-out-of-bounds",[65,107541,107542],{},"IndexError: index 0 is out of bounds",[19,107544,107545,107546,107548],{},"原因是 ",[65,107547,106192],{},"，没有 actuator。",[301,107550,107551],{"id":107551},"关节几乎不动",[19,107553,107554],{},"可能原因:",[23,107556,107557,107562,107566,107572],{},[26,107558,107559,107561],{},[65,107560,107267],{}," 太小",[26,107563,107564,107561],{},[65,107565,106055],{},[26,107567,107568,107571],{},[65,107569,107570],{},"damping"," 太大",[26,107573,107574],{},"重力方向导致运动不明显",[301,107576,107577],{"id":107577},"模型编译失败",[19,107579,107580,107581,107583],{},"检查 actuator 引用的 ",[65,107582,106502],{}," 是否存在，joint 名称是否拼写一致。",[301,107585,107587,107589],{"id":107586},"datactrl0-写了但没有效果",[65,107588,106326],{}," 写了但没有效果",[19,107591,102775],{},[23,107593,107594,107599,107602,107607,107612],{},[26,107595,107596,107598],{},[65,107597,102358],{}," 是否大于 0。",[26,107600,107601],{},"motor 是否引用了正确 joint。",[26,107603,107604,107606],{},[65,107605,107267],{}," 是否太小。",[26,107608,107609,107611],{},[65,107610,106055],{}," 是否把输入限制得太小。",[26,107613,107614],{},"body 是否真的有可动 joint。",[301,107616,107617],{"id":107617},"控制输入超过范围会怎样",[19,107619,107620],{},"如果设置了：",[58,107622,107624],{"className":53268,"code":107623,"language":53270,"meta":63,"style":63},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[65,107625,107626],{"__ignoreMap":63},[68,107627,107628],{"class":70,"line":71},[68,107629,107623],{"class":335},[19,107631,107632],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[58,107634,107636],{"className":30579,"code":107635,"language":30581,"meta":63,"style":63},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[65,107637,107638,107658],{"__ignoreMap":63},[68,107639,107640,107643,107645,107648,107650,107652,107654,107656],{"class":70,"line":71},[68,107641,107642],{"class":335},"action ",[68,107644,381],{"class":331},[68,107646,107647],{"class":335}," np.clip(action, ",[68,107649,865],{"class":331},[68,107651,105460],{"class":82},[68,107653,12640],{"class":335},[68,107655,105460],{"class":82},[68,107657,342],{"class":335},[68,107659,107660,107662,107664,107666,107668],{"class":70,"line":92},[68,107661,106071],{"class":335},[68,107663,525],{"class":82},[68,107665,4649],{"class":335},[68,107667,381],{"class":331},[68,107669,107670],{"class":335}," action\n",[14,107672,102807],{"id":102806},[19,107674,107675],{},"这一章建立了控制任务的基本形式：",[58,107677,107680],{"className":107678,"code":107679,"language":5393,"meta":63},[5391],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[65,107681,107679],{"__ignoreMap":63},[19,107683,107684],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[250,107686,107687],{},"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":63,"searchDepth":92,"depth":92,"links":107689},[107690,107691,107692,107697,107701,107702,107703,107711],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":107693},[107694,107695,107696],{"id":106333,"depth":1387,"text":106334},{"id":106383,"depth":1387,"text":106384},{"id":106449,"depth":1387,"text":106450},{"id":101452,"depth":92,"text":101453,"children":107698},[107699,107700],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":107704},[107705,107706,107707,107708,107710],{"id":107539,"depth":1387,"text":107542},{"id":107551,"depth":1387,"text":107551},{"id":107577,"depth":1387,"text":107577},{"id":107586,"depth":1387,"text":107709},"data.ctrl[0] 写了但没有效果",{"id":107617,"depth":1387,"text":107617},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106021,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107718,"title":107719,"body":107720,"description":63,"extension":258,"meta":109629,"navigation":260,"path":109630,"seo":109631,"stem":109632,"__hash__":109633},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107721,"toc":109605},[107722,107725,107727,107730,107738,107741,107758,107761,107786,107789,107835,107837,107839,107894,107896,107915,107917,107960,107963,107980,107983,107999,108009,108016,108018,108021,108024,108058,108061,108109,108113,108116,108130,108139,108143,108146,108171,108174,108178,108191,108194,108200,108203,108218,108220,108223,108483,108485,108497,108500,108812,108814,108826,108828,108831,108846,108851,108854,108876,108879,108882,108916,108919,108923,108934,108937,108954,108957,108971,108978,108998,109005,109019,109022,109034,109049,109069,109072,109094,109097,109101,109116,109127,109142,109145,109175,109191,109220,109228,109252,109255,109273,109283,109295,109302,109311,109317,109326,109329,109331,109340,109343,109358,109360,109363,109374,109377,109388,109391,109409,109411,109428,109431,109459,109461,109465,109468,109498,109504,109507,109511,109519,109522,109524,109545,109548,109551,109567,109570,109586,109588,109591,109602],[10,107723,107719],{"id":107724},"_5viewer-可视化与-renderer-离屏渲染",[14,107726,100848],{"id":100847},[19,107728,107729],{},"本章掌握两类可视化方式:",[23,107731,107732,107735],{},[26,107733,107734],{},"交互式 viewer: 适合人工观察仿真",[26,107736,107737],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107739,107740],{},"使用官方接口:",[58,107742,107744],{"className":30579,"code":107743,"language":30581,"meta":63,"style":63},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[65,107745,107746,107753],{"__ignoreMap":63},[68,107747,107748,107750],{"class":70,"line":71},[68,107749,30593],{"class":331},[68,107751,107752],{"class":335}," mujoco.viewer\n",[68,107754,107755],{"class":70,"line":92},[68,107756,107757],{"class":335},"mujoco.viewer.launch_passive(model, data)\n",[19,107759,107760],{},"以及:",[58,107762,107764],{"className":30579,"code":107763,"language":30581,"meta":63,"style":63},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[65,107765,107766,107776],{"__ignoreMap":63},[68,107767,107768,107771,107773],{"class":70,"line":71},[68,107769,107770],{"class":335},"renderer ",[68,107772,381],{"class":331},[68,107774,107775],{"class":335}," mujoco.Renderer(model)\n",[68,107777,107778,107781,107783],{"class":70,"line":92},[68,107779,107780],{"class":335},"image ",[68,107782,381],{"class":331},[68,107784,107785],{"class":335}," renderer.render()\n",[19,107787,107788],{},"新手建议先理解二者区别：",[471,107790,107791,107807],{},[474,107792,107793],{},[477,107794,107795,107798,107801,107804],{},[480,107796,107797],{"align":23941},"工具",[480,107799,107800],{"align":23941},"用途",[480,107802,107803],{"align":23941},"是否打开窗口",[480,107805,107806],{"align":23941},"常见场景",[518,107808,107809,107822],{},[477,107810,107811,107814,107817,107819],{},[523,107812,107813],{"align":23941},"Viewer",[523,107815,107816],{"align":23941},"人眼实时观察仿真",[523,107818,104865],{"align":23941},[523,107820,107821],{"align":23941},"调试模型、看控制效果",[477,107823,107824,107827,107830,107832],{},[523,107825,107826],{"align":23941},"Renderer",[523,107828,107829],{"align":23941},"生成图像数组",[523,107831,104878],{"align":23941},[523,107833,107834],{"align":23941},"保存图片、训练视觉策略、服务器批量采集",[14,107836,100971],{"id":100970},[19,107838,100974],{},[58,107840,107842],{"className":24027,"code":107841,"language":24029,"meta":63,"style":63},"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",[65,107843,107844,107856,107866,107874,107882],{"__ignoreMap":63},[68,107845,107846,107848,107850,107852,107854],{"class":70,"line":71},[68,107847,24780],{"class":74},[68,107849,26519],{"class":78},[68,107851,24039],{"class":78},[68,107853,26604],{"class":82},[68,107855,24882],{"class":82},[68,107857,107858,107860,107862,107864],{"class":70,"line":92},[68,107859,101009],{"class":78},[68,107861,101012],{"class":78},[68,107863,101015],{"class":78},[68,107865,24882],{"class":82},[68,107867,107868,107870,107872],{"class":70,"line":1387},[68,107869,101022],{"class":78},[68,107871,101025],{"class":78},[68,107873,24882],{"class":82},[68,107875,107876,107878,107880],{"class":70,"line":1402},[68,107877,101032],{"class":78},[68,107879,101035],{"class":78},[68,107881,24882],{"class":82},[68,107883,107884,107886,107888,107890,107892],{"class":70,"line":1408},[68,107885,101042],{"class":78},[68,107887,101045],{"class":78},[68,107889,101048],{"class":78},[68,107891,101051],{"class":78},[68,107893,102716],{"class":78},[19,107895,103019],{},[58,107897,107899],{"className":24027,"code":107898,"language":24029,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy pillow\n",[65,107900,107901],{"__ignoreMap":63},[68,107902,107903,107905,107907,107909,107912],{"class":70,"line":71},[68,107904,24036],{"class":74},[68,107906,24039],{"class":78},[68,107908,101130],{"class":78},[68,107910,107911],{"class":78}," numpy",[68,107913,107914],{"class":78}," pillow\n",[19,107916,103036],{},[58,107918,107920],{"className":24027,"code":107919,"language":24029,"meta":63,"style":63},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[65,107921,107922,107939,107948],{"__ignoreMap":63},[68,107923,107924,107926,107928,107930,107933,107935,107937],{"class":70,"line":71},[68,107925,30531],{"class":74},[68,107927,29377],{"class":78},[68,107929,25319],{"class":82},[68,107931,107932],{"class":78}," mujoco-render",[68,107934,101175],{"class":78},[68,107936,101178],{"class":82},[68,107938,101181],{"class":82},[68,107940,107941,107943,107945],{"class":70,"line":92},[68,107942,30531],{"class":74},[68,107944,101188],{"class":78},[68,107946,107947],{"class":78}," mujoco-render\n",[68,107949,107950,107952,107954,107956,107958],{"class":70,"line":1387},[68,107951,24036],{"class":74},[68,107953,24039],{"class":78},[68,107955,101130],{"class":78},[68,107957,107911],{"class":78},[68,107959,107914],{"class":78},[19,107961,107962],{},"离屏渲染后端:",[58,107964,107966],{"className":24027,"code":107965,"language":24029,"meta":63,"style":63},"export MUJOCO_GL=egl\n",[65,107967,107968],{"__ignoreMap":63},[68,107969,107970,107972,107975,107977],{"class":70,"line":71},[68,107971,25246],{"class":331},[68,107973,107974],{"class":335}," MUJOCO_GL",[68,107976,381],{"class":331},[68,107978,107979],{"class":335},"egl\n",[19,107981,107982],{},"或:",[58,107984,107986],{"className":24027,"code":107985,"language":24029,"meta":63,"style":63},"export MUJOCO_GL=osmesa\n",[65,107987,107988],{"__ignoreMap":63},[68,107989,107990,107992,107994,107996],{"class":70,"line":71},[68,107991,25246],{"class":331},[68,107993,107974],{"class":335},[68,107995,381],{"class":331},[68,107997,107998],{"class":335},"osmesa\n",[19,108000,108001,108002,108005,108006,28588],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[65,108003,108004],{},"egl"," 失败，再尝试 ",[65,108007,108008],{},"osmesa",[19,108010,108011,108012,108015],{},"如果你在本机桌面环境运行，通常先不要设置 ",[65,108013,108014],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108017,101245],{"id":101244},[19,108019,108020],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108022,108023],{},"典型 viewer 流程:",[58,108025,108027],{"className":30579,"code":108026,"language":30581,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[65,108028,108029,108042,108049,108053],{"__ignoreMap":63},[68,108030,108031,108034,108037,108039],{"class":70,"line":71},[68,108032,108033],{"class":331},"with",[68,108035,108036],{"class":335}," mujoco.viewer.launch_passive(model, data) ",[68,108038,31584],{"class":331},[68,108040,108041],{"class":335}," viewer:\n",[68,108043,108044,108046],{"class":70,"line":92},[68,108045,2457],{"class":331},[68,108047,108048],{"class":335}," viewer.is_running():\n",[68,108050,108051],{"class":70,"line":1387},[68,108052,101716],{"class":335},[68,108054,108055],{"class":70,"line":1402},[68,108056,108057],{"class":335},"        viewer.sync()\n",[19,108059,108060],{},"典型 renderer 流程:",[58,108062,108064],{"className":30579,"code":108063,"language":30581,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[65,108065,108066,108092,108096,108101],{"__ignoreMap":63},[68,108067,108068,108070,108072,108075,108077,108079,108081,108083,108085,108087,108090],{"class":70,"line":71},[68,108069,107770],{"class":335},[68,108071,381],{"class":331},[68,108073,108074],{"class":335}," mujoco.Renderer(model, ",[68,108076,25185],{"class":5421},[68,108078,381],{"class":331},[68,108080,42543],{"class":82},[68,108082,12640],{"class":335},[68,108084,25181],{"class":5421},[68,108086,381],{"class":331},[68,108088,108089],{"class":82},"640",[68,108091,342],{"class":335},[68,108093,108094],{"class":70,"line":92},[68,108095,104705],{"class":335},[68,108097,108098],{"class":70,"line":1387},[68,108099,108100],{"class":335},"renderer.update_scene(data)\n",[68,108102,108103,108105,108107],{"class":70,"line":1402},[68,108104,107780],{"class":335},[68,108106,381],{"class":331},[68,108108,107785],{"class":335},[301,108110,108112],{"id":108111},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108114,108115],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[58,108117,108119],{"className":30579,"code":108118,"language":30581,"meta":63,"style":63},"mujoco.mj_step(model, data)\nviewer.sync()\n",[65,108120,108121,108125],{"__ignoreMap":63},[68,108122,108123],{"class":70,"line":71},[68,108124,104705],{"class":335},[68,108126,108127],{"class":70,"line":92},[68,108128,108129],{"class":335},"viewer.sync()\n",[19,108131,108132,108134,108135,108138],{},[65,108133,101415],{}," 负责算物理，",[65,108136,108137],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[301,108140,108142],{"id":108141},"为什么要-sleep","为什么要 sleep",[19,108144,108145],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[58,108147,108149],{"className":30579,"code":108148,"language":30581,"meta":63,"style":63},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[65,108150,108151],{"__ignoreMap":63},[68,108152,108153,108156,108158,108161,108163,108166,108168],{"class":70,"line":71},[68,108154,108155],{"class":335},"sleep_time ",[68,108157,381],{"class":331},[68,108159,108160],{"class":335}," model.opt.timestep ",[68,108162,865],{"class":331},[68,108164,108165],{"class":335}," (time.time() ",[68,108167,865],{"class":331},[68,108169,108170],{"class":335}," step_start)\n",[19,108172,108173],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[301,108175,108177],{"id":108176},"renderer-输出是什么","renderer 输出是什么",[58,108179,108181],{"className":30579,"code":108180,"language":30581,"meta":63,"style":63},"image = renderer.render()\n",[65,108182,108183],{"__ignoreMap":63},[68,108184,108185,108187,108189],{"class":70,"line":71},[68,108186,107780],{"class":335},[68,108188,381],{"class":331},[68,108190,107785],{"class":335},[19,108192,108193],{},"得到的是 NumPy 数组，形状通常是：",[58,108195,108198],{"className":108196,"code":108197,"language":5393,"meta":63},[5391],"(height, width, 3)\n",[65,108199,108197],{"__ignoreMap":63},[19,108201,108202],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[58,108204,108206],{"className":30579,"code":108205,"language":30581,"meta":63,"style":63},"Image.fromarray(image).save(\"render_output.png\")\n",[65,108207,108208],{"__ignoreMap":63},[68,108209,108210,108213,108216],{"class":70,"line":71},[68,108211,108212],{"class":335},"Image.fromarray(image).save(",[68,108214,108215],{"class":78},"\"render_output.png\"",[68,108217,342],{"class":335},[14,108219,101453],{"id":101452},[19,108221,108222],{},"交互式 Viewer:",[58,108224,108226],{"className":30579,"code":108225,"language":30581,"meta":63,"style":63},"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",[65,108227,108228,108234,108238,108244,108250,108254,108258,108266,108271,108275,108279,108283,108288,108293,108297,108301,108305,108310,108314,108318,108322,108326,108330,108334,108346,108358,108366,108370,108380,108400,108410,108415,108420,108424,108441,108454,108459,108463,108467,108479],{"__ignoreMap":63},[68,108229,108230,108232],{"class":70,"line":71},[68,108231,30593],{"class":331},[68,108233,32030],{"class":335},[68,108235,108236],{"class":70,"line":92},[68,108237,2606],{"emptyLinePlaceholder":260},[68,108239,108240,108242],{"class":70,"line":1387},[68,108241,30593],{"class":331},[68,108243,101501],{"class":335},[68,108245,108246,108248],{"class":70,"line":1402},[68,108247,30593],{"class":331},[68,108249,107752],{"class":335},[68,108251,108252],{"class":70,"line":1408},[68,108253,2606],{"emptyLinePlaceholder":260},[68,108255,108256],{"class":70,"line":1422},[68,108257,2606],{"emptyLinePlaceholder":260},[68,108259,108260,108262,108264],{"class":70,"line":1428},[68,108261,101514],{"class":82},[68,108263,13769],{"class":331},[68,108265,101519],{"class":78},[68,108267,108268],{"class":70,"line":1519},[68,108269,108270],{"class":78},"\u003Cmujoco model=\"viewer_demo\">\n",[68,108272,108273],{"class":70,"line":1525},[68,108274,101529],{"class":78},[68,108276,108277],{"class":70,"line":1537},[68,108278,2606],{"emptyLinePlaceholder":260},[68,108280,108281],{"class":70,"line":1819},[68,108282,101538],{"class":78},[68,108284,108285],{"class":70,"line":1824},[68,108286,108287],{"class":78},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[68,108289,108290],{"class":70,"line":1830},[68,108291,108292],{"class":78},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,108294,108295],{"class":70,"line":1835},[68,108296,2606],{"emptyLinePlaceholder":260},[68,108298,108299],{"class":70,"line":1849},[68,108300,101552],{"class":78},[68,108302,108303],{"class":70,"line":1854},[68,108304,101557],{"class":78},[68,108306,108307],{"class":70,"line":1860},[68,108308,108309],{"class":78},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[68,108311,108312],{"class":70,"line":1881},[68,108313,101567],{"class":78},[68,108315,108316],{"class":70,"line":1886},[68,108317,101572],{"class":78},[68,108319,108320],{"class":70,"line":1900},[68,108321,101577],{"class":78},[68,108323,108324],{"class":70,"line":1905},[68,108325,95899],{"class":78},[68,108327,108328],{"class":70,"line":1934},[68,108329,2606],{"emptyLinePlaceholder":260},[68,108331,108332],{"class":70,"line":1939},[68,108333,2606],{"emptyLinePlaceholder":260},[68,108335,108336,108338,108340,108342,108344],{"class":70,"line":1956},[68,108337,32148],{"class":331},[68,108339,2179],{"class":74},[68,108341,101598],{"class":335},[68,108343,95887],{"class":82},[68,108345,3945],{"class":335},[68,108347,108348,108350,108352,108354,108356],{"class":70,"line":1961},[68,108349,101607],{"class":335},[68,108351,381],{"class":331},[68,108353,101612],{"class":335},[68,108355,101514],{"class":82},[68,108357,342],{"class":335},[68,108359,108360,108362,108364],{"class":70,"line":1966},[68,108361,101621],{"class":335},[68,108363,381],{"class":331},[68,108365,101626],{"class":335},[68,108367,108368],{"class":70,"line":1971},[68,108369,2606],{"emptyLinePlaceholder":260},[68,108371,108372,108374,108376,108378],{"class":70,"line":1985},[68,108373,34379],{"class":331},[68,108375,108036],{"class":335},[68,108377,31584],{"class":331},[68,108379,108041],{"class":335},[68,108381,108382,108385,108388,108390,108393,108395,108398],{"class":70,"line":1990},[68,108383,108384],{"class":331},"        while",[68,108386,108387],{"class":335}," viewer.is_running() ",[68,108389,30663],{"class":331},[68,108391,108392],{"class":335}," data.time ",[68,108394,1243],{"class":331},[68,108396,108397],{"class":82}," 5.0",[68,108399,3945],{"class":335},[68,108401,108402,108405,108407],{"class":70,"line":2783},[68,108403,108404],{"class":335},"            step_start ",[68,108406,381],{"class":331},[68,108408,108409],{"class":335}," time.time()\n",[68,108411,108412],{"class":70,"line":2797},[68,108413,108414],{"class":335},"            mujoco.mj_step(model, data)\n",[68,108416,108417],{"class":70,"line":2805},[68,108418,108419],{"class":335},"            viewer.sync()\n",[68,108421,108422],{"class":70,"line":2810},[68,108423,2606],{"emptyLinePlaceholder":260},[68,108425,108426,108429,108431,108433,108435,108437,108439],{"class":70,"line":2816},[68,108427,108428],{"class":335},"            sleep_time ",[68,108430,381],{"class":331},[68,108432,108160],{"class":335},[68,108434,865],{"class":331},[68,108436,108165],{"class":335},[68,108438,865],{"class":331},[68,108440,108170],{"class":335},[68,108442,108443,108445,108448,108450,108452],{"class":70,"line":2822},[68,108444,4848],{"class":331},[68,108446,108447],{"class":335}," sleep_time ",[68,108449,1293],{"class":331},[68,108451,4299],{"class":82},[68,108453,3945],{"class":335},[68,108455,108456],{"class":70,"line":2827},[68,108457,108458],{"class":335},"                time.sleep(sleep_time)\n",[68,108460,108461],{"class":70,"line":8153},[68,108462,2606],{"emptyLinePlaceholder":260},[68,108464,108465],{"class":70,"line":8177},[68,108466,2606],{"emptyLinePlaceholder":260},[68,108468,108469,108471,108473,108475,108477],{"class":70,"line":8182},[68,108470,1738],{"class":331},[68,108472,31421],{"class":82},[68,108474,101759],{"class":331},[68,108476,101762],{"class":78},[68,108478,3945],{"class":335},[68,108480,108481],{"class":70,"line":8188},[68,108482,101769],{"class":335},[19,108484,103770],{},[58,108486,108488],{"className":24027,"code":108487,"language":24029,"meta":63,"style":63},"touch ch5_viewer.py\n",[65,108489,108490],{"__ignoreMap":63},[68,108491,108492,108494],{"class":70,"line":71},[68,108493,101483],{"class":74},[68,108495,108496],{"class":78}," ch5_viewer.py\n",[19,108498,108499],{},"离屏 Renderer 保存图片:",[58,108501,108503],{"className":30579,"code":108502,"language":30581,"meta":63,"style":63},"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",[65,108504,108505,108517,108521,108527,108537,108541,108545,108553,108558,108562,108566,108570,108574,108579,108583,108587,108591,108595,108599,108603,108607,108611,108615,108619,108623,108635,108647,108655,108680,108684,108700,108704,108708,108723,108732,108736,108750,108755,108760,108764,108776,108788,108792,108796,108808],{"__ignoreMap":63},[68,108506,108507,108509,108512,108514],{"class":70,"line":71},[68,108508,30938],{"class":331},[68,108510,108511],{"class":335}," pathlib ",[68,108513,30593],{"class":331},[68,108515,108516],{"class":335}," Path\n",[68,108518,108519],{"class":70,"line":92},[68,108520,2606],{"emptyLinePlaceholder":260},[68,108522,108523,108525],{"class":70,"line":1387},[68,108524,30593],{"class":331},[68,108526,101501],{"class":335},[68,108528,108529,108531,108533,108535],{"class":70,"line":1402},[68,108530,30938],{"class":331},[68,108532,47464],{"class":82},[68,108534,47467],{"class":331},[68,108536,47470],{"class":335},[68,108538,108539],{"class":70,"line":1408},[68,108540,2606],{"emptyLinePlaceholder":260},[68,108542,108543],{"class":70,"line":1422},[68,108544,2606],{"emptyLinePlaceholder":260},[68,108546,108547,108549,108551],{"class":70,"line":1428},[68,108548,101514],{"class":82},[68,108550,13769],{"class":331},[68,108552,101519],{"class":78},[68,108554,108555],{"class":70,"line":1519},[68,108556,108557],{"class":78},"\u003Cmujoco model=\"renderer_demo\">\n",[68,108559,108560],{"class":70,"line":1525},[68,108561,101529],{"class":78},[68,108563,108564],{"class":70,"line":1537},[68,108565,2606],{"emptyLinePlaceholder":260},[68,108567,108568],{"class":70,"line":1819},[68,108569,101538],{"class":78},[68,108571,108572],{"class":70,"line":1824},[68,108573,108287],{"class":78},[68,108575,108576],{"class":70,"line":1830},[68,108577,108578],{"class":78},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[68,108580,108581],{"class":70,"line":1835},[68,108582,108292],{"class":78},[68,108584,108585],{"class":70,"line":1849},[68,108586,2606],{"emptyLinePlaceholder":260},[68,108588,108589],{"class":70,"line":1854},[68,108590,101552],{"class":78},[68,108592,108593],{"class":70,"line":1860},[68,108594,101557],{"class":78},[68,108596,108597],{"class":70,"line":1881},[68,108598,108309],{"class":78},[68,108600,108601],{"class":70,"line":1886},[68,108602,101567],{"class":78},[68,108604,108605],{"class":70,"line":1900},[68,108606,101572],{"class":78},[68,108608,108609],{"class":70,"line":1905},[68,108610,101577],{"class":78},[68,108612,108613],{"class":70,"line":1934},[68,108614,95899],{"class":78},[68,108616,108617],{"class":70,"line":1939},[68,108618,2606],{"emptyLinePlaceholder":260},[68,108620,108621],{"class":70,"line":1956},[68,108622,2606],{"emptyLinePlaceholder":260},[68,108624,108625,108627,108629,108631,108633],{"class":70,"line":1961},[68,108626,32148],{"class":331},[68,108628,2179],{"class":74},[68,108630,101598],{"class":335},[68,108632,95887],{"class":82},[68,108634,3945],{"class":335},[68,108636,108637,108639,108641,108643,108645],{"class":70,"line":1966},[68,108638,101607],{"class":335},[68,108640,381],{"class":331},[68,108642,101612],{"class":335},[68,108644,101514],{"class":82},[68,108646,342],{"class":335},[68,108648,108649,108651,108653],{"class":70,"line":1971},[68,108650,101621],{"class":335},[68,108652,381],{"class":331},[68,108654,101626],{"class":335},[68,108656,108657,108660,108662,108664,108666,108668,108670,108672,108674,108676,108678],{"class":70,"line":1985},[68,108658,108659],{"class":335},"    renderer ",[68,108661,381],{"class":331},[68,108663,108074],{"class":335},[68,108665,25185],{"class":5421},[68,108667,381],{"class":331},[68,108669,42543],{"class":82},[68,108671,12640],{"class":335},[68,108673,25181],{"class":5421},[68,108675,381],{"class":331},[68,108677,108089],{"class":82},[68,108679,342],{"class":335},[68,108681,108682],{"class":70,"line":1990},[68,108683,2606],{"emptyLinePlaceholder":260},[68,108685,108686,108688,108690,108692,108694,108696,108698],{"class":70,"line":2783},[68,108687,3407],{"class":331},[68,108689,101701],{"class":335},[68,108691,26247],{"class":331},[68,108693,32644],{"class":82},[68,108695,336],{"class":335},[68,108697,644],{"class":82},[68,108699,30987],{"class":335},[68,108701,108702],{"class":70,"line":2797},[68,108703,101716],{"class":335},[68,108705,108706],{"class":70,"line":2805},[68,108707,2606],{"emptyLinePlaceholder":260},[68,108709,108710,108713,108716,108718,108721],{"class":70,"line":2810},[68,108711,108712],{"class":335},"    renderer.update_scene(data, ",[68,108714,108715],{"class":5421},"camera",[68,108717,381],{"class":331},[68,108719,108720],{"class":78},"\"fixed_camera\"",[68,108722,342],{"class":335},[68,108724,108725,108728,108730],{"class":70,"line":2816},[68,108726,108727],{"class":335},"    image ",[68,108729,381],{"class":331},[68,108731,107785],{"class":335},[68,108733,108734],{"class":70,"line":2822},[68,108735,2606],{"emptyLinePlaceholder":260},[68,108737,108738,108741,108743,108746,108748],{"class":70,"line":2827},[68,108739,108740],{"class":335},"    output_path ",[68,108742,381],{"class":331},[68,108744,108745],{"class":335}," Path(",[68,108747,108215],{"class":78},[68,108749,342],{"class":335},[68,108751,108752],{"class":70,"line":8153},[68,108753,108754],{"class":335},"    Image.fromarray(image).save(output_path)\n",[68,108756,108757],{"class":70,"line":8177},[68,108758,108759],{"class":335},"    renderer.close()\n",[68,108761,108762],{"class":70,"line":8182},[68,108763,2606],{"emptyLinePlaceholder":260},[68,108765,108766,108768,108770,108773],{"class":70,"line":8188},[68,108767,31500],{"class":82},[68,108769,336],{"class":335},[68,108771,108772],{"class":78},"\"saved:\"",[68,108774,108775],{"class":335},", output_path.resolve())\n",[68,108777,108778,108780,108782,108785],{"class":70,"line":8215},[68,108779,31500],{"class":82},[68,108781,336],{"class":335},[68,108783,108784],{"class":78},"\"image shape:\"",[68,108786,108787],{"class":335},", image.shape)\n",[68,108789,108790],{"class":70,"line":8220},[68,108791,2606],{"emptyLinePlaceholder":260},[68,108793,108794],{"class":70,"line":8226},[68,108795,2606],{"emptyLinePlaceholder":260},[68,108797,108798,108800,108802,108804,108806],{"class":70,"line":8238},[68,108799,1738],{"class":331},[68,108801,31421],{"class":82},[68,108803,101759],{"class":331},[68,108805,101762],{"class":78},[68,108807,3945],{"class":335},[68,108809,108810],{"class":70,"line":8250},[68,108811,101769],{"class":335},[19,108813,103770],{},[58,108815,108817],{"className":24027,"code":108816,"language":24029,"meta":63,"style":63},"touch ch5_renderer.py\n",[65,108818,108819],{"__ignoreMap":63},[68,108820,108821,108823],{"class":70,"line":71},[68,108822,101483],{"class":74},[68,108824,108825],{"class":78}," ch5_renderer.py\n",[301,108827,101772],{"id":101772},[19,108829,108830],{},"viewer 上下文：",[58,108832,108834],{"className":30579,"code":108833,"language":30581,"meta":63,"style":63},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[65,108835,108836],{"__ignoreMap":63},[68,108837,108838,108840,108842,108844],{"class":70,"line":71},[68,108839,108033],{"class":331},[68,108841,108036],{"class":335},[68,108843,31584],{"class":331},[68,108845,108041],{"class":335},[19,108847,108848,108850],{},[65,108849,108033],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108852,108853],{},"窗口循环：",[58,108855,108857],{"className":30579,"code":108856,"language":30581,"meta":63,"style":63},"while viewer.is_running() and data.time \u003C 5.0:\n",[65,108858,108859],{"__ignoreMap":63},[68,108860,108861,108864,108866,108868,108870,108872,108874],{"class":70,"line":71},[68,108862,108863],{"class":331},"while",[68,108865,108387],{"class":335},[68,108867,30663],{"class":331},[68,108869,108392],{"class":335},[68,108871,1243],{"class":331},[68,108873,108397],{"class":82},[68,108875,3945],{"class":335},[19,108877,108878],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108880,108881],{},"固定相机：",[58,108883,108885],{"className":53268,"code":108884,"language":53270,"meta":63,"style":63},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[65,108886,108887],{"__ignoreMap":63},[68,108888,108889,108891,108893,108895,108897,108899,108901,108903,108906,108909,108911,108914],{"class":70,"line":71},[68,108890,1243],{"class":335},[68,108892,108715],{"class":51501},[68,108894,15125],{"class":74},[68,108896,381],{"class":335},[68,108898,108720],{"class":78},[68,108900,101306],{"class":74},[68,108902,381],{"class":335},[68,108904,108905],{"class":78},"\"1.5 -2.0 1.2\"",[68,108907,108908],{"class":74}," xyaxes",[68,108910,381],{"class":335},[68,108912,108913],{"class":78},"\"1 0.75 0 0 0 1\"",[68,108915,101344],{"class":335},[19,108917,108918],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[301,108920,108922],{"id":108921},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[58,108924,108926],{"className":30579,"code":108925,"language":30581,"meta":63,"style":63},"import time\n",[65,108927,108928],{"__ignoreMap":63},[68,108929,108930,108932],{"class":70,"line":71},[68,108931,30593],{"class":331},[68,108933,32030],{"class":335},[19,108935,108936],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[58,108938,108940],{"className":30579,"code":108939,"language":30581,"meta":63,"style":63},"import mujoco\nimport mujoco.viewer\n",[65,108941,108942,108948],{"__ignoreMap":63},[68,108943,108944,108946],{"class":70,"line":71},[68,108945,30593],{"class":331},[68,108947,101501],{"class":335},[68,108949,108950,108952],{"class":70,"line":92},[68,108951,30593],{"class":331},[68,108953,107752],{"class":335},[19,108955,108956],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[58,108958,108959],{"className":30579,"code":108833,"language":30581,"meta":63,"style":63},[65,108960,108961],{"__ignoreMap":63},[68,108962,108963,108965,108967,108969],{"class":70,"line":71},[68,108964,108033],{"class":331},[68,108966,108036],{"class":335},[68,108968,31584],{"class":331},[68,108970,108041],{"class":335},[19,108972,108973,108974,108977],{},"打开一个 viewer 窗口。",[65,108975,108976],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[58,108979,108980],{"className":30579,"code":108856,"language":30581,"meta":63,"style":63},[65,108981,108982],{"__ignoreMap":63},[68,108983,108984,108986,108988,108990,108992,108994,108996],{"class":70,"line":71},[68,108985,108863],{"class":331},[68,108987,108387],{"class":335},[68,108989,30663],{"class":331},[68,108991,108392],{"class":335},[68,108993,1243],{"class":331},[68,108995,108397],{"class":82},[68,108997,3945],{"class":335},[19,108999,109000,109001,109004],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[65,109002,109003],{},"viewer.is_running()"," 会变成 false，循环结束。",[58,109006,109008],{"className":30579,"code":109007,"language":30581,"meta":63,"style":63},"step_start = time.time()\n",[65,109009,109010],{"__ignoreMap":63},[68,109011,109012,109015,109017],{"class":70,"line":71},[68,109013,109014],{"class":335},"step_start ",[68,109016,381],{"class":331},[68,109018,108409],{"class":335},[19,109020,109021],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[58,109023,109024],{"className":30579,"code":108118,"language":30581,"meta":63,"style":63},[65,109025,109026,109030],{"__ignoreMap":63},[68,109027,109028],{"class":70,"line":71},[68,109029,104705],{"class":335},[68,109031,109032],{"class":70,"line":92},[68,109033,108129],{"class":335},[19,109035,109036,109038,109039,109041,109042,109044,109045,109048],{},[65,109037,101415],{}," 推进物理仿真。",[65,109040,108137],{}," 把最新的 ",[65,109043,33602],{}," 同步到窗口里显示。没有 ",[65,109046,109047],{},"sync()","，窗口可能看不到最新状态。",[58,109050,109051],{"className":30579,"code":108148,"language":30581,"meta":63,"style":63},[65,109052,109053],{"__ignoreMap":63},[68,109054,109055,109057,109059,109061,109063,109065,109067],{"class":70,"line":71},[68,109056,108155],{"class":335},[68,109058,381],{"class":331},[68,109060,108160],{"class":335},[68,109062,865],{"class":331},[68,109064,108165],{"class":335},[68,109066,865],{"class":331},[68,109068,108170],{"class":335},[19,109070,109071],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[58,109073,109075],{"className":30579,"code":109074,"language":30581,"meta":63,"style":63},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[65,109076,109077,109089],{"__ignoreMap":63},[68,109078,109079,109081,109083,109085,109087],{"class":70,"line":71},[68,109080,1738],{"class":331},[68,109082,108447],{"class":335},[68,109084,1293],{"class":331},[68,109086,4299],{"class":82},[68,109088,3945],{"class":335},[68,109090,109091],{"class":70,"line":92},[68,109092,109093],{"class":335},"    time.sleep(sleep_time)\n",[19,109095,109096],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[301,109098,109100],{"id":109099},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[58,109102,109104],{"className":30579,"code":109103,"language":30581,"meta":63,"style":63},"from pathlib import Path\n",[65,109105,109106],{"__ignoreMap":63},[68,109107,109108,109110,109112,109114],{"class":70,"line":71},[68,109109,30938],{"class":331},[68,109111,108511],{"class":335},[68,109113,30593],{"class":331},[68,109115,108516],{"class":335},[19,109117,109118,109119,109122,109123,109126],{},"导入 ",[65,109120,109121],{},"Path","，用来处理文件路径。相比直接写字符串，",[65,109124,109125],{},"Path(\"render_output.png\")"," 更清晰。",[58,109128,109130],{"className":30579,"code":109129,"language":30581,"meta":63,"style":63},"from PIL import Image\n",[65,109131,109132],{"__ignoreMap":63},[68,109133,109134,109136,109138,109140],{"class":70,"line":71},[68,109135,30938],{"class":331},[68,109137,47464],{"class":82},[68,109139,47467],{"class":331},[68,109141,47470],{"class":335},[19,109143,109144],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[58,109146,109147],{"className":53268,"code":108884,"language":53270,"meta":63,"style":63},[65,109148,109149],{"__ignoreMap":63},[68,109150,109151,109153,109155,109157,109159,109161,109163,109165,109167,109169,109171,109173],{"class":70,"line":71},[68,109152,1243],{"class":335},[68,109154,108715],{"class":51501},[68,109156,15125],{"class":74},[68,109158,381],{"class":335},[68,109160,108720],{"class":78},[68,109162,101306],{"class":74},[68,109164,381],{"class":335},[68,109166,108905],{"class":78},[68,109168,108908],{"class":74},[68,109170,381],{"class":335},[68,109172,108913],{"class":78},[68,109174,101344],{"class":335},[19,109176,109177,109178,109180,109181,109183,109184,109187,109188,109190],{},"定义一个相机。",[65,109179,80011],{}," 是相机名字。",[65,109182,104346],{}," 是相机在世界里的位置。",[65,109185,109186],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[65,109189,104346],{}," 来调视角。",[58,109192,109194],{"className":30579,"code":109193,"language":30581,"meta":63,"style":63},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[65,109195,109196],{"__ignoreMap":63},[68,109197,109198,109200,109202,109204,109206,109208,109210,109212,109214,109216,109218],{"class":70,"line":71},[68,109199,107770],{"class":335},[68,109201,381],{"class":331},[68,109203,108074],{"class":335},[68,109205,25185],{"class":5421},[68,109207,381],{"class":331},[68,109209,42543],{"class":82},[68,109211,12640],{"class":335},[68,109213,25181],{"class":5421},[68,109215,381],{"class":331},[68,109217,108089],{"class":82},[68,109219,342],{"class":335},[19,109221,109222,109223,101218,109225,109227],{},"创建离屏渲染器。",[65,109224,25185],{},[65,109226,25181],{}," 决定输出图片大小。",[58,109229,109230],{"className":30579,"code":101876,"language":30581,"meta":63,"style":63},[65,109231,109232,109248],{"__ignoreMap":63},[68,109233,109234,109236,109238,109240,109242,109244,109246],{"class":70,"line":71},[68,109235,3231],{"class":331},[68,109237,101701],{"class":335},[68,109239,26247],{"class":331},[68,109241,32644],{"class":82},[68,109243,336],{"class":335},[68,109245,644],{"class":82},[68,109247,30987],{"class":335},[68,109249,109250],{"class":70,"line":92},[68,109251,101899],{"class":335},[19,109253,109254],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[58,109256,109258],{"className":30579,"code":109257,"language":30581,"meta":63,"style":63},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[65,109259,109260],{"__ignoreMap":63},[68,109261,109262,109265,109267,109269,109271],{"class":70,"line":71},[68,109263,109264],{"class":335},"renderer.update_scene(data, ",[68,109266,108715],{"class":5421},[68,109268,381],{"class":331},[68,109270,108720],{"class":78},[68,109272,342],{"class":335},[19,109274,109275,109276,109278,109279,109282],{},"告诉 renderer：用当前 ",[65,109277,33602],{}," 的状态更新画面，并使用名为 ",[65,109280,109281],{},"fixed_camera"," 的相机视角。",[58,109284,109285],{"className":30579,"code":108180,"language":30581,"meta":63,"style":63},[65,109286,109287],{"__ignoreMap":63},[68,109288,109289,109291,109293],{"class":70,"line":71},[68,109290,107780],{"class":335},[68,109292,381],{"class":331},[68,109294,107785],{"class":335},[19,109296,109297,109298,109301],{},"真正渲染出图像。",[65,109299,109300],{},"image"," 是一个 NumPy 数组，不是文件。",[58,109303,109305],{"className":30579,"code":109304,"language":30581,"meta":63,"style":63},"Image.fromarray(image).save(output_path)\n",[65,109306,109307],{"__ignoreMap":63},[68,109308,109309],{"class":70,"line":71},[68,109310,109304],{"class":335},[19,109312,109313,109314,28588],{},"把数组转换成图片，并保存到 ",[65,109315,109316],{},"render_output.png",[58,109318,109320],{"className":30579,"code":109319,"language":30581,"meta":63,"style":63},"renderer.close()\n",[65,109321,109322],{"__ignoreMap":63},[68,109323,109324],{"class":70,"line":71},[68,109325,109319],{"class":335},[19,109327,109328],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109330,102516],{"id":102515},[19,109332,109333,109334,109336,109337,28588],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[65,109335,109316],{},"，并输出图像数组形状，例如 ",[65,109338,109339],{},"(480, 640, 3)",[19,109341,109342],{},"如果图片里看不到方块，先检查：",[23,109344,109345,109348,109351],{},[26,109346,109347],{},"方块是否掉到相机视野外。",[26,109349,109350],{},"camera 位置是否合理。",[26,109352,109353,109354,109357],{},"是否在 ",[65,109355,109356],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109359,102548],{"id":102547},[19,109361,109362],{},"运行 viewer:",[58,109364,109366],{"className":24027,"code":109365,"language":24029,"meta":63,"style":63},"python ch5_viewer.py\n",[65,109367,109368],{"__ignoreMap":63},[68,109369,109370,109372],{"class":70,"line":71},[68,109371,30581],{"class":74},[68,109373,108496],{"class":78},[19,109375,109376],{},"运行 renderer:",[58,109378,109380],{"className":24027,"code":109379,"language":24029,"meta":63,"style":63},"python ch5_renderer.py\n",[65,109381,109382],{"__ignoreMap":63},[68,109383,109384,109386],{"class":70,"line":71},[68,109385,30581],{"class":74},[68,109387,108825],{"class":78},[19,109389,109390],{},"如果在服务器上运行:",[58,109392,109394],{"className":24027,"code":109393,"language":24029,"meta":63,"style":63},"MUJOCO_GL=egl python ch5_renderer.py\n",[65,109395,109396],{"__ignoreMap":63},[68,109397,109398,109400,109402,109404,109407],{"class":70,"line":71},[68,109399,108014],{"class":335},[68,109401,381],{"class":331},[68,109403,108004],{"class":78},[68,109405,109406],{"class":74}," python",[68,109408,108825],{"class":78},[19,109410,107982],{},[58,109412,109414],{"className":24027,"code":109413,"language":24029,"meta":63,"style":63},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[65,109415,109416],{"__ignoreMap":63},[68,109417,109418,109420,109422,109424,109426],{"class":70,"line":71},[68,109419,108014],{"class":335},[68,109421,381],{"class":331},[68,109423,108008],{"class":78},[68,109425,109406],{"class":74},[68,109427,108825],{"class":78},[19,109429,109430],{},"再做几个练习：",[23,109432,109433,109440,109443,109449],{},[26,109434,109435,109436,109439],{},"把 renderer 分辨率改成 ",[65,109437,109438],{},"height=240, width=320","，观察输出 shape。",[26,109441,109442],{},"把方块颜色改成蓝色，重新保存图片。",[26,109444,109445,109446,109448],{},"把相机 ",[65,109447,104346],{}," 改远一点，观察画面中物体是否变小。",[26,109450,109451,109452,102614,109455,109458],{},"把 viewer 示例中的 ",[65,109453,109454],{},"data.time \u003C 5.0",[65,109456,109457],{},"data.time \u003C 20.0","，观察更长时间。",[14,109460,102653],{"id":102652},[301,109462,109464],{"id":109463},"viewer-窗口打不开","viewer 窗口打不开",[19,109466,109467],{},"安装:",[58,109469,109471],{"className":24027,"code":109470,"language":24029,"meta":63,"style":63},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[65,109472,109473],{"__ignoreMap":63},[68,109474,109475,109477,109479,109481,109483,109485,109487,109489,109491,109493,109495],{"class":70,"line":71},[68,109476,24780],{"class":74},[68,109478,26519],{"class":78},[68,109480,24039],{"class":78},[68,109482,26604],{"class":82},[68,109484,102706],{"class":78},[68,109486,101035],{"class":78},[68,109488,102711],{"class":78},[68,109490,101048],{"class":78},[68,109492,101054],{"class":78},[68,109494,101045],{"class":78},[68,109496,109497],{"class":78}," libXinerama\n",[301,109499,109501],{"id":109500},"glfwerror",[65,109502,109503],{},"GLFWError",[19,109505,109506],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[301,109508,109510],{"id":109509},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109512,109513,109514,82740,109516,109518],{},"尝试 ",[65,109515,101237],{},[65,109517,101240],{},"。可能存在版本差异。",[301,109520,109521],{"id":109521},"保存图片是黑的",[19,109523,102775],{},[23,109525,109526,109529,109532,109542],{},[26,109527,109528],{},"XML 里是否有 light。",[26,109530,109531],{},"相机是否对着模型。",[26,109533,109534,109535,109538,109539,28588],{},"是否先 ",[65,109536,109537],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[65,109540,109541],{},"renderer.render()",[26,109543,109544],{},"物体是否已经掉出视野。",[301,109546,109547],{"id":109547},"远程服务器没有显示器",[19,109549,109550],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[58,109552,109553],{"className":24027,"code":109393,"language":24029,"meta":63,"style":63},[65,109554,109555],{"__ignoreMap":63},[68,109556,109557,109559,109561,109563,109565],{"class":70,"line":71},[68,109558,108014],{"class":335},[68,109560,381],{"class":331},[68,109562,108004],{"class":78},[68,109564,109406],{"class":74},[68,109566,108825],{"class":78},[19,109568,109569],{},"如果 EGL 不可用，再尝试：",[58,109571,109572],{"className":24027,"code":109413,"language":24029,"meta":63,"style":63},[65,109573,109574],{"__ignoreMap":63},[68,109575,109576,109578,109580,109582,109584],{"class":70,"line":71},[68,109577,108014],{"class":335},[68,109579,381],{"class":331},[68,109581,108008],{"class":78},[68,109583,109406],{"class":74},[68,109585,108825],{"class":78},[14,109587,102807],{"id":102806},[19,109589,109590],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[23,109592,109593,109596,109599],{},[26,109594,109595],{},"先用 viewer 看模型和控制是否正常。",[26,109597,109598],{},"再用 renderer 保存图片或构造视觉观测。",[26,109600,109601],{},"最后把状态、动作、图像、奖励组织成训练数据。",[250,109603,109604],{},"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":63,"searchDepth":92,"depth":92,"links":109606},[109607,109608,109609,109614,109619,109620,109621,109628],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":109610},[109611,109612,109613],{"id":108111,"depth":1387,"text":108112},{"id":108141,"depth":1387,"text":108142},{"id":108176,"depth":1387,"text":108177},{"id":101452,"depth":92,"text":101453,"children":109615},[109616,109617,109618],{"id":101772,"depth":1387,"text":101772},{"id":108921,"depth":1387,"text":108922},{"id":109099,"depth":1387,"text":109100},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":109622},[109623,109624,109625,109626,109627],{"id":109463,"depth":1387,"text":109464},{"id":109500,"depth":1387,"text":109503},{"id":109509,"depth":1387,"text":109510},{"id":109521,"depth":1387,"text":109521},{"id":109547,"depth":1387,"text":109547},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107719,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109635,"title":109636,"body":109637,"description":63,"extension":258,"meta":111548,"navigation":260,"path":111549,"seo":111550,"stem":111551,"__hash__":111552},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109638,"toc":111524},[109639,109642,109644,109647,109649,109668,109671,109677,109680,109682,109684,109708,109710,109724,109726,109767,109769,109780,109782,109785,109791,109794,109828,109831,109863,109866,109898,109902,109905,109945,109948,109954,109957,109963,109967,109970,109976,109979,109983,109986,110026,110028,110041,110044,110046,110628,110630,110642,110645,110656,110658,110661,110680,110692,110695,110716,110719,110722,110765,110768,110771,110791,110798,110800,110818,110833,110836,110842,110845,110851,110868,110875,110906,110917,110951,110962,110979,110988,110996,111001,111015,111018,111039,111045,111059,111064,111094,111104,111129,111137,111160,111163,111179,111182,111190,111196,111218,111231,111252,111261,111300,111311,111313,111316,111322,111325,111328,111334,111337,111357,111360,111362,111401,111403,111406,111414,111417,111420,111447,111450,111460,111466,111469,111475,111477,111483,111487,111490,111492,111495,111519,111522],[10,109640,109636],{"id":109641},"_6控制任务cartpole",[14,109643,100848],{"id":100847},[19,109645,109646],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109648,104531],{},[23,109650,109651,109654,109656,109659,109662,109665],{},[26,109652,109653],{},"slide joint",[26,109655,106384],{},[26,109657,109658],{},"cart force actuator",[26,109660,109661],{},"状态观测",[26,109663,109664],{},"简单控制循环",[26,109666,109667],{},"reward 设计雏形",[19,109669,109670],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[58,109672,109675],{"className":109673,"code":109674,"language":5393,"meta":63},[5391],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[65,109676,109674],{"__ignoreMap":63},[19,109678,109679],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109681,100971],{"id":100970},[19,109683,100974],{},[58,109685,109686],{"className":24027,"code":104588,"language":24029,"meta":63,"style":63},[65,109687,109688],{"__ignoreMap":63},[68,109689,109690,109692,109694,109696,109698,109700,109702,109704,109706],{"class":70,"line":71},[68,109691,24780],{"class":74},[68,109693,26519],{"class":78},[68,109695,24039],{"class":78},[68,109697,26604],{"class":82},[68,109699,104603],{"class":78},[68,109701,100999],{"class":78},[68,109703,102701],{"class":78},[68,109705,101015],{"class":78},[68,109707,104612],{"class":78},[19,109709,103019],{},[58,109711,109712],{"className":24027,"code":101119,"language":24029,"meta":63,"style":63},[65,109713,109714],{"__ignoreMap":63},[68,109715,109716,109718,109720,109722],{"class":70,"line":71},[68,109717,24036],{"class":74},[68,109719,24039],{"class":78},[68,109721,101130],{"class":78},[68,109723,101133],{"class":78},[19,109725,103036],{},[58,109727,109729],{"className":24027,"code":109728,"language":24029,"meta":63,"style":63},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[65,109730,109731,109748,109757],{"__ignoreMap":63},[68,109732,109733,109735,109737,109739,109742,109744,109746],{"class":70,"line":71},[68,109734,30531],{"class":74},[68,109736,29377],{"class":78},[68,109738,25319],{"class":82},[68,109740,109741],{"class":78}," mujoco-cartpole",[68,109743,101175],{"class":78},[68,109745,101178],{"class":82},[68,109747,101181],{"class":82},[68,109749,109750,109752,109754],{"class":70,"line":92},[68,109751,30531],{"class":74},[68,109753,101188],{"class":78},[68,109755,109756],{"class":78}," mujoco-cartpole\n",[68,109758,109759,109761,109763,109765],{"class":70,"line":1387},[68,109760,24036],{"class":74},[68,109762,24039],{"class":78},[68,109764,101130],{"class":78},[68,109766,101133],{"class":78},[19,109768,101204],{},[23,109770,109771,109774,109777],{},[26,109772,109773],{},"本章不依赖 Gymnasium。",[26,109775,109776],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[26,109778,109779],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109781,101245],{"id":101244},[19,109783,109784],{},"Cartpole 的模型结构:",[58,109786,109789],{"className":109787,"code":109788,"language":5393,"meta":63},[5391],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[65,109790,109788],{"__ignoreMap":63},[19,109792,109793],{},"小车通过 slide joint 左右移动:",[58,109795,109797],{"className":53268,"code":109796,"language":53270,"meta":63,"style":63},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[65,109798,109799],{"__ignoreMap":63},[68,109800,109801,109803,109805,109807,109809,109812,109814,109816,109819,109821,109823,109826],{"class":70,"line":71},[68,109802,1243],{"class":335},[68,109804,103156],{"class":51501},[68,109806,15125],{"class":74},[68,109808,381],{"class":335},[68,109810,109811],{"class":78},"\"cart_x\"",[68,109813,54025],{"class":74},[68,109815,381],{"class":335},[68,109817,109818],{"class":78},"\"slide\"",[68,109820,106228],{"class":74},[68,109822,381],{"class":335},[68,109824,109825],{"class":78},"\"1 0 0\"",[68,109827,101344],{"class":335},[19,109829,109830],{},"杆子通过 hinge joint 旋转:",[58,109832,109834],{"className":53268,"code":109833,"language":53270,"meta":63,"style":63},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[65,109835,109836],{"__ignoreMap":63},[68,109837,109838,109840,109842,109844,109846,109849,109851,109853,109855,109857,109859,109861],{"class":70,"line":71},[68,109839,1243],{"class":335},[68,109841,103156],{"class":51501},[68,109843,15125],{"class":74},[68,109845,381],{"class":335},[68,109847,109848],{"class":78},"\"pole_hinge\"",[68,109850,54025],{"class":74},[68,109852,381],{"class":335},[68,109854,106219],{"class":78},[68,109856,106228],{"class":74},[68,109858,381],{"class":335},[68,109860,106233],{"class":78},[68,109862,101344],{"class":335},[19,109864,109865],{},"控制力作用在小车 slide joint 上:",[58,109867,109869],{"className":53268,"code":109868,"language":53270,"meta":63,"style":63},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[65,109870,109871],{"__ignoreMap":63},[68,109872,109873,109875,109877,109879,109881,109884,109886,109888,109890,109892,109894,109896],{"class":70,"line":71},[68,109874,1243],{"class":335},[68,109876,106274],{"class":51501},[68,109878,15125],{"class":74},[68,109880,381],{"class":335},[68,109882,109883],{"class":78},"\"cart_motor\"",[68,109885,106284],{"class":74},[68,109887,381],{"class":335},[68,109889,109811],{"class":78},[68,109891,106291],{"class":74},[68,109893,381],{"class":335},[68,109895,54517],{"class":78},[68,109897,101344],{"class":335},[301,109899,109901],{"id":109900},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109903,109904],{},"这个简化模型有两个关节：",[471,109906,109907,109918],{},[474,109908,109909],{},[477,109910,109911,109913,109915],{},[480,109912,102959],{"align":23941},[480,109914,23942],{"align":23941},[480,109916,109917],{"align":23941},"对应状态",[518,109919,109920,109933],{},[477,109921,109922,109927,109930],{},[523,109923,109924],{"align":23941},[65,109925,109926],{},"cart_x",[523,109928,109929],{"align":23941},"slide",[523,109931,109932],{"align":23941},"小车 x 位置",[477,109934,109935,109940,109942],{},[523,109936,109937],{"align":23941},[65,109938,109939],{},"pole_hinge",[523,109941,106040],{"align":23941},[523,109943,109944],{"align":23941},"杆子角度",[19,109946,109947],{},"所以：",[58,109949,109952],{"className":109950,"code":109951,"language":5393,"meta":63},[5391],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[65,109953,109951],{"__ignoreMap":63},[19,109955,109956],{},"把它们拼起来就是观测：",[58,109958,109961],{"className":109959,"code":109960,"language":5393,"meta":63},[5391],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[65,109962,109960],{"__ignoreMap":63},[301,109964,109966],{"id":109965},"action-是什么","action 是什么",[19,109968,109969],{},"本章只有一个 actuator：",[58,109971,109974],{"className":109972,"code":109973,"language":5393,"meta":63},[5391],"data.ctrl[0] = action\n",[65,109975,109973],{"__ignoreMap":63},[19,109977,109978],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[301,109980,109982],{"id":109981},"reward-是什么","reward 是什么",[19,109984,109985],{},"奖励函数：",[58,109987,109989],{"className":30579,"code":109988,"language":30581,"meta":63,"style":63},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[65,109990,109991],{"__ignoreMap":63},[68,109992,109993,109995,109998,110000,110002,110004,110007,110009,110012,110014,110016,110018,110021,110023],{"class":70,"line":71},[68,109994,17251],{"class":331},[68,109996,109997],{"class":82}," float",[68,109999,336],{"class":335},[68,110001,102603],{"class":82},[68,110003,52472],{"class":331},[68,110005,110006],{"class":82}," 0.1",[68,110008,6723],{"class":331},[68,110010,110011],{"class":335}," cart_x ",[68,110013,788],{"class":331},[68,110015,110011],{"class":335},[68,110017,865],{"class":331},[68,110019,110020],{"class":335}," pole_angle ",[68,110022,788],{"class":331},[68,110024,110025],{"class":335}," pole_angle)\n",[19,110027,106426],{},[23,110029,110030,110035,110038],{},[26,110031,110032,110033,28588],{},"基础奖励是 ",[65,110034,102603],{},[26,110036,110037],{},"小车离中心越远，扣分越多。",[26,110039,110040],{},"杆子角度越大，扣分越多。",[19,110042,110043],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110045,101453],{"id":101452},[58,110047,110049],{"className":30579,"code":110048,"language":30581,"meta":63,"style":63},"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",[65,110050,110051,110057,110067,110071,110075,110083,110088,110092,110096,110100,110105,110109,110114,110119,110124,110128,110133,110138,110143,110147,110151,110155,110159,110163,110168,110172,110176,110180,110184,110188,110198,110205,110209,110213,110227,110241,110254,110284,110288,110292,110304,110316,110324,110328,110341,110345,110349,110358,110362,110378,110388,110401,110414,110418,110441,110459,110463,110475,110479,110483,110493,110503,110507,110523,110564,110568,110588,110604,110608,110612,110624],{"__ignoreMap":63},[68,110052,110053,110055],{"class":70,"line":71},[68,110054,30593],{"class":331},[68,110056,101501],{"class":335},[68,110058,110059,110061,110063,110065],{"class":70,"line":92},[68,110060,30593],{"class":331},[68,110062,31581],{"class":335},[68,110064,31584],{"class":331},[68,110066,31587],{"class":335},[68,110068,110069],{"class":70,"line":1387},[68,110070,2606],{"emptyLinePlaceholder":260},[68,110072,110073],{"class":70,"line":1402},[68,110074,2606],{"emptyLinePlaceholder":260},[68,110076,110077,110079,110081],{"class":70,"line":1408},[68,110078,101514],{"class":82},[68,110080,13769],{"class":331},[68,110082,101519],{"class":78},[68,110084,110085],{"class":70,"line":1422},[68,110086,110087],{"class":78},"\u003Cmujoco model=\"cartpole\">\n",[68,110089,110090],{"class":70,"line":1428},[68,110091,101529],{"class":78},[68,110093,110094],{"class":70,"line":1519},[68,110095,2606],{"emptyLinePlaceholder":260},[68,110097,110098],{"class":70,"line":1525},[68,110099,101538],{"class":78},[68,110101,110102],{"class":70,"line":1537},[68,110103,110104],{"class":78},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[68,110106,110107],{"class":70,"line":1819},[68,110108,2606],{"emptyLinePlaceholder":260},[68,110110,110111],{"class":70,"line":1824},[68,110112,110113],{"class":78},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[68,110115,110116],{"class":70,"line":1830},[68,110117,110118],{"class":78},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[68,110120,110121],{"class":70,"line":1835},[68,110122,110123],{"class":78},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[68,110125,110126],{"class":70,"line":1849},[68,110127,2606],{"emptyLinePlaceholder":260},[68,110129,110130],{"class":70,"line":1854},[68,110131,110132],{"class":78},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[68,110134,110135],{"class":70,"line":1860},[68,110136,110137],{"class":78},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[68,110139,110140],{"class":70,"line":1881},[68,110141,110142],{"class":78},"        \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",[68,110144,110145],{"class":70,"line":1886},[68,110146,106638],{"class":78},[68,110148,110149],{"class":70,"line":1900},[68,110150,101567],{"class":78},[68,110152,110153],{"class":70,"line":1905},[68,110154,101572],{"class":78},[68,110156,110157],{"class":70,"line":1934},[68,110158,2606],{"emptyLinePlaceholder":260},[68,110160,110161],{"class":70,"line":1939},[68,110162,106655],{"class":78},[68,110164,110165],{"class":70,"line":1956},[68,110166,110167],{"class":78},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,110169,110170],{"class":70,"line":1961},[68,110171,106665],{"class":78},[68,110173,110174],{"class":70,"line":1966},[68,110175,101577],{"class":78},[68,110177,110178],{"class":70,"line":1971},[68,110179,95899],{"class":78},[68,110181,110182],{"class":70,"line":1985},[68,110183,2606],{"emptyLinePlaceholder":260},[68,110185,110186],{"class":70,"line":1990},[68,110187,2606],{"emptyLinePlaceholder":260},[68,110189,110190,110192,110195],{"class":70,"line":2783},[68,110191,32148],{"class":331},[68,110193,110194],{"class":74}," get_observation",[68,110196,110197],{"class":335},"(data: mujoco.MjData) -> np.ndarray:\n",[68,110199,110200,110202],{"class":70,"line":2797},[68,110201,4296],{"class":331},[68,110203,110204],{"class":335}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[68,110206,110207],{"class":70,"line":2805},[68,110208,2606],{"emptyLinePlaceholder":260},[68,110210,110211],{"class":70,"line":2810},[68,110212,2606],{"emptyLinePlaceholder":260},[68,110214,110215,110217,110220,110223,110225],{"class":70,"line":2816},[68,110216,32148],{"class":331},[68,110218,110219],{"class":74}," compute_reward",[68,110221,110222],{"class":335},"(obs: np.ndarray) -> ",[68,110224,375],{"class":82},[68,110226,3945],{"class":335},[68,110228,110229,110232,110234,110237,110239],{"class":70,"line":2822},[68,110230,110231],{"class":335},"    cart_x ",[68,110233,381],{"class":331},[68,110235,110236],{"class":335}," obs[",[68,110238,525],{"class":82},[68,110240,33447],{"class":335},[68,110242,110243,110246,110248,110250,110252],{"class":70,"line":2827},[68,110244,110245],{"class":335},"    pole_angle ",[68,110247,381],{"class":331},[68,110249,110236],{"class":335},[68,110251,551],{"class":82},[68,110253,33447],{"class":335},[68,110255,110256,110258,110260,110262,110264,110266,110268,110270,110272,110274,110276,110278,110280,110282],{"class":70,"line":8153},[68,110257,4296],{"class":331},[68,110259,109997],{"class":82},[68,110261,336],{"class":335},[68,110263,102603],{"class":82},[68,110265,52472],{"class":331},[68,110267,110006],{"class":82},[68,110269,6723],{"class":331},[68,110271,110011],{"class":335},[68,110273,788],{"class":331},[68,110275,110011],{"class":335},[68,110277,865],{"class":331},[68,110279,110020],{"class":335},[68,110281,788],{"class":331},[68,110283,110025],{"class":335},[68,110285,110286],{"class":70,"line":8177},[68,110287,2606],{"emptyLinePlaceholder":260},[68,110289,110290],{"class":70,"line":8182},[68,110291,2606],{"emptyLinePlaceholder":260},[68,110293,110294,110296,110298,110300,110302],{"class":70,"line":8188},[68,110295,32148],{"class":331},[68,110297,2179],{"class":74},[68,110299,101598],{"class":335},[68,110301,95887],{"class":82},[68,110303,3945],{"class":335},[68,110305,110306,110308,110310,110312,110314],{"class":70,"line":8215},[68,110307,101607],{"class":335},[68,110309,381],{"class":331},[68,110311,101612],{"class":335},[68,110313,101514],{"class":82},[68,110315,342],{"class":335},[68,110317,110318,110320,110322],{"class":70,"line":8220},[68,110319,101621],{"class":335},[68,110321,381],{"class":331},[68,110323,101626],{"class":335},[68,110325,110326],{"class":70,"line":8226},[68,110327,2606],{"emptyLinePlaceholder":260},[68,110329,110330,110332,110334,110336,110338],{"class":70,"line":8238},[68,110331,105269],{"class":335},[68,110333,551],{"class":82},[68,110335,4649],{"class":335},[68,110337,381],{"class":331},[68,110339,110340],{"class":82}," 0.1\n",[68,110342,110343],{"class":70,"line":8250},[68,110344,105282],{"class":335},[68,110346,110347],{"class":70,"line":8262},[68,110348,2606],{"emptyLinePlaceholder":260},[68,110350,110351,110354,110356],{"class":70,"line":9921},[68,110352,110353],{"class":335},"    total_reward ",[68,110355,381],{"class":331},[68,110357,104961],{"class":82},[68,110359,110360],{"class":70,"line":9946},[68,110361,2606],{"emptyLinePlaceholder":260},[68,110363,110364,110366,110368,110370,110372,110374,110376],{"class":70,"line":9969},[68,110365,3407],{"class":331},[68,110367,31817],{"class":335},[68,110369,26247],{"class":331},[68,110371,32644],{"class":82},[68,110373,336],{"class":335},[68,110375,6615],{"class":82},[68,110377,30987],{"class":335},[68,110379,110380,110383,110385],{"class":70,"line":9993},[68,110381,110382],{"class":335},"        obs ",[68,110384,381],{"class":331},[68,110386,110387],{"class":335}," get_observation(data)\n",[68,110389,110390,110393,110395,110397,110399],{"class":70,"line":9998},[68,110391,110392],{"class":335},"        pole_angle ",[68,110394,381],{"class":331},[68,110396,110236],{"class":335},[68,110398,551],{"class":82},[68,110400,33447],{"class":335},[68,110402,110403,110406,110408,110410,110412],{"class":70,"line":10003},[68,110404,110405],{"class":335},"        pole_angular_velocity ",[68,110407,381],{"class":331},[68,110409,110236],{"class":335},[68,110411,406],{"class":82},[68,110413,33447],{"class":335},[68,110415,110416],{"class":70,"line":10008},[68,110417,2606],{"emptyLinePlaceholder":260},[68,110419,110420,110423,110425,110428,110430,110432,110434,110436,110438],{"class":70,"line":10017},[68,110421,110422],{"class":335},"        action ",[68,110424,381],{"class":331},[68,110426,110427],{"class":82}," 2.0",[68,110429,6723],{"class":331},[68,110431,110020],{"class":335},[68,110433,814],{"class":331},[68,110435,62068],{"class":82},[68,110437,6723],{"class":331},[68,110439,110440],{"class":335}," pole_angular_velocity\n",[68,110442,110443,110445,110447,110449,110451,110453,110455,110457],{"class":70,"line":10022},[68,110444,110422],{"class":335},[68,110446,381],{"class":331},[68,110448,107647],{"class":335},[68,110450,865],{"class":331},[68,110452,102603],{"class":82},[68,110454,12640],{"class":335},[68,110456,102603],{"class":82},[68,110458,342],{"class":335},[68,110460,110461],{"class":70,"line":10028},[68,110462,2606],{"emptyLinePlaceholder":260},[68,110464,110465,110467,110469,110471,110473],{"class":70,"line":10049},[68,110466,106817],{"class":335},[68,110468,525],{"class":82},[68,110470,4649],{"class":335},[68,110472,381],{"class":331},[68,110474,107670],{"class":335},[68,110476,110477],{"class":70,"line":10055},[68,110478,101716],{"class":335},[68,110480,110481],{"class":70,"line":10069},[68,110482,2606],{"emptyLinePlaceholder":260},[68,110484,110485,110488,110490],{"class":70,"line":10075},[68,110486,110487],{"class":335},"        reward ",[68,110489,381],{"class":331},[68,110491,110492],{"class":335}," compute_reward(get_observation(data))\n",[68,110494,110495,110498,110500],{"class":70,"line":10102},[68,110496,110497],{"class":335},"        total_reward ",[68,110499,9682],{"class":331},[68,110501,110502],{"class":335}," reward\n",[68,110504,110505],{"class":70,"line":10111},[68,110506,2606],{"emptyLinePlaceholder":260},[68,110508,110509,110511,110513,110515,110517,110519,110521],{"class":70,"line":10117},[68,110510,2703],{"class":331},[68,110512,31817],{"class":335},[68,110514,661],{"class":331},[68,110516,5959],{"class":82},[68,110518,101759],{"class":331},[68,110520,4299],{"class":82},[68,110522,3945],{"class":335},[68,110524,110525,110527,110529,110532,110535,110538,110541,110543,110546,110549,110551,110553,110555,110557,110560,110562],{"class":70,"line":10125},[68,110526,34851],{"class":82},[68,110528,336],{"class":335},[68,110530,110531],{"class":78},"\"step:\"",[68,110533,110534],{"class":335},", step, ",[68,110536,110537],{"class":78},"\"obs:\"",[68,110539,110540],{"class":335},", np.round(obs, ",[68,110542,406],{"class":82},[68,110544,110545],{"class":335},"), ",[68,110547,110548],{"class":78},"\"action:\"",[68,110550,12640],{"class":335},[68,110552,32219],{"class":82},[68,110554,336],{"class":335},[68,110556,375],{"class":82},[68,110558,110559],{"class":335},"(action), ",[68,110561,406],{"class":82},[68,110563,30698],{"class":335},[68,110565,110566],{"class":70,"line":10130},[68,110567,2606],{"emptyLinePlaceholder":260},[68,110569,110570,110572,110574,110577,110579,110581,110584,110586],{"class":70,"line":16809},[68,110571,31500],{"class":82},[68,110573,336],{"class":335},[68,110575,110576],{"class":78},"\"total_reward:\"",[68,110578,12640],{"class":335},[68,110580,32219],{"class":82},[68,110582,110583],{"class":335},"(total_reward, ",[68,110585,406],{"class":82},[68,110587,30698],{"class":335},[68,110589,110590,110592,110594,110597,110600,110602],{"class":70,"line":16815},[68,110591,31500],{"class":82},[68,110593,336],{"class":335},[68,110595,110596],{"class":78},"\"final obs:\"",[68,110598,110599],{"class":335},", np.round(get_observation(data), ",[68,110601,406],{"class":82},[68,110603,30698],{"class":335},[68,110605,110606],{"class":70,"line":16838},[68,110607,2606],{"emptyLinePlaceholder":260},[68,110609,110610],{"class":70,"line":16844},[68,110611,2606],{"emptyLinePlaceholder":260},[68,110613,110614,110616,110618,110620,110622],{"class":70,"line":16867},[68,110615,1738],{"class":331},[68,110617,31421],{"class":82},[68,110619,101759],{"class":331},[68,110621,101762],{"class":78},[68,110623,3945],{"class":335},[68,110625,110626],{"class":70,"line":16881},[68,110627,101769],{"class":335},[19,110629,103770],{},[58,110631,110633],{"className":24027,"code":110632,"language":24029,"meta":63,"style":63},"touch ch6_cartpole.py\n",[65,110634,110635],{"__ignoreMap":63},[68,110636,110637,110639],{"class":70,"line":71},[68,110638,101483],{"class":74},[68,110640,110641],{"class":78}," ch6_cartpole.py\n",[19,110643,110644],{},"运行：",[58,110646,110648],{"className":24027,"code":110647,"language":24029,"meta":63,"style":63},"python ch6_cartpole.py\n",[65,110649,110650],{"__ignoreMap":63},[68,110651,110652,110654],{"class":70,"line":71},[68,110653,30581],{"class":74},[68,110655,110641],{"class":78},[301,110657,101772],{"id":101772},[19,110659,110660],{},"构造观测：",[58,110662,110664],{"className":30579,"code":110663,"language":30581,"meta":63,"style":63},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[65,110665,110666,110674],{"__ignoreMap":63},[68,110667,110668,110670,110672],{"class":70,"line":71},[68,110669,32148],{"class":331},[68,110671,110194],{"class":74},[68,110673,110197],{"class":335},[68,110675,110676,110678],{"class":70,"line":92},[68,110677,4296],{"class":331},[68,110679,110204],{"class":335},[19,110681,110682,110685,110686,110688,110689,110691],{},[65,110683,110684],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[65,110687,104230],{}," 2 维，",[65,110690,104560],{}," 2 维，所以 obs 是 4 维。",[19,110693,110694],{},"设置初始角度：",[58,110696,110698],{"className":30579,"code":110697,"language":30581,"meta":63,"style":63},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[65,110699,110700,110712],{"__ignoreMap":63},[68,110701,110702,110704,110706,110708,110710],{"class":70,"line":71},[68,110703,104899],{"class":335},[68,110705,551],{"class":82},[68,110707,4649],{"class":335},[68,110709,381],{"class":331},[68,110711,110340],{"class":82},[68,110713,110714],{"class":70,"line":92},[68,110715,104743],{"class":335},[19,110717,110718],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110720,110721],{},"简单反馈控制：",[58,110723,110725],{"className":30579,"code":110724,"language":30581,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[65,110726,110727,110747],{"__ignoreMap":63},[68,110728,110729,110731,110733,110735,110737,110739,110741,110743,110745],{"class":70,"line":71},[68,110730,107642],{"class":335},[68,110732,381],{"class":331},[68,110734,110427],{"class":82},[68,110736,6723],{"class":331},[68,110738,110020],{"class":335},[68,110740,814],{"class":331},[68,110742,62068],{"class":82},[68,110744,6723],{"class":331},[68,110746,110440],{"class":335},[68,110748,110749,110751,110753,110755,110757,110759,110761,110763],{"class":70,"line":92},[68,110750,107642],{"class":335},[68,110752,381],{"class":331},[68,110754,107647],{"class":335},[68,110756,865],{"class":331},[68,110758,102603],{"class":82},[68,110760,12640],{"class":335},[68,110762,102603],{"class":82},[68,110764,342],{"class":335},[19,110766,110767],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110769,110770],{},"限制动作：",[58,110772,110774],{"className":30579,"code":110773,"language":30581,"meta":63,"style":63},"np.clip(action, -1.0, 1.0)\n",[65,110775,110776],{"__ignoreMap":63},[68,110777,110778,110781,110783,110785,110787,110789],{"class":70,"line":71},[68,110779,110780],{"class":335},"np.clip(action, ",[68,110782,865],{"class":331},[68,110784,102603],{"class":82},[68,110786,12640],{"class":335},[68,110788,102603],{"class":82},[68,110790,342],{"class":335},[19,110792,110793,110794,110797],{},"因为 XML 里 ",[65,110795,110796],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[301,110799,101908],{"id":101908},[58,110801,110802],{"className":30579,"code":110663,"language":30581,"meta":63,"style":63},[65,110803,110804,110812],{"__ignoreMap":63},[68,110805,110806,110808,110810],{"class":70,"line":71},[68,110807,32148],{"class":331},[68,110809,110194],{"class":74},[68,110811,110197],{"class":335},[68,110813,110814,110816],{"class":70,"line":92},[68,110815,4296],{"class":331},[68,110817,110204],{"class":335},[19,110819,110820,110821,110824,110825,110828,110829,110832],{},"这段定义了一个函数，用来获取当前观测。",[65,110822,110823],{},"data.qpos.copy()"," 是位置数组副本，",[65,110826,110827],{},"data.qvel.copy()"," 是速度数组副本。",[65,110830,110831],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110834,110835],{},"在本章模型里：",[58,110837,110840],{"className":110838,"code":110839,"language":5393,"meta":63},[5391],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[65,110841,110839],{"__ignoreMap":63},[19,110843,110844],{},"所以返回的 obs 是：",[58,110846,110849],{"className":110847,"code":110848,"language":5393,"meta":63},[5391],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[65,110850,110848],{"__ignoreMap":63},[58,110852,110854],{"className":30579,"code":110853,"language":30581,"meta":63,"style":63},"def compute_reward(obs: np.ndarray) -> float:\n",[65,110855,110856],{"__ignoreMap":63},[68,110857,110858,110860,110862,110864,110866],{"class":70,"line":71},[68,110859,32148],{"class":331},[68,110861,110219],{"class":74},[68,110863,110222],{"class":335},[68,110865,375],{"class":82},[68,110867,3945],{"class":335},[19,110869,110870,110871,110874],{},"这行定义奖励函数。输入是观测 ",[65,110872,110873],{},"obs","，输出是一个浮点数奖励。",[58,110876,110878],{"className":30579,"code":110877,"language":30581,"meta":63,"style":63},"cart_x = obs[0]\npole_angle = obs[1]\n",[65,110879,110880,110893],{"__ignoreMap":63},[68,110881,110882,110885,110887,110889,110891],{"class":70,"line":71},[68,110883,110884],{"class":335},"cart_x ",[68,110886,381],{"class":331},[68,110888,110236],{"class":335},[68,110890,525],{"class":82},[68,110892,33447],{"class":335},[68,110894,110895,110898,110900,110902,110904],{"class":70,"line":92},[68,110896,110897],{"class":335},"pole_angle ",[68,110899,381],{"class":331},[68,110901,110236],{"class":335},[68,110903,551],{"class":82},[68,110905,33447],{"class":335},[19,110907,110908,110909,110912,110913,110916],{},"数组索引从 0 开始。",[65,110910,110911],{},"obs[0]"," 是第一个元素，也就是小车位置。",[65,110914,110915],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[58,110918,110919],{"className":30579,"code":109988,"language":30581,"meta":63,"style":63},[65,110920,110921],{"__ignoreMap":63},[68,110922,110923,110925,110927,110929,110931,110933,110935,110937,110939,110941,110943,110945,110947,110949],{"class":70,"line":71},[68,110924,17251],{"class":331},[68,110926,109997],{"class":82},[68,110928,336],{"class":335},[68,110930,102603],{"class":82},[68,110932,52472],{"class":331},[68,110934,110006],{"class":82},[68,110936,6723],{"class":331},[68,110938,110011],{"class":335},[68,110940,788],{"class":331},[68,110942,110011],{"class":335},[68,110944,865],{"class":331},[68,110946,110020],{"class":335},[68,110948,788],{"class":331},[68,110950,110025],{"class":335},[19,110952,110953,110954,110957,110958,110961],{},"这行计算奖励。",[65,110955,110956],{},"cart_x * cart_x"," 是小车位置的平方，",[65,110959,110960],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[58,110963,110965],{"className":30579,"code":110964,"language":30581,"meta":63,"style":63},"data.qpos[1] = 0.1\n",[65,110966,110967],{"__ignoreMap":63},[68,110968,110969,110971,110973,110975,110977],{"class":70,"line":71},[68,110970,104899],{"class":335},[68,110972,551],{"class":82},[68,110974,4649],{"class":335},[68,110976,381],{"class":331},[68,110978,110340],{"class":82},[19,110980,110981,110982,110984,110985,110987],{},"手动设置杆子的初始角度。因为 ",[65,110983,105656],{}," 是小车位置，",[65,110986,105659],{}," 是杆子角度，所以这里改的是杆子。",[58,110989,110990],{"className":30579,"code":104743,"language":30581,"meta":63,"style":63},[65,110991,110992],{"__ignoreMap":63},[68,110993,110994],{"class":70,"line":71},[68,110995,104743],{"class":335},[19,110997,105702,110998,111000],{},[65,110999,104230],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[58,111002,111004],{"className":30579,"code":111003,"language":30581,"meta":63,"style":63},"total_reward = 0.0\n",[65,111005,111006],{"__ignoreMap":63},[68,111007,111008,111011,111013],{"class":70,"line":71},[68,111009,111010],{"class":335},"total_reward ",[68,111012,381],{"class":331},[68,111014,104961],{"class":82},[19,111016,111017],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[58,111019,111021],{"className":30579,"code":111020,"language":30581,"meta":63,"style":63},"for step in range(1000):\n",[65,111022,111023],{"__ignoreMap":63},[68,111024,111025,111027,111029,111031,111033,111035,111037],{"class":70,"line":71},[68,111026,3231],{"class":331},[68,111028,31817],{"class":335},[68,111030,26247],{"class":331},[68,111032,32644],{"class":82},[68,111034,336],{"class":335},[68,111036,6615],{"class":82},[68,111038,30987],{"class":335},[19,111040,111041,111042,111044],{},"循环 1000 步。",[65,111043,107334],{}," 是当前步数，从 0 到 999。",[58,111046,111048],{"className":30579,"code":111047,"language":30581,"meta":63,"style":63},"obs = get_observation(data)\n",[65,111049,111050],{"__ignoreMap":63},[68,111051,111052,111055,111057],{"class":70,"line":71},[68,111053,111054],{"class":335},"obs ",[68,111056,381],{"class":331},[68,111058,110387],{"class":335},[19,111060,111061,111062,28588],{},"读取当前状态，保存到 ",[65,111063,110873],{},[58,111065,111067],{"className":30579,"code":111066,"language":30581,"meta":63,"style":63},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[65,111068,111069,111081],{"__ignoreMap":63},[68,111070,111071,111073,111075,111077,111079],{"class":70,"line":71},[68,111072,110897],{"class":335},[68,111074,381],{"class":331},[68,111076,110236],{"class":335},[68,111078,551],{"class":82},[68,111080,33447],{"class":335},[68,111082,111083,111086,111088,111090,111092],{"class":70,"line":92},[68,111084,111085],{"class":335},"pole_angular_velocity ",[68,111087,381],{"class":331},[68,111089,110236],{"class":335},[68,111091,406],{"class":82},[68,111093,33447],{"class":335},[19,111095,111096,111097,111100,111101,28588],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[65,111098,111099],{},"obs[3]","？因为 obs 的顺序是 ",[65,111102,111103],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[58,111105,111107],{"className":30579,"code":111106,"language":30581,"meta":63,"style":63},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[65,111108,111109],{"__ignoreMap":63},[68,111110,111111,111113,111115,111117,111119,111121,111123,111125,111127],{"class":70,"line":71},[68,111112,107642],{"class":335},[68,111114,381],{"class":331},[68,111116,110427],{"class":82},[68,111118,6723],{"class":331},[68,111120,110020],{"class":335},[68,111122,814],{"class":331},[68,111124,62068],{"class":82},[68,111126,6723],{"class":331},[68,111128,110440],{"class":335},[19,111130,111131,111132,101218,111134,111136],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[65,111133,105460],{},[65,111135,35530],{}," 是人为设置的系数，不是固定公式。",[58,111138,111140],{"className":30579,"code":111139,"language":30581,"meta":63,"style":63},"action = np.clip(action, -1.0, 1.0)\n",[65,111141,111142],{"__ignoreMap":63},[68,111143,111144,111146,111148,111150,111152,111154,111156,111158],{"class":70,"line":71},[68,111145,107642],{"class":335},[68,111147,381],{"class":331},[68,111149,107647],{"class":335},[68,111151,865],{"class":331},[68,111153,102603],{"class":82},[68,111155,12640],{"class":335},[68,111157,102603],{"class":82},[68,111159,342],{"class":335},[19,111161,111162],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[58,111164,111165],{"className":30579,"code":109973,"language":30581,"meta":63,"style":63},[65,111166,111167],{"__ignoreMap":63},[68,111168,111169,111171,111173,111175,111177],{"class":70,"line":71},[68,111170,106071],{"class":335},[68,111172,525],{"class":82},[68,111174,4649],{"class":335},[68,111176,381],{"class":331},[68,111178,107670],{"class":335},[19,111180,111181],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[58,111183,111184],{"className":30579,"code":104705,"language":30581,"meta":63,"style":63},[65,111185,111186],{"__ignoreMap":63},[68,111187,111188],{"class":70,"line":71},[68,111189,104705],{"class":335},[19,111191,111192,111193,111195],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[65,111194,106326],{}," 计算小车和杆子的下一刻状态。",[58,111197,111199],{"className":30579,"code":111198,"language":30581,"meta":63,"style":63},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[65,111200,111201,111210],{"__ignoreMap":63},[68,111202,111203,111206,111208],{"class":70,"line":71},[68,111204,111205],{"class":335},"reward ",[68,111207,381],{"class":331},[68,111209,110492],{"class":335},[68,111211,111212,111214,111216],{"class":70,"line":92},[68,111213,111010],{"class":335},[68,111215,9682],{"class":331},[68,111217,110502],{"class":335},[19,111219,111220,111221,111223,111224,111227,111228,28588],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[65,111222,9682],{}," 是简写，",[65,111225,111226],{},"total_reward += reward"," 等价于 ",[65,111229,111230],{},"total_reward = total_reward + reward",[58,111232,111234],{"className":30579,"code":111233,"language":30581,"meta":63,"style":63},"if step % 100 == 0:\n",[65,111235,111236],{"__ignoreMap":63},[68,111237,111238,111240,111242,111244,111246,111248,111250],{"class":70,"line":71},[68,111239,1738],{"class":331},[68,111241,31817],{"class":335},[68,111243,661],{"class":331},[68,111245,5959],{"class":82},[68,111247,101759],{"class":331},[68,111249,4299],{"class":82},[68,111251,3945],{"class":335},[19,111253,111254,111256,111257,111260],{},[65,111255,661],{}," 是取余数。",[65,111258,111259],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[58,111262,111264],{"className":30579,"code":111263,"language":30581,"meta":63,"style":63},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[65,111265,111266],{"__ignoreMap":63},[68,111267,111268,111270,111272,111274,111276,111278,111280,111282,111284,111286,111288,111290,111292,111294,111296,111298],{"class":70,"line":71},[68,111269,30616],{"class":82},[68,111271,336],{"class":335},[68,111273,110531],{"class":78},[68,111275,110534],{"class":335},[68,111277,110537],{"class":78},[68,111279,110540],{"class":335},[68,111281,406],{"class":82},[68,111283,110545],{"class":335},[68,111285,110548],{"class":78},[68,111287,12640],{"class":335},[68,111289,32219],{"class":82},[68,111291,336],{"class":335},[68,111293,375],{"class":82},[68,111295,110559],{"class":335},[68,111297,406],{"class":82},[68,111299,30698],{"class":335},[19,111301,111302,111303,111306,111307,111310],{},"打印当前步数、观测和动作。",[65,111304,111305],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[65,111308,111309],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111312,102516],{"id":102515},[19,111314,111315],{},"观测向量:",[58,111317,111320],{"className":111318,"code":111319,"language":5393,"meta":63},[5391],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[65,111321,111319],{"__ignoreMap":63},[19,111323,111324],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111326,111327],{},"每隔 100 步会打印一次：",[58,111329,111332],{"className":111330,"code":111331,"language":5393,"meta":63},[5391],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[65,111333,111331],{"__ignoreMap":63},[19,111335,111336],{},"重点观察：",[23,111338,111339,111345,111350],{},[26,111340,111341,111344],{},[65,111342,111343],{},"pole_angle"," 是否越来越大。",[26,111346,111347,111349],{},[65,111348,109926],{}," 是否跑得太远。",[26,111351,111352,111353,82740,111355,28588],{},"action 是否经常被 clip 到 ",[65,111354,104115],{},[65,111356,551],{},[19,111358,111359],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111361,102548],{"id":102547},[23,111363,111364,111370,111373,111379,111389,111395,111398],{},[26,111365,111366,111367,28588],{},"把初始角度改为 ",[65,111368,111369],{},"data.qpos[1] = 0.3",[26,111371,111372],{},"重新运行，观察控制是否变差。",[26,111374,111375,111376,111378],{},"把 actuator ",[65,111377,107267],{}," 改小。",[26,111380,111381,111382,111385,111386,28588],{},"打印 ",[65,111383,111384],{},"model.nq, model.nv, model.nu","，应为 ",[65,111387,111388],{},"2 2 1",[26,111390,111391,111392,111394],{},"把 reward 里的 ",[65,111393,110960],{}," 系数改大，观察总奖励变化。",[26,111396,111397],{},"把控制器改成反号，观察杆子是否更容易倒。",[26,111399,111400],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111402,102653],{"id":102652},[301,111404,111405],{"id":111405},"杆子方向和预期不一致",[19,111407,102596,111408,111410,111411,111413],{},[65,111409,106439],{}," 和 capsule 的 ",[65,111412,103376],{},"，必要时用 viewer 可视化确认。",[301,111415,111416],{"id":111416},"控制器越控越倒",[19,111418,111419],{},"说明反馈符号可能反了，尝试:",[58,111421,111423],{"className":30579,"code":111422,"language":30581,"meta":63,"style":63},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[65,111424,111425],{"__ignoreMap":63},[68,111426,111427,111429,111431,111433,111435,111437,111439,111441,111443,111445],{"class":70,"line":71},[68,111428,107642],{"class":335},[68,111430,381],{"class":331},[68,111432,52472],{"class":331},[68,111434,105460],{"class":82},[68,111436,6723],{"class":331},[68,111438,110020],{"class":335},[68,111440,865],{"class":331},[68,111442,62068],{"class":82},[68,111444,6723],{"class":331},[68,111446,110440],{"class":335},[301,111448,111449],{"id":111449},"小车飞走",[19,111451,111452,111453,111455,111456,111459],{},"降低 ",[65,111454,107267],{}," 或缩小 ",[65,111457,111458],{},"action"," 的 clip 范围。",[301,111461,111463,111465],{"id":111462},"obs3-为什么是杆子角速度",[65,111464,111099],{}," 为什么是杆子角速度",[19,111467,111468],{},"因为这个模型里：",[58,111470,111473],{"className":111471,"code":111472,"language":5393,"meta":63},[5391],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[65,111474,111472],{"__ignoreMap":63},[19,111476,109947],{},[58,111478,111481],{"className":111479,"code":111480,"language":5393,"meta":63},[5391],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[65,111482,111480],{"__ignoreMap":63},[301,111484,111486],{"id":111485},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111488,111489],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111491,102807],{"id":102806},[19,111493,111494],{},"一个控制任务通常包含：",[23,111496,111497,111500,111508,111513,111516],{},[26,111498,111499],{},"模型：Cartpole 的 body、joint、actuator。",[26,111501,111502,111503,546,111505,111507],{},"观测：从 ",[65,111504,104230],{},[65,111506,104560],{}," 里取状态。",[26,111509,111510,111511,28588],{},"动作：写入 ",[65,111512,101276],{},[26,111514,111515],{},"奖励：根据任务目标打分。",[26,111517,111518],{},"循环：obs -> action -> step -> reward。",[19,111520,111521],{},"这就是后面 Gymnasium 环境的基本骨架。",[250,111523,104486],{},{"title":63,"searchDepth":92,"depth":92,"links":111525},[111526,111527,111528,111533,111537,111538,111539,111547],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":111529},[111530,111531,111532],{"id":109900,"depth":1387,"text":109901},{"id":109965,"depth":1387,"text":109966},{"id":109981,"depth":1387,"text":109982},{"id":101452,"depth":92,"text":101453,"children":111534},[111535,111536],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":111540},[111541,111542,111543,111544,111546],{"id":111405,"depth":1387,"text":111405},{"id":111416,"depth":1387,"text":111416},{"id":111449,"depth":1387,"text":111449},{"id":111462,"depth":1387,"text":111545},"obs[3] 为什么是杆子角速度",{"id":111485,"depth":1387,"text":111486},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109636,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111554,"title":111555,"body":111556,"description":63,"extension":258,"meta":113570,"navigation":260,"path":113571,"seo":113572,"stem":113573,"__hash__":113574},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111557,"toc":113546},[111558,111561,111563,111566,111568,111585,111588,111591,111597,111600,111602,111604,111628,111630,111644,111646,111687,111689,111707,111709,111712,111718,111721,111749,111753,111759,111784,111787,111818,111825,111828,111831,111837,111840,111846,111849,111855,111859,111862,111887,111890,111892,112652,112654,112666,112668,112679,112681,112684,112701,112704,112706,112717,112720,112722,112768,112771,112784,112787,112869,112872,112874,112890,112900,112913,112916,112955,112965,112976,112986,112999,113002,113031,113034,113044,113047,113053,113070,113081,113083,113089,113106,113117,113138,113141,113153,113156,113177,113180,113188,113196,113213,113216,113285,113292,113300,113303,113316,113323,113325,113328,113334,113337,113340,113346,113352,113354,113394,113396,113402,113411,113414,113416,113436,113439,113442,113448,113452,113454,113481,113484,113487,113514,113520,113523,113526,113528,113531,113534,113540,113543],[10,111559,111555],{"id":111560},"_7控制任务reacher-机械臂到达目标",[14,111562,100848],{"id":100847},[19,111564,111565],{},"本章搭建一个二维两关节 reacher 任务。",[19,111567,104531],{},[23,111569,111570,111573,111576,111579,111582],{},[26,111571,111572],{},"两个 hinge joint",[26,111574,111575],{},"两个 motor actuator",[26,111577,111578],{},"site 作为末端点和目标点",[26,111580,111581],{},"根据末端和目标距离设计 reward",[26,111583,111584],{},"构造机械臂任务的基本形式",[19,111586,111587],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111589,111590],{},"Reacher 任务可以理解为：",[58,111592,111595],{"className":111593,"code":111594,"language":5393,"meta":63},[5391],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[65,111596,111594],{"__ignoreMap":63},[19,111598,111599],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111601,100971],{"id":100970},[19,111603,100974],{},[58,111605,111606],{"className":24027,"code":104588,"language":24029,"meta":63,"style":63},[65,111607,111608],{"__ignoreMap":63},[68,111609,111610,111612,111614,111616,111618,111620,111622,111624,111626],{"class":70,"line":71},[68,111611,24780],{"class":74},[68,111613,26519],{"class":78},[68,111615,24039],{"class":78},[68,111617,26604],{"class":82},[68,111619,104603],{"class":78},[68,111621,100999],{"class":78},[68,111623,102701],{"class":78},[68,111625,101015],{"class":78},[68,111627,104612],{"class":78},[19,111629,103019],{},[58,111631,111632],{"className":24027,"code":101119,"language":24029,"meta":63,"style":63},[65,111633,111634],{"__ignoreMap":63},[68,111635,111636,111638,111640,111642],{"class":70,"line":71},[68,111637,24036],{"class":74},[68,111639,24039],{"class":78},[68,111641,101130],{"class":78},[68,111643,101133],{"class":78},[19,111645,103036],{},[58,111647,111649],{"className":24027,"code":111648,"language":24029,"meta":63,"style":63},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[65,111650,111651,111668,111677],{"__ignoreMap":63},[68,111652,111653,111655,111657,111659,111662,111664,111666],{"class":70,"line":71},[68,111654,30531],{"class":74},[68,111656,29377],{"class":78},[68,111658,25319],{"class":82},[68,111660,111661],{"class":78}," mujoco-reacher",[68,111663,101175],{"class":78},[68,111665,101178],{"class":82},[68,111667,101181],{"class":82},[68,111669,111670,111672,111674],{"class":70,"line":92},[68,111671,30531],{"class":74},[68,111673,101188],{"class":78},[68,111675,111676],{"class":78}," mujoco-reacher\n",[68,111678,111679,111681,111683,111685],{"class":70,"line":1387},[68,111680,24036],{"class":74},[68,111682,24039],{"class":78},[68,111684,101130],{"class":78},[68,111686,101133],{"class":78},[19,111688,101204],{},[23,111690,111691,111694,111697],{},[26,111692,111693],{},"本章使用低维状态，不使用图像输入。",[26,111695,111696],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[26,111698,111699,111700,546,111702,546,111704,111706],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[65,111701,104230],{},[65,111703,104560],{},[65,111705,103880],{}," 的方法一致。",[14,111708,101245],{"id":101244},[19,111710,111711],{},"Reacher 任务核心:",[58,111713,111716],{"className":111714,"code":111715,"language":5393,"meta":63},[5391],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[65,111717,111715],{"__ignoreMap":63},[19,111719,111720],{},"读取 site 世界坐标:",[58,111722,111724],{"className":30579,"code":111723,"language":30581,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[65,111725,111726,111739],{"__ignoreMap":63},[68,111727,111728,111730,111732,111734,111737],{"class":70,"line":71},[68,111729,103834],{"class":335},[68,111731,381],{"class":331},[68,111733,103605],{"class":335},[68,111735,111736],{"class":78},"\"tip\"",[68,111738,342],{"class":335},[68,111740,111741,111744,111746],{"class":70,"line":92},[68,111742,111743],{"class":335},"tip_pos ",[68,111745,381],{"class":331},[68,111747,111748],{"class":335}," data.site_xpos[site_id]\n",[301,111750,111752],{"id":111751},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111754,111755,111756,111758],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[65,111757,104230],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[58,111760,111762],{"className":30579,"code":111761,"language":30581,"meta":63,"style":63},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[65,111763,111764,111774],{"__ignoreMap":63},[68,111765,111766,111769,111771],{"class":70,"line":71},[68,111767,111768],{"class":335},"tip ",[68,111770,381],{"class":331},[68,111772,111773],{"class":335}," data.site_xpos[tip_site_id]\n",[68,111775,111776,111779,111781],{"class":70,"line":92},[68,111777,111778],{"class":335},"target ",[68,111780,381],{"class":331},[68,111782,111783],{"class":335}," data.site_xpos[target_site_id]\n",[19,111785,111786],{},"这样 reward 就很容易写：",[58,111788,111790],{"className":30579,"code":111789,"language":30581,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[65,111791,111792,111807],{"__ignoreMap":63},[68,111793,111794,111797,111799,111802,111804],{"class":70,"line":71},[68,111795,111796],{"class":335},"dist ",[68,111798,381],{"class":331},[68,111800,111801],{"class":335}," np.linalg.norm(tip ",[68,111803,865],{"class":331},[68,111805,111806],{"class":335}," target)\n",[68,111808,111809,111811,111813,111815],{"class":70,"line":92},[68,111810,111205],{"class":335},[68,111812,381],{"class":331},[68,111814,52472],{"class":331},[68,111816,111817],{"class":335},"dist\n",[19,111819,111820,111821,111824],{},"距离越小，",[65,111822,111823],{},"-dist"," 越接近 0，奖励越高。",[301,111826,111827],{"id":111827},"两关节机械臂的状态",[19,111829,111830],{},"这个模型有两个 hinge joint：",[58,111832,111835],{"className":111833,"code":111834,"language":5393,"meta":63},[5391],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[65,111836,111834],{"__ignoreMap":63},[19,111838,111839],{},"再加上末端和目标位置：",[58,111841,111844],{"className":111842,"code":111843,"language":5393,"meta":63},[5391],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[65,111845,111843],{"__ignoreMap":63},[19,111847,111848],{},"总维度：",[58,111850,111853],{"className":111851,"code":111852,"language":5393,"meta":63},[5391],"2 + 2 + 3 + 3 = 10\n",[65,111854,111852],{"__ignoreMap":63},[301,111856,111858],{"id":111857},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111860,111861],{},"本章把重力设为：",[58,111863,111865],{"className":53268,"code":111864,"language":53270,"meta":63,"style":63},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[65,111866,111867],{"__ignoreMap":63},[68,111868,111869,111871,111873,111875,111877,111879,111881,111883,111885],{"class":70,"line":71},[68,111870,1243],{"class":335},[68,111872,69367],{"class":51501},[68,111874,101394],{"class":74},[68,111876,381],{"class":335},[68,111878,101399],{"class":78},[68,111880,101402],{"class":74},[68,111882,381],{"class":335},[68,111884,103971],{"class":78},[68,111886,101344],{"class":335},[19,111888,111889],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111891,101453],{"id":101452},[58,111893,111895],{"className":30579,"code":111894,"language":30581,"meta":63,"style":63},"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",[65,111896,111897,111903,111913,111917,111921,111929,111934,111939,111943,111947,111952,111957,111961,111966,111971,111976,111980,111985,111990,111995,112000,112004,112008,112012,112016,112020,112025,112030,112034,112038,112042,112046,112050,112065,112074,112086,112109,112116,112120,112124,112134,112148,112162,112169,112173,112177,112191,112203,112215,112228,112243,112260,112264,112268,112280,112292,112300,112308,112312,112328,112333,112346,112359,112374,112378,112413,112445,112449,112453,112462,112466,112482,112492,112503,112519,112535,112551,112567,112571,112589,112609,112628,112632,112636,112648],{"__ignoreMap":63},[68,111898,111899,111901],{"class":70,"line":71},[68,111900,30593],{"class":331},[68,111902,101501],{"class":335},[68,111904,111905,111907,111909,111911],{"class":70,"line":92},[68,111906,30593],{"class":331},[68,111908,31581],{"class":335},[68,111910,31584],{"class":331},[68,111912,31587],{"class":335},[68,111914,111915],{"class":70,"line":1387},[68,111916,2606],{"emptyLinePlaceholder":260},[68,111918,111919],{"class":70,"line":1402},[68,111920,2606],{"emptyLinePlaceholder":260},[68,111922,111923,111925,111927],{"class":70,"line":1408},[68,111924,101514],{"class":82},[68,111926,13769],{"class":331},[68,111928,101519],{"class":78},[68,111930,111931],{"class":70,"line":1422},[68,111932,111933],{"class":78},"\u003Cmujoco model=\"two_link_reacher\">\n",[68,111935,111936],{"class":70,"line":1428},[68,111937,111938],{"class":78},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[68,111940,111941],{"class":70,"line":1519},[68,111942,2606],{"emptyLinePlaceholder":260},[68,111944,111945],{"class":70,"line":1525},[68,111946,101538],{"class":78},[68,111948,111949],{"class":70,"line":1537},[68,111950,111951],{"class":78},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[68,111953,111954],{"class":70,"line":1819},[68,111955,111956],{"class":78},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[68,111958,111959],{"class":70,"line":1824},[68,111960,2606],{"emptyLinePlaceholder":260},[68,111962,111963],{"class":70,"line":1830},[68,111964,111965],{"class":78},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[68,111967,111968],{"class":70,"line":1835},[68,111969,111970],{"class":78},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,111972,111973],{"class":70,"line":1849},[68,111974,111975],{"class":78},"      \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",[68,111977,111978],{"class":70,"line":1854},[68,111979,2606],{"emptyLinePlaceholder":260},[68,111981,111982],{"class":70,"line":1860},[68,111983,111984],{"class":78},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[68,111986,111987],{"class":70,"line":1881},[68,111988,111989],{"class":78},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[68,111991,111992],{"class":70,"line":1886},[68,111993,111994],{"class":78},"        \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",[68,111996,111997],{"class":70,"line":1900},[68,111998,111999],{"class":78},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[68,112001,112002],{"class":70,"line":1905},[68,112003,106638],{"class":78},[68,112005,112006],{"class":70,"line":1934},[68,112007,101567],{"class":78},[68,112009,112010],{"class":70,"line":1939},[68,112011,101572],{"class":78},[68,112013,112014],{"class":70,"line":1956},[68,112015,2606],{"emptyLinePlaceholder":260},[68,112017,112018],{"class":70,"line":1961},[68,112019,106655],{"class":78},[68,112021,112022],{"class":70,"line":1966},[68,112023,112024],{"class":78},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,112026,112027],{"class":70,"line":1971},[68,112028,112029],{"class":78},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[68,112031,112032],{"class":70,"line":1985},[68,112033,106665],{"class":78},[68,112035,112036],{"class":70,"line":1990},[68,112037,101577],{"class":78},[68,112039,112040],{"class":70,"line":2783},[68,112041,95899],{"class":78},[68,112043,112044],{"class":70,"line":2797},[68,112045,2606],{"emptyLinePlaceholder":260},[68,112047,112048],{"class":70,"line":2805},[68,112049,2606],{"emptyLinePlaceholder":260},[68,112051,112052,112054,112057,112060,112062],{"class":70,"line":2810},[68,112053,32148],{"class":331},[68,112055,112056],{"class":74}," site_position",[68,112058,112059],{"class":335},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[68,112061,1507],{"class":82},[68,112063,112064],{"class":335},") -> np.ndarray:\n",[68,112066,112067,112069,112071],{"class":70,"line":2816},[68,112068,103600],{"class":335},[68,112070,381],{"class":331},[68,112072,112073],{"class":335}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[68,112075,112076,112078,112080,112082,112084],{"class":70,"line":2822},[68,112077,3307],{"class":331},[68,112079,103649],{"class":335},[68,112081,1243],{"class":331},[68,112083,4299],{"class":82},[68,112085,3945],{"class":335},[68,112087,112088,112090,112092,112094,112096,112099,112101,112103,112105,112107],{"class":70,"line":2827},[68,112089,103632],{"class":331},[68,112091,103635],{"class":82},[68,112093,336],{"class":335},[68,112095,387],{"class":331},[68,112097,112098],{"class":78},"\"site not found: ",[68,112100,1229],{"class":82},[68,112102,80011],{"class":335},[68,112104,1279],{"class":82},[68,112106,584],{"class":78},[68,112108,342],{"class":335},[68,112110,112111,112113],{"class":70,"line":8153},[68,112112,4296],{"class":331},[68,112114,112115],{"class":335}," data.site_xpos[site_id].copy()\n",[68,112117,112118],{"class":70,"line":8177},[68,112119,2606],{"emptyLinePlaceholder":260},[68,112121,112122],{"class":70,"line":8182},[68,112123,2606],{"emptyLinePlaceholder":260},[68,112125,112126,112128,112131],{"class":70,"line":8188},[68,112127,32148],{"class":331},[68,112129,112130],{"class":74}," get_obs",[68,112132,112133],{"class":335},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[68,112135,112136,112139,112141,112144,112146],{"class":70,"line":8215},[68,112137,112138],{"class":335},"    tip ",[68,112140,381],{"class":331},[68,112142,112143],{"class":335}," site_position(model, data, ",[68,112145,111736],{"class":78},[68,112147,342],{"class":335},[68,112149,112150,112153,112155,112157,112160],{"class":70,"line":8220},[68,112151,112152],{"class":335},"    target ",[68,112154,381],{"class":331},[68,112156,112143],{"class":335},[68,112158,112159],{"class":78},"\"target\"",[68,112161,342],{"class":335},[68,112163,112164,112166],{"class":70,"line":8226},[68,112165,4296],{"class":331},[68,112167,112168],{"class":335}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[68,112170,112171],{"class":70,"line":8238},[68,112172,2606],{"emptyLinePlaceholder":260},[68,112174,112175],{"class":70,"line":8250},[68,112176,2606],{"emptyLinePlaceholder":260},[68,112178,112179,112181,112184,112187,112189],{"class":70,"line":8262},[68,112180,32148],{"class":331},[68,112182,112183],{"class":74}," reward",[68,112185,112186],{"class":335},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[68,112188,375],{"class":82},[68,112190,3945],{"class":335},[68,112192,112193,112195,112197,112199,112201],{"class":70,"line":9921},[68,112194,112138],{"class":335},[68,112196,381],{"class":331},[68,112198,112143],{"class":335},[68,112200,111736],{"class":78},[68,112202,342],{"class":335},[68,112204,112205,112207,112209,112211,112213],{"class":70,"line":9946},[68,112206,112152],{"class":335},[68,112208,381],{"class":331},[68,112210,112143],{"class":335},[68,112212,112159],{"class":78},[68,112214,342],{"class":335},[68,112216,112217,112220,112222,112224,112226],{"class":70,"line":9969},[68,112218,112219],{"class":335},"    dist ",[68,112221,381],{"class":331},[68,112223,111801],{"class":335},[68,112225,865],{"class":331},[68,112227,111806],{"class":335},[68,112229,112230,112233,112235,112238,112240],{"class":70,"line":9993},[68,112231,112232],{"class":335},"    control_cost ",[68,112234,381],{"class":331},[68,112236,112237],{"class":82}," 0.01",[68,112239,6723],{"class":331},[68,112241,112242],{"class":335}," np.sum(np.square(data.ctrl))\n",[68,112244,112245,112247,112249,112251,112253,112255,112257],{"class":70,"line":9998},[68,112246,4296],{"class":331},[68,112248,109997],{"class":82},[68,112250,336],{"class":335},[68,112252,865],{"class":331},[68,112254,111796],{"class":335},[68,112256,865],{"class":331},[68,112258,112259],{"class":335}," control_cost)\n",[68,112261,112262],{"class":70,"line":10003},[68,112263,2606],{"emptyLinePlaceholder":260},[68,112265,112266],{"class":70,"line":10008},[68,112267,2606],{"emptyLinePlaceholder":260},[68,112269,112270,112272,112274,112276,112278],{"class":70,"line":10017},[68,112271,32148],{"class":331},[68,112273,2179],{"class":74},[68,112275,101598],{"class":335},[68,112277,95887],{"class":82},[68,112279,3945],{"class":335},[68,112281,112282,112284,112286,112288,112290],{"class":70,"line":10022},[68,112283,101607],{"class":335},[68,112285,381],{"class":331},[68,112287,101612],{"class":335},[68,112289,101514],{"class":82},[68,112291,342],{"class":335},[68,112293,112294,112296,112298],{"class":70,"line":10028},[68,112295,101621],{"class":335},[68,112297,381],{"class":331},[68,112299,101626],{"class":335},[68,112301,112302,112304,112306],{"class":70,"line":10049},[68,112303,110353],{"class":335},[68,112305,381],{"class":331},[68,112307,104961],{"class":82},[68,112309,112310],{"class":70,"line":10055},[68,112311,2606],{"emptyLinePlaceholder":260},[68,112313,112314,112316,112318,112320,112322,112324,112326],{"class":70,"line":10069},[68,112315,3407],{"class":331},[68,112317,31817],{"class":335},[68,112319,26247],{"class":331},[68,112321,32644],{"class":82},[68,112323,336],{"class":335},[68,112325,65275],{"class":82},[68,112327,30987],{"class":335},[68,112329,112330],{"class":70,"line":10075},[68,112331,112332],{"class":335},"        mujoco.mj_forward(model, data)\n",[68,112334,112335,112338,112340,112342,112344],{"class":70,"line":10102},[68,112336,112337],{"class":335},"        tip ",[68,112339,381],{"class":331},[68,112341,112143],{"class":335},[68,112343,111736],{"class":78},[68,112345,342],{"class":335},[68,112347,112348,112351,112353,112355,112357],{"class":70,"line":10111},[68,112349,112350],{"class":335},"        target ",[68,112352,381],{"class":331},[68,112354,112143],{"class":335},[68,112356,112159],{"class":78},[68,112358,342],{"class":335},[68,112360,112361,112364,112366,112369,112371],{"class":70,"line":10117},[68,112362,112363],{"class":335},"        error ",[68,112365,381],{"class":331},[68,112367,112368],{"class":335}," target ",[68,112370,865],{"class":331},[68,112372,112373],{"class":335}," tip\n",[68,112375,112376],{"class":70,"line":10125},[68,112377,2606],{"emptyLinePlaceholder":260},[68,112379,112380,112382,112384,112386,112388,112391,112393,112395,112398,112400,112403,112405,112407,112409,112411],{"class":70,"line":10130},[68,112381,106817],{"class":335},[68,112383,525],{"class":82},[68,112385,4649],{"class":335},[68,112387,381],{"class":331},[68,112389,112390],{"class":335}," np.clip(",[68,112392,105460],{"class":82},[68,112394,6723],{"class":331},[68,112396,112397],{"class":335}," error[",[68,112399,412],{"class":82},[68,112401,112402],{"class":335},"], ",[68,112404,865],{"class":331},[68,112406,102603],{"class":82},[68,112408,12640],{"class":335},[68,112410,102603],{"class":82},[68,112412,342],{"class":335},[68,112414,112415,112417,112419,112421,112423,112425,112427,112429,112431,112433,112435,112437,112439,112441,112443],{"class":70,"line":16809},[68,112416,106817],{"class":335},[68,112418,551],{"class":82},[68,112420,4649],{"class":335},[68,112422,381],{"class":331},[68,112424,112390],{"class":335},[68,112426,105460],{"class":82},[68,112428,6723],{"class":331},[68,112430,112397],{"class":335},[68,112432,525],{"class":82},[68,112434,112402],{"class":335},[68,112436,865],{"class":331},[68,112438,102603],{"class":82},[68,112440,12640],{"class":335},[68,112442,102603],{"class":82},[68,112444,342],{"class":335},[68,112446,112447],{"class":70,"line":16815},[68,112448,2606],{"emptyLinePlaceholder":260},[68,112450,112451],{"class":70,"line":16838},[68,112452,101716],{"class":335},[68,112454,112455,112457,112459],{"class":70,"line":16844},[68,112456,110497],{"class":335},[68,112458,9682],{"class":331},[68,112460,112461],{"class":335}," reward(model, data)\n",[68,112463,112464],{"class":70,"line":16867},[68,112465,2606],{"emptyLinePlaceholder":260},[68,112467,112468,112470,112472,112474,112476,112478,112480],{"class":70,"line":16881},[68,112469,2703],{"class":331},[68,112471,31817],{"class":335},[68,112473,661],{"class":331},[68,112475,5959],{"class":82},[68,112477,101759],{"class":331},[68,112479,4299],{"class":82},[68,112481,3945],{"class":335},[68,112483,112484,112487,112489],{"class":70,"line":16901},[68,112485,112486],{"class":335},"            obs ",[68,112488,381],{"class":331},[68,112490,112491],{"class":335}," get_obs(model, data)\n",[68,112493,112494,112496,112498,112500],{"class":70,"line":16907},[68,112495,34851],{"class":82},[68,112497,336],{"class":335},[68,112499,110531],{"class":78},[68,112501,112502],{"class":335},", step)\n",[68,112504,112505,112507,112509,112512,112515,112517],{"class":70,"line":16918},[68,112506,34851],{"class":82},[68,112508,336],{"class":335},[68,112510,112511],{"class":78},"\"  tip:\"",[68,112513,112514],{"class":335},", np.round(tip, ",[68,112516,406],{"class":82},[68,112518,30698],{"class":335},[68,112520,112521,112523,112525,112528,112531,112533],{"class":70,"line":16941},[68,112522,34851],{"class":82},[68,112524,336],{"class":335},[68,112526,112527],{"class":78},"\"  target:\"",[68,112529,112530],{"class":335},", np.round(target, ",[68,112532,406],{"class":82},[68,112534,30698],{"class":335},[68,112536,112537,112539,112541,112544,112547,112549],{"class":70,"line":16963},[68,112538,34851],{"class":82},[68,112540,336],{"class":335},[68,112542,112543],{"class":78},"\"  ctrl:\"",[68,112545,112546],{"class":335},", np.round(data.ctrl.copy(), ",[68,112548,406],{"class":82},[68,112550,30698],{"class":335},[68,112552,112553,112555,112557,112560,112563,112565],{"class":70,"line":16968},[68,112554,34851],{"class":82},[68,112556,336],{"class":335},[68,112558,112559],{"class":78},"\"  obs_dim:\"",[68,112561,112562],{"class":335},", obs.shape[",[68,112564,525],{"class":82},[68,112566,4863],{"class":335},[68,112568,112569],{"class":70,"line":16974},[68,112570,2606],{"emptyLinePlaceholder":260},[68,112572,112573,112575,112577,112579,112581,112583,112585,112587],{"class":70,"line":16988},[68,112574,31500],{"class":82},[68,112576,336],{"class":335},[68,112578,110576],{"class":78},[68,112580,12640],{"class":335},[68,112582,32219],{"class":82},[68,112584,110583],{"class":335},[68,112586,406],{"class":82},[68,112588,30698],{"class":335},[68,112590,112591,112593,112595,112598,112601,112603,112605,112607],{"class":70,"line":17001},[68,112592,31500],{"class":82},[68,112594,336],{"class":335},[68,112596,112597],{"class":78},"\"final tip:\"",[68,112599,112600],{"class":335},", np.round(site_position(model, data, ",[68,112602,111736],{"class":78},[68,112604,110545],{"class":335},[68,112606,406],{"class":82},[68,112608,30698],{"class":335},[68,112610,112611,112613,112615,112618,112620,112622,112624,112626],{"class":70,"line":17006},[68,112612,31500],{"class":82},[68,112614,336],{"class":335},[68,112616,112617],{"class":78},"\"target:\"",[68,112619,112600],{"class":335},[68,112621,112159],{"class":78},[68,112623,110545],{"class":335},[68,112625,406],{"class":82},[68,112627,30698],{"class":335},[68,112629,112630],{"class":70,"line":17020},[68,112631,2606],{"emptyLinePlaceholder":260},[68,112633,112634],{"class":70,"line":17025},[68,112635,2606],{"emptyLinePlaceholder":260},[68,112637,112638,112640,112642,112644,112646],{"class":70,"line":17031},[68,112639,1738],{"class":331},[68,112641,31421],{"class":82},[68,112643,101759],{"class":331},[68,112645,101762],{"class":78},[68,112647,3945],{"class":335},[68,112649,112650],{"class":70,"line":17036},[68,112651,101769],{"class":335},[19,112653,103770],{},[58,112655,112657],{"className":24027,"code":112656,"language":24029,"meta":63,"style":63},"touch ch7_reacher.py\n",[65,112658,112659],{"__ignoreMap":63},[68,112660,112661,112663],{"class":70,"line":71},[68,112662,101483],{"class":74},[68,112664,112665],{"class":78}," ch7_reacher.py\n",[19,112667,110644],{},[58,112669,112671],{"className":24027,"code":112670,"language":24029,"meta":63,"style":63},"python ch7_reacher.py\n",[65,112672,112673],{"__ignoreMap":63},[68,112674,112675,112677],{"class":70,"line":71},[68,112676,30581],{"class":74},[68,112678,112665],{"class":78},[301,112680,101772],{"id":101772},[19,112682,112683],{},"读取 site 坐标：",[58,112685,112687],{"className":30579,"code":112686,"language":30581,"meta":63,"style":63},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[65,112688,112689],{"__ignoreMap":63},[68,112690,112691,112693,112695,112697,112699],{"class":70,"line":71},[68,112692,32148],{"class":331},[68,112694,112056],{"class":74},[68,112696,112059],{"class":335},[68,112698,1507],{"class":82},[68,112700,112064],{"class":335},[19,112702,112703],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112705,110660],{},[58,112707,112709],{"className":30579,"code":112708,"language":30581,"meta":63,"style":63},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[65,112710,112711],{"__ignoreMap":63},[68,112712,112713,112715],{"class":70,"line":71},[68,112714,17251],{"class":331},[68,112716,112168],{"class":335},[19,112718,112719],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112721,109985],{},[58,112723,112725],{"className":30579,"code":112724,"language":30581,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[65,112726,112727,112739,112752],{"__ignoreMap":63},[68,112728,112729,112731,112733,112735,112737],{"class":70,"line":71},[68,112730,111796],{"class":335},[68,112732,381],{"class":331},[68,112734,111801],{"class":335},[68,112736,865],{"class":331},[68,112738,111806],{"class":335},[68,112740,112741,112744,112746,112748,112750],{"class":70,"line":92},[68,112742,112743],{"class":335},"control_cost ",[68,112745,381],{"class":331},[68,112747,112237],{"class":82},[68,112749,6723],{"class":331},[68,112751,112242],{"class":335},[68,112753,112754,112756,112758,112760,112762,112764,112766],{"class":70,"line":1387},[68,112755,17251],{"class":331},[68,112757,109997],{"class":82},[68,112759,336],{"class":335},[68,112761,865],{"class":331},[68,112763,111796],{"class":335},[68,112765,865],{"class":331},[68,112767,112259],{"class":335},[19,112769,112770],{},"奖励由两部分组成：",[23,112772,112773,112778],{},[26,112774,112775,112777],{},[65,112776,111823],{},"：末端离目标越远，奖励越低。",[26,112779,112780,112783],{},[65,112781,112782],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112785,112786],{},"简单控制器：",[58,112788,112790],{"className":30579,"code":112789,"language":30581,"meta":63,"style":63},"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",[65,112791,112792,112805,112837],{"__ignoreMap":63},[68,112793,112794,112797,112799,112801,112803],{"class":70,"line":71},[68,112795,112796],{"class":335},"error ",[68,112798,381],{"class":331},[68,112800,112368],{"class":335},[68,112802,865],{"class":331},[68,112804,112373],{"class":335},[68,112806,112807,112809,112811,112813,112815,112817,112819,112821,112823,112825,112827,112829,112831,112833,112835],{"class":70,"line":92},[68,112808,106071],{"class":335},[68,112810,525],{"class":82},[68,112812,4649],{"class":335},[68,112814,381],{"class":331},[68,112816,112390],{"class":335},[68,112818,105460],{"class":82},[68,112820,6723],{"class":331},[68,112822,112397],{"class":335},[68,112824,412],{"class":82},[68,112826,112402],{"class":335},[68,112828,865],{"class":331},[68,112830,102603],{"class":82},[68,112832,12640],{"class":335},[68,112834,102603],{"class":82},[68,112836,342],{"class":335},[68,112838,112839,112841,112843,112845,112847,112849,112851,112853,112855,112857,112859,112861,112863,112865,112867],{"class":70,"line":1387},[68,112840,106071],{"class":335},[68,112842,551],{"class":82},[68,112844,4649],{"class":335},[68,112846,381],{"class":331},[68,112848,112390],{"class":335},[68,112850,105460],{"class":82},[68,112852,6723],{"class":331},[68,112854,112397],{"class":335},[68,112856,525],{"class":82},[68,112858,112402],{"class":335},[68,112860,865],{"class":331},[68,112862,102603],{"class":82},[68,112864,12640],{"class":335},[68,112866,102603],{"class":82},[68,112868,342],{"class":335},[19,112870,112871],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[301,112873,101908],{"id":101908},[58,112875,112876],{"className":30579,"code":112686,"language":30581,"meta":63,"style":63},[65,112877,112878],{"__ignoreMap":63},[68,112879,112880,112882,112884,112886,112888],{"class":70,"line":71},[68,112881,32148],{"class":331},[68,112883,112056],{"class":74},[68,112885,112059],{"class":335},[68,112887,1507],{"class":82},[68,112889,112064],{"class":335},[19,112891,112892,112893,112895,112896,82740,112898,28588],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[65,112894,80011],{}," 是 site 的名字，比如 ",[65,112897,111736],{},[65,112899,112159],{},[58,112901,112903],{"className":30579,"code":112902,"language":30581,"meta":63,"style":63},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[65,112904,112905],{"__ignoreMap":63},[68,112906,112907,112909,112911],{"class":70,"line":71},[68,112908,103834],{"class":335},[68,112910,381],{"class":331},[68,112912,112073],{"class":335},[19,112914,112915],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[58,112917,112919],{"className":30579,"code":112918,"language":30581,"meta":63,"style":63},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[65,112920,112921,112933],{"__ignoreMap":63},[68,112922,112923,112925,112927,112929,112931],{"class":70,"line":71},[68,112924,1738],{"class":331},[68,112926,103649],{"class":335},[68,112928,1243],{"class":331},[68,112930,4299],{"class":82},[68,112932,3945],{"class":335},[68,112934,112935,112937,112939,112941,112943,112945,112947,112949,112951,112953],{"class":70,"line":92},[68,112936,104095],{"class":331},[68,112938,103635],{"class":82},[68,112940,336],{"class":335},[68,112942,387],{"class":331},[68,112944,112098],{"class":78},[68,112946,1229],{"class":82},[68,112948,80011],{"class":335},[68,112950,1279],{"class":82},[68,112952,584],{"class":78},[68,112954,342],{"class":335},[19,112956,112957,112958,112961,112962,112964],{},"如果 site 没找到，就主动报错。",[65,112959,112960],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[65,112963,80011],{}," 的值放进字符串里。",[58,112966,112968],{"className":30579,"code":112967,"language":30581,"meta":63,"style":63},"return data.site_xpos[site_id].copy()\n",[65,112969,112970],{"__ignoreMap":63},[68,112971,112972,112974],{"class":70,"line":71},[68,112973,17251],{"class":331},[68,112975,112115],{"class":335},[19,112977,112978,112979,112981,112982,112985],{},"返回这个 site 的世界坐标。",[65,112980,103880],{}," 里的每一行都是一个 site 的 ",[65,112983,112984],{},"(x, y, z)"," 坐标。",[58,112987,112989],{"className":30579,"code":112988,"language":30581,"meta":63,"style":63},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[65,112990,112991],{"__ignoreMap":63},[68,112992,112993,112995,112997],{"class":70,"line":71},[68,112994,32148],{"class":331},[68,112996,112130],{"class":74},[68,112998,112133],{"class":335},[19,113000,113001],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[58,113003,113005],{"className":30579,"code":113004,"language":30581,"meta":63,"style":63},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[65,113006,113007,113019],{"__ignoreMap":63},[68,113008,113009,113011,113013,113015,113017],{"class":70,"line":71},[68,113010,111768],{"class":335},[68,113012,381],{"class":331},[68,113014,112143],{"class":335},[68,113016,111736],{"class":78},[68,113018,342],{"class":335},[68,113020,113021,113023,113025,113027,113029],{"class":70,"line":92},[68,113022,111778],{"class":335},[68,113024,381],{"class":331},[68,113026,112143],{"class":335},[68,113028,112159],{"class":78},[68,113030,342],{"class":335},[19,113032,113033],{},"分别读取末端点和目标点的世界坐标。",[58,113035,113036],{"className":30579,"code":112708,"language":30581,"meta":63,"style":63},[65,113037,113038],{"__ignoreMap":63},[68,113039,113040,113042],{"class":70,"line":71},[68,113041,17251],{"class":331},[68,113043,112168],{"class":335},[19,113045,113046],{},"把四部分拼成一个观测数组：",[58,113048,113051],{"className":113049,"code":113050,"language":5393,"meta":63},[5391],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[65,113052,113050],{"__ignoreMap":63},[58,113054,113056],{"className":30579,"code":113055,"language":30581,"meta":63,"style":63},"dist = np.linalg.norm(tip - target)\n",[65,113057,113058],{"__ignoreMap":63},[68,113059,113060,113062,113064,113066,113068],{"class":70,"line":71},[68,113061,111796],{"class":335},[68,113063,381],{"class":331},[68,113065,111801],{"class":335},[68,113067,865],{"class":331},[68,113069,111806],{"class":335},[19,113071,113072,113073,113076,113077,113080],{},"计算 tip 到 target 的距离。",[65,113074,113075],{},"tip - target"," 得到一个三维向量，",[65,113078,113079],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113082,14838],{},[58,113084,113087],{"className":113085,"code":113086,"language":5393,"meta":63},[5391],"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",[65,113088,113086],{"__ignoreMap":63},[58,113090,113092],{"className":30579,"code":113091,"language":30581,"meta":63,"style":63},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[65,113093,113094],{"__ignoreMap":63},[68,113095,113096,113098,113100,113102,113104],{"class":70,"line":71},[68,113097,112743],{"class":335},[68,113099,381],{"class":331},[68,113101,112237],{"class":82},[68,113103,6723],{"class":331},[68,113105,112242],{"class":335},[19,113107,113108,113109,113112,113113,113116],{},"计算动作惩罚。",[65,113110,113111],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[65,113114,113115],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[58,113118,113120],{"className":30579,"code":113119,"language":30581,"meta":63,"style":63},"return float(-dist - control_cost)\n",[65,113121,113122],{"__ignoreMap":63},[68,113123,113124,113126,113128,113130,113132,113134,113136],{"class":70,"line":71},[68,113125,17251],{"class":331},[68,113127,109997],{"class":82},[68,113129,336],{"class":335},[68,113131,865],{"class":331},[68,113133,111796],{"class":335},[68,113135,865],{"class":331},[68,113137,112259],{"class":335},[19,113139,113140],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[58,113142,113143],{"className":30579,"code":111003,"language":30581,"meta":63,"style":63},[65,113144,113145],{"__ignoreMap":63},[68,113146,113147,113149,113151],{"class":70,"line":71},[68,113148,111010],{"class":335},[68,113150,381],{"class":331},[68,113152,104961],{"class":82},[19,113154,113155],{},"累计奖励变量，记录整个运行过程的总分。",[58,113157,113159],{"className":30579,"code":113158,"language":30581,"meta":63,"style":63},"for step in range(500):\n",[65,113160,113161],{"__ignoreMap":63},[68,113162,113163,113165,113167,113169,113171,113173,113175],{"class":70,"line":71},[68,113164,3231],{"class":331},[68,113166,31817],{"class":335},[68,113168,26247],{"class":331},[68,113170,32644],{"class":82},[68,113172,336],{"class":335},[68,113174,65275],{"class":82},[68,113176,30987],{"class":335},[19,113178,113179],{},"运行 500 个控制步。",[58,113181,113182],{"className":30579,"code":104743,"language":30581,"meta":63,"style":63},[65,113183,113184],{"__ignoreMap":63},[68,113185,113186],{"class":70,"line":71},[68,113187,104743],{"class":335},[19,113189,113190,113191,101218,113193,113195],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[65,113192,103431],{},[65,113194,103434],{}," 是当前状态下的坐标。",[58,113197,113199],{"className":30579,"code":113198,"language":30581,"meta":63,"style":63},"error = target - tip\n",[65,113200,113201],{"__ignoreMap":63},[68,113202,113203,113205,113207,113209,113211],{"class":70,"line":71},[68,113204,112796],{"class":335},[68,113206,381],{"class":331},[68,113208,112368],{"class":335},[68,113210,865],{"class":331},[68,113212,112373],{"class":335},[19,113214,113215],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[58,113217,113219],{"className":30579,"code":113218,"language":30581,"meta":63,"style":63},"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",[65,113220,113221,113253],{"__ignoreMap":63},[68,113222,113223,113225,113227,113229,113231,113233,113235,113237,113239,113241,113243,113245,113247,113249,113251],{"class":70,"line":71},[68,113224,106071],{"class":335},[68,113226,525],{"class":82},[68,113228,4649],{"class":335},[68,113230,381],{"class":331},[68,113232,112390],{"class":335},[68,113234,105460],{"class":82},[68,113236,6723],{"class":331},[68,113238,112397],{"class":335},[68,113240,412],{"class":82},[68,113242,112402],{"class":335},[68,113244,865],{"class":331},[68,113246,102603],{"class":82},[68,113248,12640],{"class":335},[68,113250,102603],{"class":82},[68,113252,342],{"class":335},[68,113254,113255,113257,113259,113261,113263,113265,113267,113269,113271,113273,113275,113277,113279,113281,113283],{"class":70,"line":92},[68,113256,106071],{"class":335},[68,113258,551],{"class":82},[68,113260,4649],{"class":335},[68,113262,381],{"class":331},[68,113264,112390],{"class":335},[68,113266,105460],{"class":82},[68,113268,6723],{"class":331},[68,113270,112397],{"class":335},[68,113272,525],{"class":82},[68,113274,112402],{"class":335},[68,113276,865],{"class":331},[68,113278,102603],{"class":82},[68,113280,12640],{"class":335},[68,113282,102603],{"class":82},[68,113284,342],{"class":335},[19,113286,113287,113288,113291],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[65,113289,113290],{},"error -> ctrl -> step"," 的流程。",[58,113293,113294],{"className":30579,"code":104705,"language":30581,"meta":63,"style":63},[65,113295,113296],{"__ignoreMap":63},[68,113297,113298],{"class":70,"line":71},[68,113299,104705],{"class":335},[19,113301,113302],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[58,113304,113306],{"className":30579,"code":113305,"language":30581,"meta":63,"style":63},"obs = get_obs(model, data)\n",[65,113307,113308],{"__ignoreMap":63},[68,113309,113310,113312,113314],{"class":70,"line":71},[68,113311,111054],{"class":335},[68,113313,381],{"class":331},[68,113315,112491],{"class":335},[19,113317,113318,113319,113322],{},"读取最新观测。后面打印 ",[65,113320,113321],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113324,102516],{"id":102515},[19,113326,113327],{},"观测维度为:",[58,113329,113332],{"className":113330,"code":113331,"language":5393,"meta":63},[5391],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[65,113333,113331],{"__ignoreMap":63},[19,113335,113336],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113338,113339],{},"程序每 100 步打印：",[58,113341,113344],{"className":113342,"code":113343,"language":5393,"meta":63},[5391],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[65,113345,113343],{"__ignoreMap":63},[19,113347,113348,113349,113351],{},"如果控制有效，你应该看到最终 ",[65,113350,103431],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113353,102548],{"id":102547},[23,113355,113356,113359,113362,113368,113374,113381,113391],{},[26,113357,113358],{},"修改目标点位置。",[26,113360,113361],{},"重新运行，观察最终 tip 是否变化。",[26,113363,113364,113365,113367],{},"把 gravity 改成 ",[65,113366,102789],{},"，观察控制是否变差。",[26,113369,111381,113370,111385,113372,28588],{},[65,113371,102358],{},[65,113373,412],{},[26,113375,102611,113376,102614,113378,113380],{},[65,113377,110796],{},[65,113379,107507],{},"，观察机械臂是否更难移动。",[26,113382,102611,113383,82731,113385,102614,113387,113390],{},[65,113384,103434],{},[65,113386,104346],{},[65,113388,113389],{},"0.2 0 0.6","，观察 reward 和 final tip。",[26,113392,113393],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113395,102653],{"id":102652},[301,113397,113399],{"id":113398},"site-not-found",[65,113400,113401],{},"site not found",[19,113403,113404,113405,101218,113408,28588],{},"检查 XML 中是否有 ",[65,113406,113407],{},"site name=\"tip\"",[65,113409,113410],{},"site name=\"target\"",[301,113412,113413],{"id":113413},"机械臂完全不动",[19,113415,102723],{},[23,113417,113418,113423,113426,113431],{},[26,113419,113420,113422],{},[65,113421,102358],{}," 是否为 2",[26,113424,113425],{},"actuator 是否引用正确 joint",[26,113427,113428,113430],{},[65,113429,101276],{}," 是否被赋值",[26,113432,113433,113434],{},"是否执行了 ",[65,113435,100886],{},[301,113437,113438],{"id":113438},"控制效果不好",[19,113440,113441],{},"正常。本章重点不是控制器最优，而是任务结构:",[58,113443,113446],{"className":113444,"code":113445,"language":5393,"meta":63},[5391],"obs → action → mj_step → reward → next_obs\n",[65,113447,113445],{"__ignoreMap":63},[301,113449,113451],{"id":113450},"tip-坐标不变化","tip 坐标不变化",[19,113453,102775],{},[23,113455,113456,113461,113469,113478],{},[26,113457,113458,113459,28588],{},"是否每步调用了 ",[65,113460,100886],{},[26,113462,113463,113464,101218,113466,28588],{},"是否写入了 ",[65,113465,106326],{},[65,113467,113468],{},"data.ctrl[1]",[26,113470,113471,113472,546,113475,28588],{},"actuator 是否正确引用 ",[65,113473,113474],{},"joint1",[65,113476,113477],{},"joint2",[26,113479,113480],{},"控制输入是否太小。",[301,113482,113483],{"id":113483},"目标点不会动",[19,113485,113486],{},"本章的 target 是固定 site：",[58,113488,113490],{"className":53268,"code":113489,"language":53270,"meta":63,"style":63},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[65,113491,113492],{"__ignoreMap":63},[68,113493,113494,113496,113498,113500,113502,113504,113506,113508,113511],{"class":70,"line":71},[68,113495,1243],{"class":335},[68,113497,103410],{"class":51501},[68,113499,15125],{"class":74},[68,113501,381],{"class":335},[68,113503,112159],{"class":78},[68,113505,101306],{"class":74},[68,113507,381],{"class":335},[68,113509,113510],{"class":78},"\"0.5 0 0.4\"",[68,113512,113513],{"class":335}," ...\u002F>\n",[19,113515,113516,113517,113519],{},"它直接挂在 ",[65,113518,102041],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[301,113521,113522],{"id":113522},"机械臂不像真实机械臂",[19,113524,113525],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113527,102807],{"id":102806},[19,113529,113530],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113532,113533],{},"核心公式：",[58,113535,113538],{"className":113536,"code":113537,"language":5393,"meta":63},[5391],"distance = ||tip - target||\nreward = -distance - action_cost\n",[65,113539,113537],{"__ignoreMap":63},[19,113541,113542],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[250,113544,113545],{},"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":63,"searchDepth":92,"depth":92,"links":113547},[113548,113549,113550,113555,113559,113560,113561,113569],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":113551},[113552,113553,113554],{"id":111751,"depth":1387,"text":111752},{"id":111827,"depth":1387,"text":111827},{"id":111857,"depth":1387,"text":111858},{"id":101452,"depth":92,"text":101453,"children":113556},[113557,113558],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":113562},[113563,113564,113565,113566,113567,113568],{"id":113398,"depth":1387,"text":113401},{"id":113413,"depth":1387,"text":113413},{"id":113438,"depth":1387,"text":113438},{"id":113450,"depth":1387,"text":113451},{"id":113483,"depth":1387,"text":113483},{"id":113522,"depth":1387,"text":113522},{"id":102806,"depth":92,"text":102807},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111555,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113576,"title":113577,"body":113578,"description":63,"extension":258,"meta":117040,"navigation":260,"path":117041,"seo":117042,"stem":117043,"__hash__":117044},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113579,"toc":117011},[113580,113583,113585,113588,113591,113616,113619,113625,113628,113634,113636,113638,113662,113664,113682,113684,113727,113729,113756,113758,113761,113813,113816,113822,113831,113834,113872,113875,113914,113917,113925,113932,113935,113941,113943,113997,114004,114049,114052,114056,114072,114082,114084,115345,115347,115359,115361,115372,115374,115377,115398,115401,115404,115437,115443,115446,115479,115482,115485,115526,115531,115545,115548,115561,115566,115589,115591,115606,115616,115631,115638,115658,115673,115691,115694,115711,115719,115735,115741,115773,115786,115818,115828,115863,115877,115923,115937,115979,115990,116003,116009,116042,116045,116072,116082,116122,116132,116149,116156,116174,116177,116218,116231,116246,116249,116272,116275,116287,116290,116309,116314,116335,116338,116353,116356,116390,116402,116417,116420,116445,116448,116467,116470,116502,116505,116529,116535,116565,116572,116585,116588,116590,116592,116598,116601,116604,116616,116619,116621,116675,116677,116681,116687,116696,116699,116706,116708,116731,116734,116738,116740,116758,116764,116766,116799,116802,116808,116812,116815,116835,116840,116844,116851,116871,116876,116880,116883,116903,116906,116992,116996,116999,117005,117008],[10,113581,113577],{"id":113582},"_8gymnasium-风格强化学习接口基础",[14,113584,100848],{"id":100847},[19,113586,113587],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113589,113590],{},"你将实现:",[58,113592,113594],{"className":30579,"code":113593,"language":30581,"meta":63,"style":63},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[65,113595,113596,113606],{"__ignoreMap":63},[68,113597,113598,113601,113603],{"class":70,"line":71},[68,113599,113600],{"class":335},"obs, info ",[68,113602,381],{"class":331},[68,113604,113605],{"class":335}," env.reset()\n",[68,113607,113608,113611,113613],{"class":70,"line":92},[68,113609,113610],{"class":335},"obs, reward, terminated, truncated, info ",[68,113612,381],{"class":331},[68,113614,113615],{"class":335}," env.step(action)\n",[19,113617,113618],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113620,113621,113622,113624],{},"前面章节的代码都是“脚本式”的：在 ",[65,113623,102495],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113626,113627],{},"可以先记住 Gymnasium 环境的核心交互：",[58,113629,113632],{"className":113630,"code":113631,"language":5393,"meta":63},[5391],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[65,113633,113631],{"__ignoreMap":63},[14,113635,100971],{"id":100970},[19,113637,100974],{},[58,113639,113640],{"className":24027,"code":104588,"language":24029,"meta":63,"style":63},[65,113641,113642],{"__ignoreMap":63},[68,113643,113644,113646,113648,113650,113652,113654,113656,113658,113660],{"class":70,"line":71},[68,113645,24780],{"class":74},[68,113647,26519],{"class":78},[68,113649,24039],{"class":78},[68,113651,26604],{"class":82},[68,113653,104603],{"class":78},[68,113655,100999],{"class":78},[68,113657,102701],{"class":78},[68,113659,101015],{"class":78},[68,113661,104612],{"class":78},[19,113663,103019],{},[58,113665,113667],{"className":24027,"code":113666,"language":24029,"meta":63,"style":63},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[65,113668,113669],{"__ignoreMap":63},[68,113670,113671,113673,113675,113677,113679],{"class":70,"line":71},[68,113672,24036],{"class":74},[68,113674,24039],{"class":78},[68,113676,101130],{"class":78},[68,113678,107911],{"class":78},[68,113680,113681],{"class":78}," gymnasium\n",[19,113683,103036],{},[58,113685,113687],{"className":24027,"code":113686,"language":24029,"meta":63,"style":63},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[65,113688,113689,113706,113715],{"__ignoreMap":63},[68,113690,113691,113693,113695,113697,113700,113702,113704],{"class":70,"line":71},[68,113692,30531],{"class":74},[68,113694,29377],{"class":78},[68,113696,25319],{"class":82},[68,113698,113699],{"class":78}," mujoco-gym-api",[68,113701,101175],{"class":78},[68,113703,101178],{"class":82},[68,113705,101181],{"class":82},[68,113707,113708,113710,113712],{"class":70,"line":92},[68,113709,30531],{"class":74},[68,113711,101188],{"class":78},[68,113713,113714],{"class":78}," mujoco-gym-api\n",[68,113716,113717,113719,113721,113723,113725],{"class":70,"line":1387},[68,113718,24036],{"class":74},[68,113720,24039],{"class":78},[68,113722,101130],{"class":78},[68,113724,107911],{"class":78},[68,113726,113681],{"class":78},[19,113728,101204],{},[23,113730,113731,113741,113744,113750],{},[26,113732,113733,113734,113737,113738,28588],{},"本章使用 ",[65,113735,113736],{},"gymnasium","，不是旧版 ",[65,113739,113740],{},"gym",[26,113742,113743],{},"Gymnasium API 与旧 Gym API 有差异。",[26,113745,113746,113747,28588],{},"旧 Gym 常见返回值是 4 个: ",[65,113748,113749],{},"obs, reward, done, info",[26,113751,113752,113753,28588],{},"Gymnasium 返回值是 5 个: ",[65,113754,113755],{},"obs, reward, terminated, truncated, info",[14,113757,101245],{"id":101244},[19,113759,113760],{},"强化学习环境接口包含:",[471,113762,113763,113772],{},[474,113764,113765],{},[477,113766,113767,113770],{},[480,113768,113769],{"align":23941},"方法",[480,113771,102896],{"align":23941},[518,113773,113774,113784,113794,113804],{},[477,113775,113776,113781],{},[523,113777,113778],{"align":23941},[65,113779,113780],{},"reset()",[523,113782,113783],{"align":23941},"重置环境",[477,113785,113786,113791],{},[523,113787,113788],{"align":23941},[65,113789,113790],{},"step(action)",[523,113792,113793],{"align":23941},"执行动作",[477,113795,113796,113801],{},[523,113797,113798],{"align":23941},[65,113799,113800],{},"observation_space",[523,113802,113803],{"align":23941},"观测空间",[477,113805,113806,113811],{},[523,113807,113808],{"align":23941},[65,113809,113810],{},"action_space",[523,113812,23859],{"align":23941},[19,113814,113815],{},"一个最小环境需要完成:",[58,113817,113820],{"className":113818,"code":113819,"language":5393,"meta":63},[5391],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[65,113821,113819],{"__ignoreMap":63},[301,113823,113825,101218,113828,104838],{"id":113824},"terminated-和-truncated-的区别",[65,113826,113827],{},"terminated",[65,113829,113830],{},"truncated",[19,113832,113833],{},"Gymnasium 把“结束”拆成两个概念：",[471,113835,113836,113846],{},[474,113837,113838],{},[477,113839,113840,113842,113844],{},[480,113841,104774],{"align":23941},[480,113843,100901],{"align":23941},[480,113845,21392],{"align":23941},[518,113847,113848,113860],{},[477,113849,113850,113854,113857],{},[523,113851,113852],{"align":23941},[65,113853,113827],{},[523,113855,113856],{"align":23941},"任务自然结束",[523,113858,113859],{"align":23941},"机械臂到达目标、机器人摔倒",[477,113861,113862,113866,113869],{},[523,113863,113864],{"align":23941},[65,113865,113830],{},[523,113867,113868],{"align":23941},"因外部限制截断",[523,113870,113871],{"align":23941},"达到最大步数、时间限制",[19,113873,113874],{},"本章中：",[58,113876,113878],{"className":30579,"code":113877,"language":30581,"meta":63,"style":63},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[65,113879,113880,113895],{"__ignoreMap":63},[68,113881,113882,113885,113887,113890,113892],{"class":70,"line":71},[68,113883,113884],{"class":335},"terminated ",[68,113886,381],{"class":331},[68,113888,113889],{"class":335}," dist ",[68,113891,1243],{"class":331},[68,113893,113894],{"class":82}," 0.05\n",[68,113896,113897,113900,113902,113904,113907,113909,113911],{"class":70,"line":92},[68,113898,113899],{"class":335},"truncated ",[68,113901,381],{"class":331},[68,113903,39074],{"class":82},[68,113905,113906],{"class":335},".steps ",[68,113908,1917],{"class":331},[68,113910,39074],{"class":82},[68,113912,113913],{"class":335},".max_steps\n",[19,113915,113916],{},"也就是：",[23,113918,113919,113922],{},[26,113920,113921],{},"末端距离目标小于 0.05，任务成功结束。",[26,113923,113924],{},"步数超过上限，episode 被截断。",[301,113926,113928,101218,113930],{"id":113927},"observation_space-和-action_space",[65,113929,113800],{},[65,113931,113810],{},[19,113933,113934],{},"这两个对象告诉算法：",[58,113936,113939],{"className":113937,"code":113938,"language":5393,"meta":63},[5391],"观测长什么样\n动作允许多大\n",[65,113940,113938],{"__ignoreMap":63},[19,113942,14838],{},[58,113944,113946],{"className":30579,"code":113945,"language":30581,"meta":63,"style":63},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[65,113947,113948],{"__ignoreMap":63},[68,113949,113950,113952,113955,113957,113960,113963,113966,113968,113970,113973,113975,113977,113979,113981,113983,113985,113987,113990,113992,113994],{"class":70,"line":71},[68,113951,31024],{"class":82},[68,113953,113954],{"class":335},".action_space ",[68,113956,381],{"class":331},[68,113958,113959],{"class":335}," spaces.Box(",[68,113961,113962],{"class":5421},"low",[68,113964,113965],{"class":331},"=-",[68,113967,102603],{"class":82},[68,113969,12640],{"class":335},[68,113971,113972],{"class":5421},"high",[68,113974,381],{"class":331},[68,113976,102603],{"class":82},[68,113978,12640],{"class":335},[68,113980,96164],{"class":5421},[68,113982,381],{"class":331},[68,113984,336],{"class":335},[68,113986,412],{"class":82},[68,113988,113989],{"class":335},",), ",[68,113991,93701],{"class":5421},[68,113993,381],{"class":331},[68,113995,113996],{"class":335},"np.float32)\n",[19,113998,113999,114000,114003],{},"表示动作是 2 维数组，每个值都在 ",[65,114001,114002],{},"[-1, 1]"," 范围内。",[58,114005,114007],{"className":30579,"code":114006,"language":30581,"meta":63,"style":63},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[65,114008,114009],{"__ignoreMap":63},[68,114010,114011,114013,114016,114018,114020,114022,114024,114027,114029,114031,114033,114035,114037,114039,114041,114043,114045,114047],{"class":70,"line":71},[68,114012,31024],{"class":82},[68,114014,114015],{"class":335},".observation_space ",[68,114017,381],{"class":331},[68,114019,113959],{"class":335},[68,114021,113962],{"class":5421},[68,114023,113965],{"class":331},[68,114025,114026],{"class":335},"np.inf, ",[68,114028,113972],{"class":5421},[68,114030,381],{"class":331},[68,114032,114026],{"class":335},[68,114034,96164],{"class":5421},[68,114036,381],{"class":331},[68,114038,336],{"class":335},[68,114040,779],{"class":82},[68,114042,113989],{"class":335},[68,114044,93701],{"class":5421},[68,114046,381],{"class":331},[68,114048,113996],{"class":335},[19,114050,114051],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[301,114053,114055],{"id":114054},"frame_skip-是什么","frame_skip 是什么",[58,114057,114059],{"className":30579,"code":114058,"language":30581,"meta":63,"style":63},"self.frame_skip = 5\n",[65,114060,114061],{"__ignoreMap":63},[68,114062,114063,114065,114068,114070],{"class":70,"line":71},[68,114064,31024],{"class":82},[68,114066,114067],{"class":335},".frame_skip ",[68,114069,381],{"class":331},[68,114071,54628],{"class":82},[19,114073,114074,114075,114078,114079,114081],{},"表示外部调用一次 ",[65,114076,114077],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[65,114080,101415],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114083,101453],{"id":101452},[58,114085,114087],{"className":30579,"code":114086,"language":30581,"meta":63,"style":63},"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",[65,114088,114089,114101,114107,114117,114128,114132,114136,114144,114149,114153,114157,114161,114165,114169,114173,114177,114182,114186,114190,114194,114199,114203,114207,114211,114215,114219,114223,114227,114231,114235,114239,114243,114247,114251,114269,114284,114288,114301,114311,114326,114343,114347,114368,114387,114412,114426,114430,114440,114452,114462,114466,114508,114546,114550,114560,114576,114591,114610,114617,114621,114634,114649,114664,114677,114696,114712,114716,114757,114772,114787,114791,114830,114841,114854,114858,114868,114877,114881,114891,114906,114924,114928,114939,114956,114969,114973,114983,114987,114998,115009,115013,115027,115041,115057,115061,115074,115091,115106,115113,115117,115121,115133,115143,115161,115173,115185,115189,115197,115213,115222,115231,115239,115281,115294,115299,115303,115321,115325,115329,115341],{"__ignoreMap":63},[68,114090,114091,114093,114096,114098],{"class":70,"line":71},[68,114092,30593],{"class":331},[68,114094,114095],{"class":335}," gymnasium ",[68,114097,31584],{"class":331},[68,114099,114100],{"class":335}," gym\n",[68,114102,114103,114105],{"class":70,"line":92},[68,114104,30593],{"class":331},[68,114106,101501],{"class":335},[68,114108,114109,114111,114113,114115],{"class":70,"line":1387},[68,114110,30593],{"class":331},[68,114112,31581],{"class":335},[68,114114,31584],{"class":331},[68,114116,31587],{"class":335},[68,114118,114119,114121,114123,114125],{"class":70,"line":1402},[68,114120,30938],{"class":331},[68,114122,114095],{"class":335},[68,114124,30593],{"class":331},[68,114126,114127],{"class":335}," spaces\n",[68,114129,114130],{"class":70,"line":1408},[68,114131,2606],{"emptyLinePlaceholder":260},[68,114133,114134],{"class":70,"line":1422},[68,114135,2606],{"emptyLinePlaceholder":260},[68,114137,114138,114140,114142],{"class":70,"line":1428},[68,114139,101514],{"class":82},[68,114141,13769],{"class":331},[68,114143,101519],{"class":78},[68,114145,114146],{"class":70,"line":1519},[68,114147,114148],{"class":78},"\u003Cmujoco model=\"gym_reacher\">\n",[68,114150,114151],{"class":70,"line":1525},[68,114152,111938],{"class":78},[68,114154,114155],{"class":70,"line":1537},[68,114156,2606],{"emptyLinePlaceholder":260},[68,114158,114159],{"class":70,"line":1819},[68,114160,101538],{"class":78},[68,114162,114163],{"class":70,"line":1824},[68,114164,111956],{"class":78},[68,114166,114167],{"class":70,"line":1830},[68,114168,2606],{"emptyLinePlaceholder":260},[68,114170,114171],{"class":70,"line":1835},[68,114172,111965],{"class":78},[68,114174,114175],{"class":70,"line":1849},[68,114176,111970],{"class":78},[68,114178,114179],{"class":70,"line":1854},[68,114180,114181],{"class":78},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[68,114183,114184],{"class":70,"line":1860},[68,114185,2606],{"emptyLinePlaceholder":260},[68,114187,114188],{"class":70,"line":1881},[68,114189,111984],{"class":78},[68,114191,114192],{"class":70,"line":1886},[68,114193,111989],{"class":78},[68,114195,114196],{"class":70,"line":1900},[68,114197,114198],{"class":78},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[68,114200,114201],{"class":70,"line":1905},[68,114202,111999],{"class":78},[68,114204,114205],{"class":70,"line":1934},[68,114206,106638],{"class":78},[68,114208,114209],{"class":70,"line":1939},[68,114210,101567],{"class":78},[68,114212,114213],{"class":70,"line":1956},[68,114214,101572],{"class":78},[68,114216,114217],{"class":70,"line":1961},[68,114218,2606],{"emptyLinePlaceholder":260},[68,114220,114221],{"class":70,"line":1966},[68,114222,106655],{"class":78},[68,114224,114225],{"class":70,"line":1971},[68,114226,112024],{"class":78},[68,114228,114229],{"class":70,"line":1985},[68,114230,112029],{"class":78},[68,114232,114233],{"class":70,"line":1990},[68,114234,106665],{"class":78},[68,114236,114237],{"class":70,"line":2783},[68,114238,101577],{"class":78},[68,114240,114241],{"class":70,"line":2797},[68,114242,95899],{"class":78},[68,114244,114245],{"class":70,"line":2805},[68,114246,2606],{"emptyLinePlaceholder":260},[68,114248,114249],{"class":70,"line":2810},[68,114250,2606],{"emptyLinePlaceholder":260},[68,114252,114253,114255,114258,114260,114262,114264,114267],{"class":70,"line":2816},[68,114254,14899],{"class":331},[68,114256,114257],{"class":74}," ReacherEnv",[68,114259,336],{"class":335},[68,114261,113740],{"class":74},[68,114263,891],{"class":335},[68,114265,114266],{"class":74},"Env",[68,114268,30987],{"class":335},[68,114270,114271,114274,114276,114278,114281],{"class":70,"line":2822},[68,114272,114273],{"class":335},"    metadata ",[68,114275,381],{"class":331},[68,114277,4654],{"class":335},[68,114279,114280],{"class":78},"\"render_modes\"",[68,114282,114283],{"class":335},": []}\n",[68,114285,114286],{"class":70,"line":2827},[68,114287,2606],{"emptyLinePlaceholder":260},[68,114289,114290,114292,114294,114297,114299],{"class":70,"line":8153},[68,114291,31002],{"class":331},[68,114293,31005],{"class":82},[68,114295,114296],{"class":335},"(self) -> ",[68,114298,95887],{"class":82},[68,114300,3945],{"class":335},[68,114302,114303,114305,114307,114309],{"class":70,"line":8177},[68,114304,31018],{"class":82},[68,114306,17466],{"class":335},[68,114308,31030],{"class":82},[68,114310,2182],{"class":335},[68,114312,114313,114315,114318,114320,114322,114324],{"class":70,"line":8182},[68,114314,31046],{"class":82},[68,114316,114317],{"class":335},".model ",[68,114319,381],{"class":331},[68,114321,101612],{"class":335},[68,114323,101514],{"class":82},[68,114325,342],{"class":335},[68,114327,114328,114330,114333,114335,114338,114340],{"class":70,"line":8188},[68,114329,31046],{"class":82},[68,114331,114332],{"class":335},".data ",[68,114334,381],{"class":331},[68,114336,114337],{"class":335}," mujoco.MjData(",[68,114339,31024],{"class":82},[68,114341,114342],{"class":335},".model)\n",[68,114344,114345],{"class":70,"line":8215},[68,114346,2606],{"emptyLinePlaceholder":260},[68,114348,114349,114351,114354,114356,114359,114361,114364,114366],{"class":70,"line":8220},[68,114350,31046],{"class":82},[68,114352,114353],{"class":335},".tip_site_id ",[68,114355,381],{"class":331},[68,114357,114358],{"class":335}," mujoco.mj_name2id(",[68,114360,31024],{"class":82},[68,114362,114363],{"class":335},".model, mujoco.mjtObj.mjOBJ_SITE, ",[68,114365,111736],{"class":78},[68,114367,342],{"class":335},[68,114369,114370,114372,114375,114377,114379,114381,114383,114385],{"class":70,"line":8226},[68,114371,31046],{"class":82},[68,114373,114374],{"class":335},".target_site_id ",[68,114376,381],{"class":331},[68,114378,114358],{"class":335},[68,114380,31024],{"class":82},[68,114382,114363],{"class":335},[68,114384,112159],{"class":78},[68,114386,342],{"class":335},[68,114388,114389,114391,114393,114395,114397,114399,114402,114404,114406,114408,114410],{"class":70,"line":8238},[68,114390,2703],{"class":331},[68,114392,39074],{"class":82},[68,114394,114353],{"class":335},[68,114396,1243],{"class":331},[68,114398,4299],{"class":82},[68,114400,114401],{"class":331}," or",[68,114403,39074],{"class":82},[68,114405,114374],{"class":335},[68,114407,1243],{"class":331},[68,114409,4299],{"class":82},[68,114411,3945],{"class":335},[68,114413,114414,114417,114419,114421,114424],{"class":70,"line":8250},[68,114415,114416],{"class":331},"            raise",[68,114418,103635],{"class":82},[68,114420,336],{"class":335},[68,114422,114423],{"class":78},"\"required sites not found\"",[68,114425,342],{"class":335},[68,114427,114428],{"class":70,"line":8262},[68,114429,2606],{"emptyLinePlaceholder":260},[68,114431,114432,114434,114436,114438],{"class":70,"line":9921},[68,114433,31046],{"class":82},[68,114435,114067],{"class":335},[68,114437,381],{"class":331},[68,114439,54628],{"class":82},[68,114441,114442,114444,114447,114449],{"class":70,"line":9946},[68,114443,31046],{"class":82},[68,114445,114446],{"class":335},".max_steps ",[68,114448,381],{"class":331},[68,114450,114451],{"class":82}," 200\n",[68,114453,114454,114456,114458,114460],{"class":70,"line":9969},[68,114455,31046],{"class":82},[68,114457,113906],{"class":335},[68,114459,381],{"class":331},[68,114461,47534],{"class":82},[68,114463,114464],{"class":70,"line":9993},[68,114465,2606],{"emptyLinePlaceholder":260},[68,114467,114468,114470,114472,114474,114476,114478,114480,114482,114484,114486,114488,114490,114492,114494,114496,114498,114500,114502,114504,114506],{"class":70,"line":9998},[68,114469,31046],{"class":82},[68,114471,113954],{"class":335},[68,114473,381],{"class":331},[68,114475,113959],{"class":335},[68,114477,113962],{"class":5421},[68,114479,113965],{"class":331},[68,114481,102603],{"class":82},[68,114483,12640],{"class":335},[68,114485,113972],{"class":5421},[68,114487,381],{"class":331},[68,114489,102603],{"class":82},[68,114491,12640],{"class":335},[68,114493,96164],{"class":5421},[68,114495,381],{"class":331},[68,114497,336],{"class":335},[68,114499,412],{"class":82},[68,114501,113989],{"class":335},[68,114503,93701],{"class":5421},[68,114505,381],{"class":331},[68,114507,113996],{"class":335},[68,114509,114510,114512,114514,114516,114518,114520,114522,114524,114526,114528,114530,114532,114534,114536,114538,114540,114542,114544],{"class":70,"line":10003},[68,114511,31046],{"class":82},[68,114513,114015],{"class":335},[68,114515,381],{"class":331},[68,114517,113959],{"class":335},[68,114519,113962],{"class":5421},[68,114521,113965],{"class":331},[68,114523,114026],{"class":335},[68,114525,113972],{"class":5421},[68,114527,381],{"class":331},[68,114529,114026],{"class":335},[68,114531,96164],{"class":5421},[68,114533,381],{"class":331},[68,114535,336],{"class":335},[68,114537,779],{"class":82},[68,114539,113989],{"class":335},[68,114541,93701],{"class":5421},[68,114543,381],{"class":331},[68,114545,113996],{"class":335},[68,114547,114548],{"class":70,"line":10008},[68,114549,2606],{"emptyLinePlaceholder":260},[68,114551,114552,114554,114557],{"class":70,"line":10017},[68,114553,31002],{"class":331},[68,114555,114556],{"class":74}," _get_obs",[68,114558,114559],{"class":335},"(self) -> np.ndarray:\n",[68,114561,114562,114564,114566,114568,114571,114573],{"class":70,"line":10022},[68,114563,112337],{"class":335},[68,114565,381],{"class":331},[68,114567,39074],{"class":82},[68,114569,114570],{"class":335},".data.site_xpos[",[68,114572,31024],{"class":82},[68,114574,114575],{"class":335},".tip_site_id].copy()\n",[68,114577,114578,114580,114582,114584,114586,114588],{"class":70,"line":10028},[68,114579,112350],{"class":335},[68,114581,381],{"class":331},[68,114583,39074],{"class":82},[68,114585,114570],{"class":335},[68,114587,31024],{"class":82},[68,114589,114590],{"class":335},".target_site_id].copy()\n",[68,114592,114593,114595,114597,114600,114602,114605,114607],{"class":70,"line":10049},[68,114594,110382],{"class":335},[68,114596,381],{"class":331},[68,114598,114599],{"class":335}," np.concatenate([",[68,114601,31024],{"class":82},[68,114603,114604],{"class":335},".data.qpos.copy(), ",[68,114606,31024],{"class":82},[68,114608,114609],{"class":335},".data.qvel.copy(), tip, target])\n",[68,114611,114612,114614],{"class":70,"line":10055},[68,114613,14957],{"class":331},[68,114615,114616],{"class":335}," obs.astype(np.float32)\n",[68,114618,114619],{"class":70,"line":10069},[68,114620,2606],{"emptyLinePlaceholder":260},[68,114622,114623,114625,114628,114630,114632],{"class":70,"line":10075},[68,114624,31002],{"class":331},[68,114626,114627],{"class":74}," _get_reward",[68,114629,114296],{"class":335},[68,114631,375],{"class":82},[68,114633,3945],{"class":335},[68,114635,114636,114638,114640,114642,114644,114646],{"class":70,"line":10102},[68,114637,112337],{"class":335},[68,114639,381],{"class":331},[68,114641,39074],{"class":82},[68,114643,114570],{"class":335},[68,114645,31024],{"class":82},[68,114647,114648],{"class":335},".tip_site_id]\n",[68,114650,114651,114653,114655,114657,114659,114661],{"class":70,"line":10111},[68,114652,112350],{"class":335},[68,114654,381],{"class":331},[68,114656,39074],{"class":82},[68,114658,114570],{"class":335},[68,114660,31024],{"class":82},[68,114662,114663],{"class":335},".target_site_id]\n",[68,114665,114666,114669,114671,114673,114675],{"class":70,"line":10117},[68,114667,114668],{"class":335},"        dist ",[68,114670,381],{"class":331},[68,114672,111801],{"class":335},[68,114674,865],{"class":331},[68,114676,111806],{"class":335},[68,114678,114679,114682,114684,114686,114688,114691,114693],{"class":70,"line":10125},[68,114680,114681],{"class":335},"        control_cost ",[68,114683,381],{"class":331},[68,114685,112237],{"class":82},[68,114687,6723],{"class":331},[68,114689,114690],{"class":335}," np.sum(np.square(",[68,114692,31024],{"class":82},[68,114694,114695],{"class":335},".data.ctrl))\n",[68,114697,114698,114700,114702,114704,114706,114708,114710],{"class":70,"line":10130},[68,114699,14957],{"class":331},[68,114701,109997],{"class":82},[68,114703,336],{"class":335},[68,114705,865],{"class":331},[68,114707,111796],{"class":335},[68,114709,865],{"class":331},[68,114711,112259],{"class":335},[68,114713,114714],{"class":70,"line":16809},[68,114715,2606],{"emptyLinePlaceholder":260},[68,114717,114718,114720,114723,114726,114728,114731,114733,114735,114737,114739,114741,114744,114747,114749,114751,114753,114755],{"class":70,"line":16815},[68,114719,31002],{"class":331},[68,114721,114722],{"class":74}," reset",[68,114724,114725],{"class":335},"(self, ",[68,114727,788],{"class":331},[68,114729,114730],{"class":335},", seed: ",[68,114732,339],{"class":82},[68,114734,25313],{"class":331},[68,114736,39134],{"class":82},[68,114738,13769],{"class":331},[68,114740,39134],{"class":82},[68,114742,114743],{"class":335},", options: ",[68,114745,114746],{"class":82},"dict",[68,114748,25313],{"class":331},[68,114750,39134],{"class":82},[68,114752,13769],{"class":331},[68,114754,39134],{"class":82},[68,114756,30987],{"class":335},[68,114758,114759,114761,114764,114767,114769],{"class":70,"line":16838},[68,114760,31018],{"class":82},[68,114762,114763],{"class":335},"().reset(",[68,114765,114766],{"class":5421},"seed",[68,114768,381],{"class":331},[68,114770,114771],{"class":335},"seed)\n",[68,114773,114774,114777,114779,114782,114784],{"class":70,"line":16844},[68,114775,114776],{"class":335},"        mujoco.mj_resetData(",[68,114778,31024],{"class":82},[68,114780,114781],{"class":335},".model, ",[68,114783,31024],{"class":82},[68,114785,114786],{"class":335},".data)\n",[68,114788,114789],{"class":70,"line":16867},[68,114790,2606],{"emptyLinePlaceholder":260},[68,114792,114793,114795,114798,114800,114802,114805,114807,114809,114811,114813,114815,114817,114819,114821,114823,114825,114827],{"class":70,"line":16881},[68,114794,31046],{"class":82},[68,114796,114797],{"class":335},".data.qpos[:] ",[68,114799,381],{"class":331},[68,114801,39074],{"class":82},[68,114803,114804],{"class":335},".np_random.uniform(",[68,114806,113962],{"class":5421},[68,114808,113965],{"class":331},[68,114810,86411],{"class":82},[68,114812,12640],{"class":335},[68,114814,113972],{"class":5421},[68,114816,381],{"class":331},[68,114818,86411],{"class":82},[68,114820,12640],{"class":335},[68,114822,31697],{"class":5421},[68,114824,381],{"class":331},[68,114826,31024],{"class":82},[68,114828,114829],{"class":335},".model.nq)\n",[68,114831,114832,114834,114837,114839],{"class":70,"line":16901},[68,114833,31046],{"class":82},[68,114835,114836],{"class":335},".data.qvel[:] ",[68,114838,381],{"class":331},[68,114840,104961],{"class":82},[68,114842,114843,114846,114848,114850,114852],{"class":70,"line":16907},[68,114844,114845],{"class":335},"        mujoco.mj_forward(",[68,114847,31024],{"class":82},[68,114849,114781],{"class":335},[68,114851,31024],{"class":82},[68,114853,114786],{"class":335},[68,114855,114856],{"class":70,"line":16918},[68,114857,2606],{"emptyLinePlaceholder":260},[68,114859,114860,114862,114864,114866],{"class":70,"line":16941},[68,114861,31046],{"class":82},[68,114863,113906],{"class":335},[68,114865,381],{"class":331},[68,114867,47534],{"class":82},[68,114869,114870,114872,114874],{"class":70,"line":16963},[68,114871,14957],{"class":331},[68,114873,39074],{"class":82},[68,114875,114876],{"class":335},"._get_obs(), {}\n",[68,114878,114879],{"class":70,"line":16968},[68,114880,2606],{"emptyLinePlaceholder":260},[68,114882,114883,114885,114888],{"class":70,"line":16974},[68,114884,31002],{"class":331},[68,114886,114887],{"class":74}," step",[68,114889,114890],{"class":335},"(self, action):\n",[68,114892,114893,114895,114897,114900,114902,114904],{"class":70,"line":16988},[68,114894,110422],{"class":335},[68,114896,381],{"class":331},[68,114898,114899],{"class":335}," np.asarray(action, ",[68,114901,93701],{"class":5421},[68,114903,381],{"class":331},[68,114905,113996],{"class":335},[68,114907,114908,114910,114912,114914,114916,114919,114921],{"class":70,"line":17001},[68,114909,110422],{"class":335},[68,114911,381],{"class":331},[68,114913,107647],{"class":335},[68,114915,31024],{"class":82},[68,114917,114918],{"class":335},".action_space.low, ",[68,114920,31024],{"class":82},[68,114922,114923],{"class":335},".action_space.high)\n",[68,114925,114926],{"class":70,"line":17006},[68,114927,2606],{"emptyLinePlaceholder":260},[68,114929,114930,114932,114935,114937],{"class":70,"line":17020},[68,114931,31046],{"class":82},[68,114933,114934],{"class":335},".data.ctrl[:] ",[68,114936,381],{"class":331},[68,114938,107670],{"class":335},[68,114940,114941,114943,114945,114947,114949,114951,114953],{"class":70,"line":17025},[68,114942,3609],{"class":331},[68,114944,101701],{"class":335},[68,114946,26247],{"class":331},[68,114948,32644],{"class":82},[68,114950,336],{"class":335},[68,114952,31024],{"class":82},[68,114954,114955],{"class":335},".frame_skip):\n",[68,114957,114958,114961,114963,114965,114967],{"class":70,"line":17031},[68,114959,114960],{"class":335},"            mujoco.mj_step(",[68,114962,31024],{"class":82},[68,114964,114781],{"class":335},[68,114966,31024],{"class":82},[68,114968,114786],{"class":335},[68,114970,114971],{"class":70,"line":17036},[68,114972,2606],{"emptyLinePlaceholder":260},[68,114974,114975,114977,114979,114981],{"class":70,"line":17050},[68,114976,31046],{"class":82},[68,114978,113906],{"class":335},[68,114980,9682],{"class":331},[68,114982,55900],{"class":82},[68,114984,114985],{"class":70,"line":17055},[68,114986,2606],{"emptyLinePlaceholder":260},[68,114988,114989,114991,114993,114995],{"class":70,"line":17060},[68,114990,110382],{"class":335},[68,114992,381],{"class":331},[68,114994,39074],{"class":82},[68,114996,114997],{"class":335},"._get_obs()\n",[68,114999,115000,115002,115004,115006],{"class":70,"line":17074},[68,115001,110487],{"class":335},[68,115003,381],{"class":331},[68,115005,39074],{"class":82},[68,115007,115008],{"class":335},"._get_reward()\n",[68,115010,115011],{"class":70,"line":17086},[68,115012,2606],{"emptyLinePlaceholder":260},[68,115014,115015,115017,115019,115021,115023,115025],{"class":70,"line":17091},[68,115016,112337],{"class":335},[68,115018,381],{"class":331},[68,115020,39074],{"class":82},[68,115022,114570],{"class":335},[68,115024,31024],{"class":82},[68,115026,114648],{"class":335},[68,115028,115029,115031,115033,115035,115037,115039],{"class":70,"line":17104},[68,115030,112350],{"class":335},[68,115032,381],{"class":331},[68,115034,39074],{"class":82},[68,115036,114570],{"class":335},[68,115038,31024],{"class":82},[68,115040,114663],{"class":335},[68,115042,115043,115045,115047,115049,115052,115054],{"class":70,"line":17109},[68,115044,114668],{"class":335},[68,115046,381],{"class":331},[68,115048,109997],{"class":82},[68,115050,115051],{"class":335},"(np.linalg.norm(tip ",[68,115053,865],{"class":331},[68,115055,115056],{"class":335}," target))\n",[68,115058,115059],{"class":70,"line":17114},[68,115060,2606],{"emptyLinePlaceholder":260},[68,115062,115063,115066,115068,115070,115072],{"class":70,"line":17119},[68,115064,115065],{"class":335},"        terminated ",[68,115067,381],{"class":331},[68,115069,113889],{"class":335},[68,115071,1243],{"class":331},[68,115073,113894],{"class":82},[68,115075,115076,115079,115081,115083,115085,115087,115089],{"class":70,"line":17132},[68,115077,115078],{"class":335},"        truncated ",[68,115080,381],{"class":331},[68,115082,39074],{"class":82},[68,115084,113906],{"class":335},[68,115086,1917],{"class":331},[68,115088,39074],{"class":82},[68,115090,113913],{"class":335},[68,115092,115093,115096,115098,115100,115103],{"class":70,"line":17137},[68,115094,115095],{"class":335},"        info ",[68,115097,381],{"class":331},[68,115099,4654],{"class":335},[68,115101,115102],{"class":78},"\"distance\"",[68,115104,115105],{"class":335},": dist}\n",[68,115107,115108,115110],{"class":70,"line":32834},[68,115109,14957],{"class":331},[68,115111,115112],{"class":335}," obs, reward, terminated, truncated, info\n",[68,115114,115115],{"class":70,"line":32840},[68,115116,2606],{"emptyLinePlaceholder":260},[68,115118,115119],{"class":70,"line":32846},[68,115120,2606],{"emptyLinePlaceholder":260},[68,115122,115123,115125,115127,115129,115131],{"class":70,"line":32852},[68,115124,32148],{"class":331},[68,115126,2179],{"class":74},[68,115128,101598],{"class":335},[68,115130,95887],{"class":82},[68,115132,3945],{"class":335},[68,115134,115135,115138,115140],{"class":70,"line":32858},[68,115136,115137],{"class":335},"    env ",[68,115139,381],{"class":331},[68,115141,115142],{"class":335}," ReacherEnv()\n",[68,115144,115145,115148,115150,115153,115155,115157,115159],{"class":70,"line":32869},[68,115146,115147],{"class":335},"    obs, info ",[68,115149,381],{"class":331},[68,115151,115152],{"class":335}," env.reset(",[68,115154,114766],{"class":5421},[68,115156,381],{"class":331},[68,115158,525],{"class":82},[68,115160,342],{"class":335},[68,115162,115163,115165,115167,115170],{"class":70,"line":32875},[68,115164,31500],{"class":82},[68,115166,336],{"class":335},[68,115168,115169],{"class":78},"\"initial obs shape:\"",[68,115171,115172],{"class":335},", obs.shape)\n",[68,115174,115175,115177,115179,115182],{"class":70,"line":32895},[68,115176,31500],{"class":82},[68,115178,336],{"class":335},[68,115180,115181],{"class":78},"\"initial info:\"",[68,115183,115184],{"class":335},", info)\n",[68,115186,115187],{"class":70,"line":32901},[68,115188,2606],{"emptyLinePlaceholder":260},[68,115190,115191,115193,115195],{"class":70,"line":32912},[68,115192,110353],{"class":335},[68,115194,381],{"class":331},[68,115196,104961],{"class":82},[68,115198,115199,115201,115203,115205,115207,115209,115211],{"class":70,"line":32918},[68,115200,3407],{"class":331},[68,115202,31817],{"class":335},[68,115204,26247],{"class":331},[68,115206,32644],{"class":82},[68,115208,336],{"class":335},[68,115210,1033],{"class":82},[68,115212,30987],{"class":335},[68,115214,115215,115217,115219],{"class":70,"line":32924},[68,115216,110422],{"class":335},[68,115218,381],{"class":331},[68,115220,115221],{"class":335}," env.action_space.sample()\n",[68,115223,115224,115227,115229],{"class":70,"line":32930},[68,115225,115226],{"class":335},"        obs, reward, terminated, truncated, info ",[68,115228,381],{"class":331},[68,115230,113615],{"class":335},[68,115232,115233,115235,115237],{"class":70,"line":32936},[68,115234,110497],{"class":335},[68,115236,9682],{"class":331},[68,115238,110502],{"class":335},[68,115240,115241,115243,115245,115247,115249,115252,115254,115256,115259,115261,115263,115266,115268,115270,115273,115275,115277,115279],{"class":70,"line":32942},[68,115242,32652],{"class":82},[68,115244,336],{"class":335},[68,115246,110531],{"class":78},[68,115248,110534],{"class":335},[68,115250,115251],{"class":78},"\"reward:\"",[68,115253,12640],{"class":335},[68,115255,32219],{"class":82},[68,115257,115258],{"class":335},"(reward, ",[68,115260,406],{"class":82},[68,115262,110545],{"class":335},[68,115264,115265],{"class":78},"\"distance:\"",[68,115267,12640],{"class":335},[68,115269,32219],{"class":82},[68,115271,115272],{"class":335},"(info[",[68,115274,115102],{"class":78},[68,115276,112402],{"class":335},[68,115278,406],{"class":82},[68,115280,30698],{"class":335},[68,115282,115283,115285,115288,115291],{"class":70,"line":32948},[68,115284,2703],{"class":331},[68,115286,115287],{"class":335}," terminated ",[68,115289,115290],{"class":331},"or",[68,115292,115293],{"class":335}," truncated:\n",[68,115295,115296],{"class":70,"line":32954},[68,115297,115298],{"class":331},"            break\n",[68,115300,115301],{"class":70,"line":32974},[68,115302,2606],{"emptyLinePlaceholder":260},[68,115304,115305,115307,115309,115311,115313,115315,115317,115319],{"class":70,"line":32980},[68,115306,31500],{"class":82},[68,115308,336],{"class":335},[68,115310,110576],{"class":78},[68,115312,12640],{"class":335},[68,115314,32219],{"class":82},[68,115316,110583],{"class":335},[68,115318,406],{"class":82},[68,115320,30698],{"class":335},[68,115322,115323],{"class":70,"line":32996},[68,115324,2606],{"emptyLinePlaceholder":260},[68,115326,115327],{"class":70,"line":33002},[68,115328,2606],{"emptyLinePlaceholder":260},[68,115330,115331,115333,115335,115337,115339],{"class":70,"line":33016},[68,115332,1738],{"class":331},[68,115334,31421],{"class":82},[68,115336,101759],{"class":331},[68,115338,101762],{"class":78},[68,115340,3945],{"class":335},[68,115342,115343],{"class":70,"line":33022},[68,115344,101769],{"class":335},[19,115346,103770],{},[58,115348,115350],{"className":24027,"code":115349,"language":24029,"meta":63,"style":63},"touch ch8_gym_env.py\n",[65,115351,115352],{"__ignoreMap":63},[68,115353,115354,115356],{"class":70,"line":71},[68,115355,101483],{"class":74},[68,115357,115358],{"class":78}," ch8_gym_env.py\n",[19,115360,110644],{},[58,115362,115364],{"className":24027,"code":115363,"language":24029,"meta":63,"style":63},"python ch8_gym_env.py\n",[65,115365,115366],{"__ignoreMap":63},[68,115367,115368,115370],{"class":70,"line":71},[68,115369,30581],{"class":74},[68,115371,115358],{"class":78},[301,115373,101772],{"id":101772},[19,115375,115376],{},"继承 Gymnasium 环境：",[58,115378,115380],{"className":30579,"code":115379,"language":30581,"meta":63,"style":63},"class ReacherEnv(gym.Env):\n",[65,115381,115382],{"__ignoreMap":63},[68,115383,115384,115386,115388,115390,115392,115394,115396],{"class":70,"line":71},[68,115385,14899],{"class":331},[68,115387,114257],{"class":74},[68,115389,336],{"class":335},[68,115391,113740],{"class":74},[68,115393,891],{"class":335},[68,115395,114266],{"class":74},[68,115397,30987],{"class":335},[19,115399,115400],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115402,115403],{},"初始化模型：",[58,115405,115407],{"className":30579,"code":115406,"language":30581,"meta":63,"style":63},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[65,115408,115409,115423],{"__ignoreMap":63},[68,115410,115411,115413,115415,115417,115419,115421],{"class":70,"line":71},[68,115412,31024],{"class":82},[68,115414,114317],{"class":335},[68,115416,381],{"class":331},[68,115418,101612],{"class":335},[68,115420,101514],{"class":82},[68,115422,342],{"class":335},[68,115424,115425,115427,115429,115431,115433,115435],{"class":70,"line":92},[68,115426,31024],{"class":82},[68,115428,114332],{"class":335},[68,115430,381],{"class":331},[68,115432,114337],{"class":335},[68,115434,31024],{"class":82},[68,115436,114342],{"class":335},[19,115438,115439,115440,115442],{},"这和前面章节一样，只是现在放到了类的 ",[65,115441,31030],{}," 里。",[19,115444,115445],{},"缓存 site ID：",[58,115447,115449],{"className":30579,"code":115448,"language":30581,"meta":63,"style":63},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[65,115450,115451,115465],{"__ignoreMap":63},[68,115452,115453,115455,115457,115459,115461,115463],{"class":70,"line":71},[68,115454,31024],{"class":82},[68,115456,114353],{"class":335},[68,115458,381],{"class":331},[68,115460,114358],{"class":335},[68,115462,89755],{"class":82},[68,115464,342],{"class":335},[68,115466,115467,115469,115471,115473,115475,115477],{"class":70,"line":92},[68,115468,31024],{"class":82},[68,115470,114374],{"class":335},[68,115472,381],{"class":331},[68,115474,114358],{"class":335},[68,115476,89755],{"class":82},[68,115478,342],{"class":335},[19,115480,115481],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115483,115484],{},"reset：",[58,115486,115488],{"className":30579,"code":115487,"language":30581,"meta":63,"style":63},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[65,115489,115490],{"__ignoreMap":63},[68,115491,115492,115494,115496,115498,115500,115502,115504,115506,115508,115510,115512,115514,115516,115518,115520,115522,115524],{"class":70,"line":71},[68,115493,32148],{"class":331},[68,115495,114722],{"class":74},[68,115497,114725],{"class":335},[68,115499,788],{"class":331},[68,115501,114730],{"class":335},[68,115503,339],{"class":82},[68,115505,25313],{"class":331},[68,115507,39134],{"class":82},[68,115509,13769],{"class":331},[68,115511,39134],{"class":82},[68,115513,114743],{"class":335},[68,115515,114746],{"class":82},[68,115517,25313],{"class":331},[68,115519,39134],{"class":82},[68,115521,13769],{"class":331},[68,115523,39134],{"class":82},[68,115525,30987],{"class":335},[19,115527,115528,115530],{},[65,115529,70257],{}," 做四件事：",[23,115532,115533,115536,115539,115542],{},[26,115534,115535],{},"设置随机种子。",[26,115537,115538],{},"重置 MuJoCo data。",[26,115540,115541],{},"随机初始化关节角。",[26,115543,115544],{},"返回初始观测和 info。",[19,115546,115547],{},"step：",[58,115549,115551],{"className":30579,"code":115550,"language":30581,"meta":63,"style":63},"def step(self, action):\n",[65,115552,115553],{"__ignoreMap":63},[68,115554,115555,115557,115559],{"class":70,"line":71},[68,115556,32148],{"class":331},[68,115558,114887],{"class":74},[68,115560,114890],{"class":335},[19,115562,115563,115565],{},[65,115564,107334],{}," 做六件事：",[23,115567,115568,115571,115577,115580,115583,115586],{},[26,115569,115570],{},"检查并裁剪 action。",[26,115572,115573,115574,28588],{},"写入 ",[65,115575,115576],{},"self.data.ctrl",[26,115578,115579],{},"连续推进若干个 MuJoCo 物理步。",[26,115581,115582],{},"计算新观测。",[26,115584,115585],{},"计算奖励和结束条件。",[26,115587,115588],{},"返回 Gymnasium 标准五元组。",[301,115590,101908],{"id":101908},[58,115592,115594],{"className":30579,"code":115593,"language":30581,"meta":63,"style":63},"import gymnasium as gym\n",[65,115595,115596],{"__ignoreMap":63},[68,115597,115598,115600,115602,115604],{"class":70,"line":71},[68,115599,30593],{"class":331},[68,115601,114095],{"class":335},[68,115603,31584],{"class":331},[68,115605,114100],{"class":335},[19,115607,115608,115609,115611,115612,115615],{},"导入 Gymnasium，并起别名 ",[65,115610,113740],{},"。后面写 ",[65,115613,115614],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[58,115617,115619],{"className":30579,"code":115618,"language":30581,"meta":63,"style":63},"from gymnasium import spaces\n",[65,115620,115621],{"__ignoreMap":63},[68,115622,115623,115625,115627,115629],{"class":70,"line":71},[68,115624,30938],{"class":331},[68,115626,114095],{"class":335},[68,115628,30593],{"class":331},[68,115630,114127],{"class":335},[19,115632,115633,115634,115637],{},"导入空间定义工具。",[65,115635,115636],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[58,115639,115640],{"className":30579,"code":115379,"language":30581,"meta":63,"style":63},[65,115641,115642],{"__ignoreMap":63},[68,115643,115644,115646,115648,115650,115652,115654,115656],{"class":70,"line":71},[68,115645,14899],{"class":331},[68,115647,114257],{"class":74},[68,115649,336],{"class":335},[68,115651,113740],{"class":74},[68,115653,891],{"class":335},[68,115655,114266],{"class":74},[68,115657,30987],{"class":335},[19,115659,115660,115661,115664,115665,115667,115668,101218,115670,115672],{},"定义一个类，名字叫 ",[65,115662,115663],{},"ReacherEnv","。括号里的 ",[65,115666,115614],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[65,115669,70257],{},[65,115671,107334],{}," 这两个核心方法。",[58,115674,115676],{"className":30579,"code":115675,"language":30581,"meta":63,"style":63},"metadata = {\"render_modes\": []}\n",[65,115677,115678],{"__ignoreMap":63},[68,115679,115680,115683,115685,115687,115689],{"class":70,"line":71},[68,115681,115682],{"class":335},"metadata ",[68,115684,381],{"class":331},[68,115686,4654],{"class":335},[68,115688,114280],{"class":78},[68,115690,114283],{"class":335},[19,115692,115693],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[58,115695,115697],{"className":30579,"code":115696,"language":30581,"meta":63,"style":63},"def __init__(self) -> None:\n",[65,115698,115699],{"__ignoreMap":63},[68,115700,115701,115703,115705,115707,115709],{"class":70,"line":71},[68,115702,32148],{"class":331},[68,115704,31005],{"class":82},[68,115706,114296],{"class":335},[68,115708,95887],{"class":82},[68,115710,3945],{"class":335},[19,115712,115713,115715,115716,28588],{},[65,115714,31030],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[65,115717,115718],{},"env = ReacherEnv()",[58,115720,115722],{"className":30579,"code":115721,"language":30581,"meta":63,"style":63},"super().__init__()\n",[65,115723,115724],{"__ignoreMap":63},[68,115725,115726,115729,115731,115733],{"class":70,"line":71},[68,115727,115728],{"class":82},"super",[68,115730,17466],{"class":335},[68,115732,31030],{"class":82},[68,115734,2182],{"class":335},[19,115736,115737,115738,115740],{},"调用父类 ",[65,115739,115614],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[58,115742,115743],{"className":30579,"code":115406,"language":30581,"meta":63,"style":63},[65,115744,115745,115759],{"__ignoreMap":63},[68,115746,115747,115749,115751,115753,115755,115757],{"class":70,"line":71},[68,115748,31024],{"class":82},[68,115750,114317],{"class":335},[68,115752,381],{"class":331},[68,115754,101612],{"class":335},[68,115756,101514],{"class":82},[68,115758,342],{"class":335},[68,115760,115761,115763,115765,115767,115769,115771],{"class":70,"line":92},[68,115762,31024],{"class":82},[68,115764,114332],{"class":335},[68,115766,381],{"class":331},[68,115768,114337],{"class":335},[68,115770,31024],{"class":82},[68,115772,114342],{"class":335},[19,115774,115775,115776,115778,115779,101218,115782,115785],{},"把 MuJoCo 模型和状态保存到 ",[65,115777,31024],{}," 上。",[65,115780,115781],{},"self.model",[65,115783,115784],{},"self.data"," 表示这个环境对象自己的模型和状态。",[58,115787,115788],{"className":30579,"code":115448,"language":30581,"meta":63,"style":63},[65,115789,115790,115804],{"__ignoreMap":63},[68,115791,115792,115794,115796,115798,115800,115802],{"class":70,"line":71},[68,115793,31024],{"class":82},[68,115795,114353],{"class":335},[68,115797,381],{"class":331},[68,115799,114358],{"class":335},[68,115801,89755],{"class":82},[68,115803,342],{"class":335},[68,115805,115806,115808,115810,115812,115814,115816],{"class":70,"line":92},[68,115807,31024],{"class":82},[68,115809,114374],{"class":335},[68,115811,381],{"class":331},[68,115813,114358],{"class":335},[68,115815,89755],{"class":82},[68,115817,342],{"class":335},[19,115819,115820,115821,101218,115824,115827],{},"提前查好 tip 和 target 的 site ID。这样 ",[65,115822,115823],{},"_get_obs",[65,115825,115826],{},"_get_reward"," 里就不用每次按名字查找。",[58,115829,115831],{"className":30579,"code":115830,"language":30581,"meta":63,"style":63},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[65,115832,115833,115843,115853],{"__ignoreMap":63},[68,115834,115835,115837,115839,115841],{"class":70,"line":71},[68,115836,31024],{"class":82},[68,115838,114067],{"class":335},[68,115840,381],{"class":331},[68,115842,54628],{"class":82},[68,115844,115845,115847,115849,115851],{"class":70,"line":92},[68,115846,31024],{"class":82},[68,115848,114446],{"class":335},[68,115850,381],{"class":331},[68,115852,114451],{"class":82},[68,115854,115855,115857,115859,115861],{"class":70,"line":1387},[68,115856,31024],{"class":82},[68,115858,113906],{"class":335},[68,115860,381],{"class":331},[68,115862,47534],{"class":82},[19,115864,115865,115868,115869,115872,115873,115876],{},[65,115866,115867],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[65,115870,115871],{},"max_steps"," 是一个 episode 最多运行多少步。",[65,115874,115875],{},"steps"," 记录当前 episode 已经走了多少步。",[58,115878,115879],{"className":30579,"code":113945,"language":30581,"meta":63,"style":63},[65,115880,115881],{"__ignoreMap":63},[68,115882,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913,115915,115917,115919,115921],{"class":70,"line":71},[68,115884,31024],{"class":82},[68,115886,113954],{"class":335},[68,115888,381],{"class":331},[68,115890,113959],{"class":335},[68,115892,113962],{"class":5421},[68,115894,113965],{"class":331},[68,115896,102603],{"class":82},[68,115898,12640],{"class":335},[68,115900,113972],{"class":5421},[68,115902,381],{"class":331},[68,115904,102603],{"class":82},[68,115906,12640],{"class":335},[68,115908,96164],{"class":5421},[68,115910,381],{"class":331},[68,115912,336],{"class":335},[68,115914,412],{"class":82},[68,115916,113989],{"class":335},[68,115918,93701],{"class":5421},[68,115920,381],{"class":331},[68,115922,113996],{"class":335},[19,115924,115925,115926,115929,115930,101218,115933,115936],{},"定义动作空间。",[65,115927,115928],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[65,115931,115932],{},"low=-1.0",[65,115934,115935],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[58,115938,115939],{"className":30579,"code":114006,"language":30581,"meta":63,"style":63},[65,115940,115941],{"__ignoreMap":63},[68,115942,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977],{"class":70,"line":71},[68,115944,31024],{"class":82},[68,115946,114015],{"class":335},[68,115948,381],{"class":331},[68,115950,113959],{"class":335},[68,115952,113962],{"class":5421},[68,115954,113965],{"class":331},[68,115956,114026],{"class":335},[68,115958,113972],{"class":5421},[68,115960,381],{"class":331},[68,115962,114026],{"class":335},[68,115964,96164],{"class":5421},[68,115966,381],{"class":331},[68,115968,336],{"class":335},[68,115970,779],{"class":82},[68,115972,113989],{"class":335},[68,115974,93701],{"class":5421},[68,115976,381],{"class":331},[68,115978,113996],{"class":335},[19,115980,115981,115982,115985,115986,115989],{},"定义观测空间。",[65,115983,115984],{},"shape=(10,)"," 表示观测是 10 个数。",[65,115987,115988],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[58,115991,115993],{"className":30579,"code":115992,"language":30581,"meta":63,"style":63},"def _get_obs(self) -> np.ndarray:\n",[65,115994,115995],{"__ignoreMap":63},[68,115996,115997,115999,116001],{"class":70,"line":71},[68,115998,32148],{"class":331},[68,116000,114556],{"class":74},[68,116002,114559],{"class":335},[19,116004,116005,116006,116008],{},"定义内部函数，用来生成观测。函数名前面的 ",[65,116007,1325],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[58,116010,116012],{"className":30579,"code":116011,"language":30581,"meta":63,"style":63},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[65,116013,116014,116028],{"__ignoreMap":63},[68,116015,116016,116018,116020,116022,116024,116026],{"class":70,"line":71},[68,116017,111768],{"class":335},[68,116019,381],{"class":331},[68,116021,39074],{"class":82},[68,116023,114570],{"class":335},[68,116025,31024],{"class":82},[68,116027,114575],{"class":335},[68,116029,116030,116032,116034,116036,116038,116040],{"class":70,"line":92},[68,116031,111778],{"class":335},[68,116033,381],{"class":331},[68,116035,39074],{"class":82},[68,116037,114570],{"class":335},[68,116039,31024],{"class":82},[68,116041,114590],{"class":335},[19,116043,116044],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[58,116046,116048],{"className":30579,"code":116047,"language":30581,"meta":63,"style":63},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[65,116049,116050,116066],{"__ignoreMap":63},[68,116051,116052,116054,116056,116058,116060,116062,116064],{"class":70,"line":71},[68,116053,111054],{"class":335},[68,116055,381],{"class":331},[68,116057,114599],{"class":335},[68,116059,31024],{"class":82},[68,116061,114604],{"class":335},[68,116063,31024],{"class":82},[68,116065,114609],{"class":335},[68,116067,116068,116070],{"class":70,"line":92},[68,116069,17251],{"class":331},[68,116071,114616],{"class":335},[19,116073,116074,116075,116078,116079,116081],{},"拼接观测，并转换成 ",[65,116076,116077],{},"float32","。很多强化学习库默认使用 ",[65,116080,116077],{},"，所以这里主动转换。",[58,116083,116084],{"className":30579,"code":115487,"language":30581,"meta":63,"style":63},[65,116085,116086],{"__ignoreMap":63},[68,116087,116088,116090,116092,116094,116096,116098,116100,116102,116104,116106,116108,116110,116112,116114,116116,116118,116120],{"class":70,"line":71},[68,116089,32148],{"class":331},[68,116091,114722],{"class":74},[68,116093,114725],{"class":335},[68,116095,788],{"class":331},[68,116097,114730],{"class":335},[68,116099,339],{"class":82},[68,116101,25313],{"class":331},[68,116103,39134],{"class":82},[68,116105,13769],{"class":331},[68,116107,39134],{"class":82},[68,116109,114743],{"class":335},[68,116111,114746],{"class":82},[68,116113,25313],{"class":331},[68,116115,39134],{"class":82},[68,116117,13769],{"class":331},[68,116119,39134],{"class":82},[68,116121,30987],{"class":335},[19,116123,116124,116125,116127,116128,116131],{},"定义 reset。",[65,116126,114766],{}," 用来控制随机数，保证实验可以复现。",[65,116129,116130],{},"options"," 用来接收额外配置，本章暂时不用。",[58,116133,116135],{"className":30579,"code":116134,"language":30581,"meta":63,"style":63},"super().reset(seed=seed)\n",[65,116136,116137],{"__ignoreMap":63},[68,116138,116139,116141,116143,116145,116147],{"class":70,"line":71},[68,116140,115728],{"class":82},[68,116142,114763],{"class":335},[68,116144,114766],{"class":5421},[68,116146,381],{"class":331},[68,116148,114771],{"class":335},[19,116150,116151,116152,116155],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[65,116153,116154],{},"self.np_random"," 生成可复现的随机数。",[58,116157,116159],{"className":30579,"code":116158,"language":30581,"meta":63,"style":63},"mujoco.mj_resetData(self.model, self.data)\n",[65,116160,116161],{"__ignoreMap":63},[68,116162,116163,116166,116168,116170,116172],{"class":70,"line":71},[68,116164,116165],{"class":335},"mujoco.mj_resetData(",[68,116167,31024],{"class":82},[68,116169,114781],{"class":335},[68,116171,31024],{"class":82},[68,116173,114786],{"class":335},[19,116175,116176],{},"把 MuJoCo 状态重置到默认状态。",[58,116178,116180],{"className":30579,"code":116179,"language":30581,"meta":63,"style":63},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[65,116181,116182],{"__ignoreMap":63},[68,116183,116184,116186,116188,116190,116192,116194,116196,116198,116200,116202,116204,116206,116208,116210,116212,116214,116216],{"class":70,"line":71},[68,116185,31024],{"class":82},[68,116187,114797],{"class":335},[68,116189,381],{"class":331},[68,116191,39074],{"class":82},[68,116193,114804],{"class":335},[68,116195,113962],{"class":5421},[68,116197,113965],{"class":331},[68,116199,86411],{"class":82},[68,116201,12640],{"class":335},[68,116203,113972],{"class":5421},[68,116205,381],{"class":331},[68,116207,86411],{"class":82},[68,116209,12640],{"class":335},[68,116211,31697],{"class":5421},[68,116213,381],{"class":331},[68,116215,31024],{"class":82},[68,116217,114829],{"class":335},[19,116219,115541,116220,116223,116224,116227,116228,116230],{},[65,116221,116222],{},"[:]"," 表示修改整个数组。",[65,116225,116226],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[65,116229,102350],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[58,116232,116234],{"className":30579,"code":116233,"language":30581,"meta":63,"style":63},"self.data.qvel[:] = 0.0\n",[65,116235,116236],{"__ignoreMap":63},[68,116237,116238,116240,116242,116244],{"class":70,"line":71},[68,116239,31024],{"class":82},[68,116241,114836],{"class":335},[68,116243,381],{"class":331},[68,116245,104961],{"class":82},[19,116247,116248],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[58,116250,116252],{"className":30579,"code":116251,"language":30581,"meta":63,"style":63},"self.steps = 0\nreturn self._get_obs(), {}\n",[65,116253,116254,116264],{"__ignoreMap":63},[68,116255,116256,116258,116260,116262],{"class":70,"line":71},[68,116257,31024],{"class":82},[68,116259,113906],{"class":335},[68,116261,381],{"class":331},[68,116263,47534],{"class":82},[68,116265,116266,116268,116270],{"class":70,"line":92},[68,116267,17251],{"class":331},[68,116269,39074],{"class":82},[68,116271,114876],{"class":335},[19,116273,116274],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[58,116276,116277],{"className":30579,"code":115550,"language":30581,"meta":63,"style":63},[65,116278,116279],{"__ignoreMap":63},[68,116280,116281,116283,116285],{"class":70,"line":71},[68,116282,32148],{"class":331},[68,116284,114887],{"class":74},[68,116286,114890],{"class":335},[19,116288,116289],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[58,116291,116293],{"className":30579,"code":116292,"language":30581,"meta":63,"style":63},"action = np.asarray(action, dtype=np.float32)\n",[65,116294,116295],{"__ignoreMap":63},[68,116296,116297,116299,116301,116303,116305,116307],{"class":70,"line":71},[68,116298,107642],{"class":335},[68,116300,381],{"class":331},[68,116302,114899],{"class":335},[68,116304,93701],{"class":5421},[68,116306,381],{"class":331},[68,116308,113996],{"class":335},[19,116310,116311,116312,28588],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[65,116313,116077],{},[58,116315,116317],{"className":30579,"code":116316,"language":30581,"meta":63,"style":63},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[65,116318,116319],{"__ignoreMap":63},[68,116320,116321,116323,116325,116327,116329,116331,116333],{"class":70,"line":71},[68,116322,107642],{"class":335},[68,116324,381],{"class":331},[68,116326,107647],{"class":335},[68,116328,31024],{"class":82},[68,116330,114918],{"class":335},[68,116332,31024],{"class":82},[68,116334,114923],{"class":335},[19,116336,116337],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[58,116339,116341],{"className":30579,"code":116340,"language":30581,"meta":63,"style":63},"self.data.ctrl[:] = action\n",[65,116342,116343],{"__ignoreMap":63},[68,116344,116345,116347,116349,116351],{"class":70,"line":71},[68,116346,31024],{"class":82},[68,116348,114934],{"class":335},[68,116350,381],{"class":331},[68,116352,107670],{"class":335},[19,116354,116355],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[58,116357,116359],{"className":30579,"code":116358,"language":30581,"meta":63,"style":63},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[65,116360,116361,116377],{"__ignoreMap":63},[68,116362,116363,116365,116367,116369,116371,116373,116375],{"class":70,"line":71},[68,116364,3231],{"class":331},[68,116366,101701],{"class":335},[68,116368,26247],{"class":331},[68,116370,32644],{"class":82},[68,116372,336],{"class":335},[68,116374,31024],{"class":82},[68,116376,114955],{"class":335},[68,116378,116379,116382,116384,116386,116388],{"class":70,"line":92},[68,116380,116381],{"class":335},"    mujoco.mj_step(",[68,116383,31024],{"class":82},[68,116385,114781],{"class":335},[68,116387,31024],{"class":82},[68,116389,114786],{"class":335},[19,116391,116392,116393,116396,116397,116399,116400,28588],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[65,116394,116395],{},"frame_skip=5","，所以外部调用一次 ",[65,116398,114077],{},"，内部实际执行 5 次 ",[65,116401,101415],{},[58,116403,116405],{"className":30579,"code":116404,"language":30581,"meta":63,"style":63},"self.steps += 1\n",[65,116406,116407],{"__ignoreMap":63},[68,116408,116409,116411,116413,116415],{"class":70,"line":71},[68,116410,31024],{"class":82},[68,116412,113906],{"class":335},[68,116414,9682],{"class":331},[68,116416,55900],{"class":82},[19,116418,116419],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[58,116421,116423],{"className":30579,"code":116422,"language":30581,"meta":63,"style":63},"obs = self._get_obs()\nreward = self._get_reward()\n",[65,116424,116425,116435],{"__ignoreMap":63},[68,116426,116427,116429,116431,116433],{"class":70,"line":71},[68,116428,111054],{"class":335},[68,116430,381],{"class":331},[68,116432,39074],{"class":82},[68,116434,114997],{"class":335},[68,116436,116437,116439,116441,116443],{"class":70,"line":92},[68,116438,111205],{"class":335},[68,116440,381],{"class":331},[68,116442,39074],{"class":82},[68,116444,115008],{"class":335},[19,116446,116447],{},"计算新的观测和奖励。",[58,116449,116451],{"className":30579,"code":116450,"language":30581,"meta":63,"style":63},"dist = float(np.linalg.norm(tip - target))\n",[65,116452,116453],{"__ignoreMap":63},[68,116454,116455,116457,116459,116461,116463,116465],{"class":70,"line":71},[68,116456,111796],{"class":335},[68,116458,381],{"class":331},[68,116460,109997],{"class":82},[68,116462,115051],{"class":335},[68,116464,865],{"class":331},[68,116466,115056],{"class":335},[19,116468,116469],{},"计算末端到目标的距离，并转换成 Python float。",[58,116471,116472],{"className":30579,"code":113877,"language":30581,"meta":63,"style":63},[65,116473,116474,116486],{"__ignoreMap":63},[68,116475,116476,116478,116480,116482,116484],{"class":70,"line":71},[68,116477,113884],{"class":335},[68,116479,381],{"class":331},[68,116481,113889],{"class":335},[68,116483,1243],{"class":331},[68,116485,113894],{"class":82},[68,116487,116488,116490,116492,116494,116496,116498,116500],{"class":70,"line":92},[68,116489,113899],{"class":335},[68,116491,381],{"class":331},[68,116493,39074],{"class":82},[68,116495,113906],{"class":335},[68,116497,1917],{"class":331},[68,116499,39074],{"class":82},[68,116501,113913],{"class":335},[19,116503,116504],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[58,116506,116508],{"className":30579,"code":116507,"language":30581,"meta":63,"style":63},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[65,116509,116510,116523],{"__ignoreMap":63},[68,116511,116512,116515,116517,116519,116521],{"class":70,"line":71},[68,116513,116514],{"class":335},"info ",[68,116516,381],{"class":331},[68,116518,4654],{"class":335},[68,116520,115102],{"class":78},[68,116522,115105],{"class":335},[68,116524,116525,116527],{"class":70,"line":92},[68,116526,17251],{"class":331},[68,116528,115112],{"class":335},[19,116530,116531,116534],{},[65,116532,116533],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[58,116536,116538],{"className":30579,"code":116537,"language":30581,"meta":63,"style":63},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[65,116539,116540,116549],{"__ignoreMap":63},[68,116541,116542,116545,116547],{"class":70,"line":71},[68,116543,116544],{"class":335},"env ",[68,116546,381],{"class":331},[68,116548,115142],{"class":335},[68,116550,116551,116553,116555,116557,116559,116561,116563],{"class":70,"line":92},[68,116552,113600],{"class":335},[68,116554,381],{"class":331},[68,116556,115152],{"class":335},[68,116558,114766],{"class":5421},[68,116560,381],{"class":331},[68,116562,525],{"class":82},[68,116564,342],{"class":335},[19,116566,116567,116568,116571],{},"创建环境并重置。",[65,116569,116570],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[58,116573,116575],{"className":30579,"code":116574,"language":30581,"meta":63,"style":63},"action = env.action_space.sample()\n",[65,116576,116577],{"__ignoreMap":63},[68,116578,116579,116581,116583],{"class":70,"line":71},[68,116580,107642],{"class":335},[68,116582,381],{"class":331},[68,116584,115221],{"class":335},[19,116586,116587],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116589,102516],{"id":102515},[19,116591,105684],{},[58,116593,116596],{"className":116594,"code":116595,"language":5393,"meta":63},[5391],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[65,116597,116595],{"__ignoreMap":63},[19,116599,116600],{},"这个环境已经具备强化学习环境的基本结构。",[19,116602,116603],{},"主函数里使用随机动作：",[58,116605,116606],{"className":30579,"code":116574,"language":30581,"meta":63,"style":63},[65,116607,116608],{"__ignoreMap":63},[68,116609,116610,116612,116614],{"class":70,"line":71},[68,116611,107642],{"class":335},[68,116613,381],{"class":331},[68,116615,115221],{"class":335},[19,116617,116618],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116620,102548],{"id":102547},[23,116622,116623,116626,116632,116641,116650,116659,116665],{},[26,116624,116625],{},"运行程序。",[26,116627,116628,116629,28588],{},"确认 ",[65,116630,116631],{},"obs.shape == (10,)",[26,116633,111381,116634,116637,116638,28588],{},[65,116635,116636],{},"env.action_space","，应类似 ",[65,116639,116640],{},"Box(-1.0, 1.0, (2,), float32)",[26,116642,105785,116643,116646,116647,28588],{},[65,116644,116645],{},"self.max_steps = 10","，确认环境会更快 ",[65,116648,116649],{},"truncated=True",[26,116651,102611,116652,102614,116655,116658],{},[65,116653,116654],{},"terminated = dist \u003C 0.05",[65,116656,116657],{},"dist \u003C 0.2","，观察是否更容易结束。",[26,116660,102611,116661,116664],{},[65,116662,116663],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[26,116666,116667,116668,116670,116671,116674],{},"在 ",[65,116669,116533],{}," 里加入 ",[65,116672,116673],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116676,102653],{"id":102652},[301,116678,116680],{"id":116679},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116682,116683,116684,116686],{},"Gymnasium 的 ",[65,116685,107334],{}," 返回 5 个值:",[58,116688,116690],{"className":30579,"code":116689,"language":30581,"meta":63,"style":63},"obs, reward, terminated, truncated, info\n",[65,116691,116692],{"__ignoreMap":63},[68,116693,116694],{"class":70,"line":71},[68,116695,116689],{"class":335},[19,116697,116698],{},"不是旧 Gym 的 4 个值。",[301,116700,116702,116705],{"id":116701},"datactrl-action-维度错误",[65,116703,116704],{},"data.ctrl[:] = action"," 维度错误",[19,116707,102723],{},[58,116709,116711],{"className":30579,"code":116710,"language":30581,"meta":63,"style":63},"print(self.model.nu)\nprint(action.shape)\n",[65,116712,116713,116724],{"__ignoreMap":63},[68,116714,116715,116717,116719,116721],{"class":70,"line":71},[68,116716,30616],{"class":82},[68,116718,336],{"class":335},[68,116720,31024],{"class":82},[68,116722,116723],{"class":335},".model.nu)\n",[68,116725,116726,116728],{"class":70,"line":92},[68,116727,30616],{"class":82},[68,116729,116730],{"class":335},"(action.shape)\n",[19,116732,116733],{},"两者必须匹配。",[301,116735,116737],{"id":116736},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116739,102662],{},[58,116741,116743],{"className":30579,"code":116742,"language":30581,"meta":63,"style":63},"mujoco.mj_forward(self.model, self.data)\n",[65,116744,116745],{"__ignoreMap":63},[68,116746,116747,116750,116752,116754,116756],{"class":70,"line":71},[68,116748,116749],{"class":335},"mujoco.mj_forward(",[68,116751,31024],{"class":82},[68,116753,114781],{"class":335},[68,116755,31024],{"class":82},[68,116757,114786],{"class":335},[301,116759,116761,116763],{"id":116760},"observation_space-维度和-obs-不一致",[65,116762,113800],{}," 维度和 obs 不一致",[19,116765,102775],{},[58,116767,116769],{"className":30579,"code":116768,"language":30581,"meta":63,"style":63},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[65,116770,116771,116781,116788],{"__ignoreMap":63},[68,116772,116773,116775,116777,116779],{"class":70,"line":71},[68,116774,111054],{"class":335},[68,116776,381],{"class":331},[68,116778,39074],{"class":82},[68,116780,114997],{"class":335},[68,116782,116783,116785],{"class":70,"line":92},[68,116784,30616],{"class":82},[68,116786,116787],{"class":335},"(obs.shape)\n",[68,116789,116790,116792,116794,116796],{"class":70,"line":1387},[68,116791,30616],{"class":82},[68,116793,336],{"class":335},[68,116795,31024],{"class":82},[68,116797,116798],{"class":335},".observation_space.shape)\n",[19,116800,116801],{},"两者必须一致。本章观测是：",[58,116803,116806],{"className":116804,"code":116805,"language":5393,"meta":63},[5391],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[65,116807,116805],{"__ignoreMap":63},[301,116809,116811],{"id":116810},"action-超过范围","action 超过范围",[19,116813,116814],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[58,116816,116817],{"className":30579,"code":116316,"language":30581,"meta":63,"style":63},[65,116818,116819],{"__ignoreMap":63},[68,116820,116821,116823,116825,116827,116829,116831,116833],{"class":70,"line":71},[68,116822,107642],{"class":335},[68,116824,381],{"class":331},[68,116826,107647],{"class":335},[68,116828,31024],{"class":82},[68,116830,114918],{"class":335},[68,116832,31024],{"class":82},[68,116834,114923],{"class":335},[19,116836,116837,116838,28588],{},"这能避免无效动作直接写入 ",[65,116839,101276],{},[301,116841,116843],{"id":116842},"忘记返回-info","忘记返回 info",[19,116845,116683,116846,101218,116848,116850],{},[65,116847,70257],{},[65,116849,107334],{}," 都会返回 info：",[58,116852,116853],{"className":30579,"code":113593,"language":30581,"meta":63,"style":63},[65,116854,116855,116863],{"__ignoreMap":63},[68,116856,116857,116859,116861],{"class":70,"line":71},[68,116858,113600],{"class":335},[68,116860,381],{"class":331},[68,116862,113605],{"class":335},[68,116864,116865,116867,116869],{"class":70,"line":92},[68,116866,113610],{"class":335},[68,116868,381],{"class":331},[68,116870,113615],{"class":335},[19,116872,116873,116874,28588],{},"即使暂时没有额外信息，也返回 ",[65,116875,32660],{},[14,116877,116879],{"id":116878},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116881,116882],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[23,116884,116885,116888,116891,116894,116897,116900],{},[26,116886,116887],{},"更稳定的 reward。",[26,116889,116890],{},"合理的 episode 长度。",[26,116892,116893],{},"可重复的随机目标采样。",[26,116895,116896],{},"render 接口。",[26,116898,116899],{},"环境注册代码。",[26,116901,116902],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116904,116905],{},"如果只是自己写训练循环，最小形式是：",[58,116907,116909],{"className":30579,"code":116908,"language":30581,"meta":63,"style":63},"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",[65,116910,116911,116919,116935,116939,116955,116964,116973,116983],{"__ignoreMap":63},[68,116912,116913,116915,116917],{"class":70,"line":71},[68,116914,116544],{"class":335},[68,116916,381],{"class":331},[68,116918,115142],{"class":335},[68,116920,116921,116923,116925,116927,116929,116931,116933],{"class":70,"line":92},[68,116922,113600],{"class":335},[68,116924,381],{"class":331},[68,116926,115152],{"class":335},[68,116928,114766],{"class":5421},[68,116930,381],{"class":331},[68,116932,525],{"class":82},[68,116934,342],{"class":335},[68,116936,116937],{"class":70,"line":1387},[68,116938,2606],{"emptyLinePlaceholder":260},[68,116940,116941,116943,116945,116947,116949,116951,116953],{"class":70,"line":1402},[68,116942,3231],{"class":331},[68,116944,101701],{"class":335},[68,116946,26247],{"class":331},[68,116948,32644],{"class":82},[68,116950,336],{"class":335},[68,116952,6615],{"class":82},[68,116954,30987],{"class":335},[68,116956,116957,116960,116962],{"class":70,"line":1408},[68,116958,116959],{"class":335},"    action ",[68,116961,381],{"class":331},[68,116963,115221],{"class":335},[68,116965,116966,116969,116971],{"class":70,"line":1422},[68,116967,116968],{"class":335},"    obs, reward, terminated, truncated, info ",[68,116970,381],{"class":331},[68,116972,113615],{"class":335},[68,116974,116975,116977,116979,116981],{"class":70,"line":1428},[68,116976,3307],{"class":331},[68,116978,115287],{"class":335},[68,116980,115290],{"class":331},[68,116982,115293],{"class":335},[68,116984,116985,116988,116990],{"class":70,"line":1519},[68,116986,116987],{"class":335},"        obs, info ",[68,116989,381],{"class":331},[68,116991,113605],{"class":335},[14,116993,116995],{"id":116994},"_9本章小结","9.本章小结",[19,116997,116998],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[58,117000,117003],{"className":117001,"code":117002,"language":5393,"meta":63},[5391],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[65,117004,117002],{"__ignoreMap":63},[19,117006,117007],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[250,117009,117010],{},"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":63,"searchDepth":92,"depth":92,"links":117012},[117013,117014,117015,117022,117026,117027,117028,117038,117039],{"id":100847,"depth":92,"text":100848},{"id":100970,"depth":92,"text":100971},{"id":101244,"depth":92,"text":101245,"children":117016},[117017,117019,117021],{"id":113824,"depth":1387,"text":117018},"terminated 和 truncated 的区别",{"id":113927,"depth":1387,"text":117020},"observation_space 和 action_space",{"id":114054,"depth":1387,"text":114055},{"id":101452,"depth":92,"text":101453,"children":117023},[117024,117025],{"id":101772,"depth":1387,"text":101772},{"id":101908,"depth":1387,"text":101908},{"id":102515,"depth":92,"text":102516},{"id":102547,"depth":92,"text":102548},{"id":102652,"depth":92,"text":102653,"children":117029},[117030,117031,117033,117034,117036,117037],{"id":116679,"depth":1387,"text":116680},{"id":116701,"depth":1387,"text":117032},"data.ctrl[:] = action 维度错误",{"id":116736,"depth":1387,"text":116737},{"id":116760,"depth":1387,"text":117035},"observation_space 维度和 obs 不一致",{"id":116810,"depth":1387,"text":116811},{"id":116842,"depth":1387,"text":116843},{"id":116878,"depth":92,"text":116879},{"id":116994,"depth":92,"text":116995},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113577,"description":63},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117046,"title":117047,"body":117048,"description":117471,"extension":258,"meta":117472,"navigation":260,"path":117473,"seo":117474,"stem":117475,"__hash__":117476},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117049,"toc":117461},[117050,117054,117057,117060,117080,117086,117092,117102,117105,117108,117128,117131,117135,117138,117144,117147,117161,117164,117167,117241,117244,117250,117253,117276,117279,117329,117332,117338,117341,117344,117347,117366,117369,117375,117378,117381,117384,117404,117407,117410,117413,117458],[10,117051,117053],{"id":117052},"mujoco-学习","MuJoCo 学习",[19,117055,117056],{},"初版",[19,117058,117059],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[23,117061,117062,117065,117068,117077],{},[26,117063,117064],{},"MuJoCo 模型文件在描述什么。",[26,117066,117067],{},"Python 代码怎样读取和推进仿真。",[26,117069,117070,546,117072,546,117074,117076],{},[65,117071,104230],{},[65,117073,104560],{},[65,117075,104563],{}," 这些数组为什么重要。",[26,117078,117079],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117081,117082,117083,117085],{},"默认环境为 Fedora 44、Python >= 3.10、",[65,117084,101227],{}," 官方 Python bindings。",[19,117087,117088,117089,117091],{},"注意：本文禁止使用 ",[65,117090,101212],{},"。所有示例均使用：",[58,117093,117094],{"className":30579,"code":101778,"language":30581,"meta":63,"style":63},[65,117095,117096],{"__ignoreMap":63},[68,117097,117098,117100],{"class":70,"line":71},[68,117099,30593],{"class":331},[68,117101,101501],{"class":335},[14,117103,117104],{"id":117104},"适合谁阅读",[19,117106,117107],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[23,117109,117110,117113,117116,117119],{},[26,117111,117112],{},"没学过 MuJoCo，只会一点 Python。",[26,117114,117115],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[26,117117,117118],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[26,117120,117121,117122,117124,117125,117127],{},"以前接触过 ",[65,117123,101212],{},"，现在想迁移到官方 ",[65,117126,101221],{}," Python bindings。",[19,117129,117130],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117132,117134],{"id":117133},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117136,117137],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[58,117139,117142],{"className":117140,"code":117141,"language":5393,"meta":63},[5391],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[65,117143,117141],{"__ignoreMap":63},[19,117145,117146],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[23,117148,117149,117152,117155,117158],{},[26,117150,117151],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[26,117153,117154],{},"快速测试控制算法，不必一开始就上真实机器人。",[26,117156,117157],{},"生成强化学习环境。",[26,117159,117160],{},"采集状态、动作、图像、奖励等训练数据。",[14,117162,117163],{"id":117163},"学习前的心智模型",[19,117165,117166],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[471,117168,117169,117181],{},[474,117170,117171],{},[477,117172,117173,117176,117179],{},[480,117174,117175],{"align":23941},"部分",[480,117177,117178],{"align":23941},"负责什么",[480,117180,21392],{"align":23941},[518,117182,117183,117194,117206,117218,117230],{},[477,117184,117185,117188,117191],{},[523,117186,117187],{"align":23941},"MJCF XML",[523,117189,117190],{"align":23941},"定义世界和机器人结构",[523,117192,117193],{"align":23941},"地面、盒子、关节、电机、摄像头",[477,117195,117196,117200,117203],{},[523,117197,117198],{"align":23941},[65,117199,100910],{},[523,117201,117202],{"align":23941},"编译后的静态模型",[523,117204,117205],{"align":23941},"有几个关节、有几个电机、时间步长是多少",[477,117207,117208,117212,117215],{},[523,117209,117210],{"align":23941},[65,117211,100920],{},[523,117213,117214],{"align":23941},"运行中的动态状态",[523,117216,117217],{"align":23941},"当前时间、位置、速度、电机输入",[477,117219,117220,117224,117227],{},[523,117221,117222],{"align":23941},[65,117223,101415],{},[523,117225,117226],{"align":23941},"推进一步物理仿真",[523,117228,117229],{"align":23941},"根据重力、力、碰撞更新状态",[477,117231,117232,117235,117238],{},[523,117233,117234],{"align":23941},"Viewer \u002F Renderer",[523,117236,117237],{"align":23941},"把仿真显示出来",[523,117239,117240],{"align":23941},"打开窗口或保存图片",[19,117242,117243],{},"一句话总结：",[58,117245,117248],{"className":117246,"code":117247,"language":5393,"meta":63},[5391],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[65,117249,117247],{"__ignoreMap":63},[19,117251,117252],{},"参考来源：",[42,117254,117255,117262,117269],{},[26,117256,117257,117258],{},"MuJoCo Python 官方文档：",[30,117259,117260],{"href":117260,"rel":117261},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[34],[26,117263,117264,117265],{},"MuJoCo XML Reference：",[30,117266,117267],{"href":117267,"rel":117268},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[34],[26,117270,117271,117272],{},"MuJoCo Overview：",[30,117273,117274],{"href":117274,"rel":117275},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[34],[14,117277,117278],{"id":117278},"章节目录",[23,117280,117281,117287,117293,117299,117305,117311,117317,117323],{},[26,117282,117283],{},[30,117284,117286],{"href":117285},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[26,117288,117289],{},[30,117290,117292],{"href":117291},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[26,117294,117295],{},[30,117296,117298],{"href":117297},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[26,117300,117301],{},[30,117302,117304],{"href":117303},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[26,117306,117307],{},[30,117308,117310],{"href":117309},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[26,117312,117313],{},[30,117314,117316],{"href":117315},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[26,117318,117319],{},[30,117320,117322],{"href":117321},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[26,117324,117325],{},[30,117326,117328],{"href":117327},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117330,117331],{"id":117331},"推荐学习路线",[58,117333,117336],{"className":117334,"code":117335,"language":5393,"meta":63},[5391],"环境安装\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",[65,117337,117335],{"__ignoreMap":63},[19,117339,117340],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117342,117343],{"id":117343},"建议的目录结构",[19,117345,117346],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[58,117348,117350],{"className":24027,"code":117349,"language":24029,"meta":63,"style":63},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[65,117351,117352,117360],{"__ignoreMap":63},[68,117353,117354,117356,117358],{"class":70,"line":71},[68,117355,101466],{"class":74},[68,117357,29417],{"class":82},[68,117359,101471],{"class":78},[68,117361,117362,117364],{"class":70,"line":92},[68,117363,101476],{"class":82},[68,117365,101471],{"class":78},[19,117367,117368],{},"每一章的代码都单独保存：",[58,117370,117373],{"className":117371,"code":117372,"language":5393,"meta":63},[5391],"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",[65,117374,117372],{"__ignoreMap":63},[19,117376,117377],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117379,117380],{"id":117380},"学习方法",[19,117382,117383],{},"每章建议按这个顺序操作：",[23,117385,117386,117389,117392,117395,117398,117401],{},[26,117387,117388],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[26,117390,117391],{},"复制最小可运行代码，保存成指定文件。",[26,117393,117394],{},"运行代码，确认没有报错。",[26,117396,117397],{},"对照“运行结果说明”理解输出。",[26,117399,117400],{},"做“验证步骤”，主动改一两个参数。",[26,117402,117403],{},"遇到报错先看“常见错误与解决方案”。",[19,117405,117406],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117408,117409],{"id":117409},"全局排错顺序",[19,117411,117412],{},"遇到问题时，按下面顺序查：",[23,117414,117415,117421,117427,117432,117435,117438,117445,117455],{},[26,117416,117417,117418],{},"Python 环境是否激活：",[65,117419,117420],{},"which python",[26,117422,117423,117424],{},"MuJoCo 是否能导入：",[65,117425,117426],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[26,117428,117429,117430],{},"是否误装了 ",[65,117431,101212],{},[26,117433,117434],{},"XML 标签是否闭合、属性是否拼写正确",[26,117436,117437],{},"actuator 引用的 joint 名字是否存在",[26,117439,117440,117442,117443],{},[65,117441,101276],{}," 的长度是否等于 ",[65,117444,102358],{},[26,117446,105785,117447,82740,117449,117451,117452],{},[65,117448,104230],{},[65,117450,104560],{}," 后是否调用了 ",[65,117453,117454],{},"mujoco.mj_forward",[26,117456,117457],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[250,117459,117460],{},"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":63,"searchDepth":92,"depth":92,"links":117462},[117463,117464,117465,117466,117467,117468,117469,117470],{"id":117104,"depth":92,"text":117104},{"id":117133,"depth":92,"text":117134},{"id":117163,"depth":92,"text":117163},{"id":117278,"depth":92,"text":117278},{"id":117331,"depth":92,"text":117331},{"id":117343,"depth":92,"text":117343},{"id":117380,"depth":92,"text":117380},{"id":117409,"depth":92,"text":117409},"仿真搭建。",{"category":23583},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117047,"description":117471},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117478,"title":117479,"body":117480,"description":257,"extension":258,"meta":117933,"navigation":260,"path":117934,"seo":117935,"stem":117936,"__hash__":117937},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117481,"toc":117931},[117482,117485,117488,117494,117928],[10,117483,117479],{"id":117484},"_1-最常用的基本操作更新",[19,117486,117487],{},"装linux系统教程：",[19,117489,117490],{},[30,117491,117492],{"href":117492,"rel":117493},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[34],[58,117495,117497],{"className":60,"code":117496,"language":62,"meta":63,"style":63},"#更新相关的知识\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",[65,117498,117499,117504,117509,117518,117523,117532,117537,117557,117562,117573,117578,117587,117592,117620,117625,117644,117649,117668,117672,117677,117693,117697,117702,117732,117736,117741,117757,117761,117766,117781,117785,117790,117806,117810,117815,117827,117839,117843,117848,117865,117869,117874,117892,117896,117901,117910,117914,117919],{"__ignoreMap":63},[68,117500,117501],{"class":70,"line":71},[68,117502,117503],{"class":393},"#更新相关的知识\n",[68,117505,117506],{"class":70,"line":92},[68,117507,117508],{"class":393},"# 更新软件包列表（从服务器获取最新软件信息）\n",[68,117510,117511,117513,117516],{"class":70,"line":1387},[68,117512,24780],{"class":74},[68,117514,117515],{"class":78}," apt",[68,117517,26446],{"class":78},[68,117519,117520],{"class":70,"line":1402},[68,117521,117522],{"class":393},"# 升级所有可更新的软件包（不删除旧包）\n",[68,117524,117525,117527,117529],{"class":70,"line":1408},[68,117526,24780],{"class":74},[68,117528,117515],{"class":78},[68,117530,117531],{"class":78}," upgrade\n",[68,117533,117534],{"class":70,"line":1422},[68,117535,117536],{"class":393},"#更新和升级软件包\n",[68,117538,117539,117541,117543,117546,117548,117550,117552,117555],{"class":70,"line":1428},[68,117540,24780],{"class":74},[68,117542,117515],{"class":78},[68,117544,117545],{"class":78}," update",[68,117547,26394],{"class":335},[68,117549,24780],{"class":74},[68,117551,117515],{"class":78},[68,117553,117554],{"class":78}," upgrade",[68,117556,101181],{"class":82},[68,117558,117559],{"class":70,"line":1519},[68,117560,117561],{"class":393},"#列出可更新的软件包及版本信息\n",[68,117563,117564,117567,117570],{"class":70,"line":1525},[68,117565,117566],{"class":74},"apt",[68,117568,117569],{"class":78}," list",[68,117571,117572],{"class":82}," --upgradable\n",[68,117574,117575],{"class":70,"line":1537},[68,117576,117577],{"class":393},"#彻底升级（处理依赖关系，可能删除旧包）\n",[68,117579,117580,117582,117584],{"class":70,"line":1819},[68,117581,24780],{"class":74},[68,117583,117515],{"class":78},[68,117585,117586],{"class":78}," full-upgrade\n",[68,117588,117589],{"class":70,"line":1824},[68,117590,117591],{"class":393},"#设置指定版本\n",[68,117593,117594,117596,117598,117600,117602,117605,117607,117609,117611,117613,117616,117618],{"class":70,"line":1830},[68,117595,24780],{"class":74},[68,117597,117515],{"class":78},[68,117599,24039],{"class":78},[68,117601,29104],{"class":331},[68,117603,117604],{"class":78},"package_nam",[68,117606,409],{"class":335},[68,117608,1293],{"class":331},[68,117610,381],{"class":78},[68,117612,1243],{"class":331},[68,117614,117615],{"class":78},"version_numbe",[68,117617,1003],{"class":335},[68,117619,51508],{"class":331},[68,117621,117622],{"class":70,"line":1835},[68,117623,117624],{"class":393},"#只安装软件包不升级\n",[68,117626,117627,117629,117631,117633,117635,117637,117639,117641],{"class":70,"line":1849},[68,117628,24780],{"class":74},[68,117630,117515],{"class":78},[68,117632,24039],{"class":78},[68,117634,29104],{"class":331},[68,117636,117604],{"class":78},[68,117638,409],{"class":335},[68,117640,1293],{"class":331},[68,117642,117643],{"class":82}," --no-upgrade\n",[68,117645,117646],{"class":70,"line":1854},[68,117647,117648],{"class":393},"#只升级，不存在就不安装\n",[68,117650,117651,117653,117655,117657,117659,117661,117663,117665],{"class":70,"line":1860},[68,117652,24780],{"class":74},[68,117654,117515],{"class":78},[68,117656,24039],{"class":78},[68,117658,29104],{"class":331},[68,117660,117604],{"class":78},[68,117662,409],{"class":335},[68,117664,1293],{"class":331},[68,117666,117667],{"class":82}," --only-upgrade\n",[68,117669,117670],{"class":70,"line":1881},[68,117671,2606],{"emptyLinePlaceholder":260},[68,117673,117674],{"class":70,"line":1886},[68,117675,117676],{"class":393},"#安装指定的软件命令\n",[68,117678,117679,117681,117683,117685,117687,117689,117691],{"class":70,"line":1900},[68,117680,24780],{"class":74},[68,117682,117515],{"class":78},[68,117684,24039],{"class":78},[68,117686,29104],{"class":331},[68,117688,117604],{"class":78},[68,117690,409],{"class":335},[68,117692,51508],{"class":331},[68,117694,117695],{"class":70,"line":1905},[68,117696,2606],{"emptyLinePlaceholder":260},[68,117698,117699],{"class":70,"line":1934},[68,117700,117701],{"class":393},"#安装多个软件包\n",[68,117703,117704,117706,117708,117710,117712,117715,117718,117720,117722,117725,117727,117729],{"class":70,"line":1939},[68,117705,24780],{"class":74},[68,117707,117515],{"class":78},[68,117709,24039],{"class":78},[68,117711,29104],{"class":331},[68,117713,117714],{"class":78},"package_",[68,117716,117717],{"class":331},"1>",[68,117719,29104],{"class":331},[68,117721,117714],{"class":78},[68,117723,117724],{"class":331},"2>",[68,117726,29104],{"class":331},[68,117728,117714],{"class":78},[68,117730,117731],{"class":331},"3>\n",[68,117733,117734],{"class":70,"line":1956},[68,117735,2606],{"emptyLinePlaceholder":260},[68,117737,117738],{"class":70,"line":1961},[68,117739,117740],{"class":393},"#更新指定的软件命令\n",[68,117742,117743,117745,117747,117749,117751,117753,117755],{"class":70,"line":1966},[68,117744,24780],{"class":74},[68,117746,117515],{"class":78},[68,117748,117545],{"class":78},[68,117750,29104],{"class":331},[68,117752,117604],{"class":78},[68,117754,409],{"class":335},[68,117756,51508],{"class":331},[68,117758,117759],{"class":70,"line":1971},[68,117760,2606],{"emptyLinePlaceholder":260},[68,117762,117763],{"class":70,"line":1985},[68,117764,117765],{"class":393},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[68,117767,117768,117770,117773,117775,117777,117779],{"class":70,"line":1990},[68,117769,117566],{"class":74},[68,117771,117772],{"class":78}," show",[68,117774,29104],{"class":331},[68,117776,117604],{"class":78},[68,117778,409],{"class":335},[68,117780,51508],{"class":331},[68,117782,117783],{"class":70,"line":2783},[68,117784,2606],{"emptyLinePlaceholder":260},[68,117786,117787],{"class":70,"line":2797},[68,117788,117789],{"class":393},"#删除软件包命令\n",[68,117791,117792,117794,117796,117798,117800,117802,117804],{"class":70,"line":2805},[68,117793,24780],{"class":74},[68,117795,117515],{"class":78},[68,117797,26283],{"class":78},[68,117799,29104],{"class":331},[68,117801,117604],{"class":78},[68,117803,409],{"class":335},[68,117805,51508],{"class":331},[68,117807,117808],{"class":70,"line":2810},[68,117809,2606],{"emptyLinePlaceholder":260},[68,117811,117812],{"class":70,"line":2816},[68,117813,117814],{"class":393},"# 清理旧版本和缓存（释放磁盘空间）\n",[68,117816,117817,117819,117821,117824],{"class":70,"line":2822},[68,117818,24780],{"class":74},[68,117820,117515],{"class":78},[68,117822,117823],{"class":78}," autoremove",[68,117825,117826],{"class":393},"  # 删除不再需要的依赖和库文件\n",[68,117828,117829,117831,117833,117836],{"class":70,"line":2827},[68,117830,24780],{"class":74},[68,117832,117515],{"class":78},[68,117834,117835],{"class":78}," clean",[68,117837,117838],{"class":393},"       # 清理下载的缓存包\n",[68,117840,117841],{"class":70,"line":8153},[68,117842,2606],{"emptyLinePlaceholder":260},[68,117844,117845],{"class":70,"line":8177},[68,117846,117847],{"class":393},"#移除软件包及配置文件\n",[68,117849,117850,117852,117854,117857,117859,117861,117863],{"class":70,"line":8182},[68,117851,24780],{"class":74},[68,117853,117515],{"class":78},[68,117855,117856],{"class":78}," purge",[68,117858,29104],{"class":331},[68,117860,117604],{"class":78},[68,117862,409],{"class":335},[68,117864,51508],{"class":331},[68,117866,117867],{"class":70,"line":8188},[68,117868,2606],{"emptyLinePlaceholder":260},[68,117870,117871],{"class":70,"line":8215},[68,117872,117873],{"class":393},"#查找软件包命令\n",[68,117875,117876,117878,117880,117883,117885,117888,117890],{"class":70,"line":8220},[68,117877,24780],{"class":74},[68,117879,117515],{"class":78},[68,117881,117882],{"class":78}," search",[68,117884,29104],{"class":331},[68,117886,117887],{"class":78},"keywor",[68,117889,647],{"class":335},[68,117891,51508],{"class":331},[68,117893,117894],{"class":70,"line":8226},[68,117895,2606],{"emptyLinePlaceholder":260},[68,117897,117898],{"class":70,"line":8238},[68,117899,117900],{"class":393},"#列出所有已安装的包\n",[68,117902,117903,117905,117907],{"class":70,"line":8250},[68,117904,117566],{"class":74},[68,117906,117569],{"class":78},[68,117908,117909],{"class":82}," --installed\n",[68,117911,117912],{"class":70,"line":8262},[68,117913,2606],{"emptyLinePlaceholder":260},[68,117915,117916],{"class":70,"line":9921},[68,117917,117918],{"class":393},"#列出所有已安装的包的版本信息\n",[68,117920,117921,117923,117925],{"class":70,"line":9946},[68,117922,117566],{"class":74},[68,117924,117569],{"class":78},[68,117926,117927],{"class":82}," --all-versions\n",[250,117929,117930],{},"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":63,"searchDepth":92,"depth":92,"links":117932},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117479,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117939,"title":117940,"body":117941,"description":257,"extension":258,"meta":118682,"navigation":260,"path":118683,"seo":118684,"stem":118685,"__hash__":118686},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117942,"toc":118669},[117943,117946,117950,117953,117959,117963,117967,117973,117978,117983,117988,117993,117998,118001,118004,118007,118010,118014,118017,118022,118025,118030,118033,118038,118045,118048,118051,118054,118057,118060,118071,118075,118079,118084,118089,118093,118098,118102,118107,118111,118115,118120,118123,118168,118173,118177,118181,118186,118192,118197,118207,118212,118222,118227,118232,118259,118263,118266,118271,118274,118299,118303,118308,118311,118316,118321,118341,118346,118349,118364,118368,118421,118424,118429,118433,118436,118451,118454,118457,118462,118466,118470,118473,118477,118481,118484,118489,118494,118498,118505,118513,118516,118523,118528,118533,118536,118541,118548,118553,118560,118564,118566,118571,118575,118578,118581,118586,118589,118594,118597,118602,118607,118612,118616,118621,118625,118666],[10,117944,117940],{"id":117945},"_2-linux装机教程",[14,117947,117949],{"id":117948},"_21-实体机","2.1 实体机",[19,117951,117952],{},"使用清华源：（Ubuntu24.04）",[19,117954,117955],{},[30,117956,117957],{"href":117957,"rel":117958},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[34],[14,117960,117962],{"id":117961},"_22-普通虚拟机","2.2 普通虚拟机",[301,117964,117966],{"id":117965},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117968,117969],{},[30,117970,117971],{"href":117971,"rel":117972},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[34],[19,117974,117975],{},[48,117976],{"alt":63,"src":117977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117979,117980],{},[48,117981],{"alt":63,"src":117982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117984,117985],{},[48,117986],{"alt":63,"src":117987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117989,117990],{},[48,117991],{"alt":63,"src":117992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117994,117995],{},[48,117996],{"alt":63,"src":117997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117999,118000],{},"内存4G（4096MB）；",[19,118002,118003],{},"CPU给4个核；",[19,118005,118006],{},"硬盘动态分配60G；",[19,118008,118009],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[301,118011,118013],{"id":118012},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118015,118016],{},"按照1.1的步骤下载Ubuntu",[19,118018,118019],{},[48,118020],{"alt":63,"src":118021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118023,118024],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118026,118027],{},[48,118028],{"alt":63,"src":118029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118031,118032],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118034,118035],{},[48,118036],{"alt":63,"src":118037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118039,118040,118041,118044],{},"选择“正常安装”(找不到都用Alt+F7)， ",[483,118042,118043],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118046,118047],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118049,118050],{},"将改动写入磁盘吗 继续",[19,118052,118053],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118055,118056],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118058,118059],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118061,118062,118063,118066,118067,118070],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[483,118064,118065],{},"除了"," 选不发送系统信息与不升级之外， ",[483,118068,118069],{},"其它"," 都跳过或前进）",[301,118072,118074],{"id":118073},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22203,118076,118078],{"id":118077},"_2231-全屏","2.2.3.1 全屏",[19,118080,118081],{},[48,118082],{"alt":63,"src":118083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118085,118086],{},[48,118087],{"alt":63,"src":118088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22203,118090,118092],{"id":118091},"_2232-文件交换","2.2.3.2 文件交换",[19,118094,118095],{},[48,118096],{"alt":63,"src":118097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22203,118099,118101],{"id":118100},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118103,118104],{},[48,118105],{"alt":63,"src":118106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118108,118110],{"id":118109},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[301,118112,118114],{"id":118113},"_231-简介与优缺点","2.3.1 简介与优缺点",[23,118116,118117],{},[26,118118,118119],{},"什么情况下推荐？",[19,118121,118122],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[23,118124,118125],{"start":92},[26,118126,118127,118128],{},"优缺点：",[23,118129,118130,118160],{},[26,118131,118132,118133],{},"优点：",[23,118134,118135,118138,118145,118148,118151,118154,118157],{},[26,118136,118137],{},"WSL2是最好的Linux发行版;(bushi)",[26,118139,118140,118141,118144],{},"性能损耗极低。且比在Windows上跑深度性能 ",[483,118142,118143],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[26,118146,118147],{},"非常方便调用USB设备，可以USB直通;",[26,118149,118150],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[26,118152,118153],{},"非常方便Win与WSL2互相传文件等协同操作;",[26,118155,118156],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[26,118158,118159],{},"非常方便使用Windows的VScode远程开发;",[26,118161,118162,118163],{},"缺点：",[23,118164,118165],{},[26,118166,118167],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118169,118170],{},[48,118171],{"alt":63,"src":118172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[301,118174,118176],{"id":118175},"_232-安装教程","2.3.2 安装教程",[22203,118178,118180],{"id":118179},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[23,118182,118183],{},[26,118184,118185],{},"方法一(图形界面)",[19,118187,118188,118189,24822],{},"用Win+R输入",[65,118190,118191],{},"appwiz.cpl",[19,118193,118194],{},[48,118195],{"alt":63,"src":118196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118198,118199,118200,118203,118204,26677],{},"点击OK进入 ",[483,118201,118202],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[483,118205,118206],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118208,118209],{},[48,118210],{"alt":63,"src":118211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118213,118214,118215,101218,118218,118221],{},"选择 ",[483,118216,118217],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[483,118219,118220],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118223,118224],{},[48,118225],{"alt":63,"src":118226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[23,118228,118229],{"start":92},[26,118230,118231],{},"方法二(命令行)",[58,118233,118237],{"className":118234,"code":118235,"language":118236,"meta":63,"style":63},"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",[65,118238,118239,118244,118249,118254],{"__ignoreMap":63},[68,118240,118241],{"class":70,"line":71},[68,118242,118243],{},"# 开启 Linux 子系统\n",[68,118245,118246],{"class":70,"line":92},[68,118247,118248],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[68,118250,118251],{"class":70,"line":1387},[68,118252,118253],{},"# 开启虚拟机平台\n",[68,118255,118256],{"class":70,"line":1402},[68,118257,118258],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22203,118260,118262],{"id":118261},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118264,118265],{},"用管理员权限打开powershell",[19,118267,118268],{},[48,118269],{"alt":63,"src":118270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118272,118273],{},"升级WSL并设置默认版本为WSL2",[58,118275,118277],{"className":118234,"code":118276,"language":118236,"meta":63,"style":63},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[65,118278,118279,118284,118289,118294],{"__ignoreMap":63},[68,118280,118281],{"class":70,"line":71},[68,118282,118283],{},"# 更新 wsl\n",[68,118285,118286],{"class":70,"line":92},[68,118287,118288],{},"wsl --update\n",[68,118290,118291],{"class":70,"line":1387},[68,118292,118293],{},"# 将 wsl 版本设置为 wsl2\n",[68,118295,118296],{"class":70,"line":1402},[68,118297,118298],{},"wsl --set-default-version 2\n",[22203,118300,118302],{"id":118301},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[23,118304,118305],{},[26,118306,118307],{},"方式一(商店下载)",[19,118309,118310],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118312,118313],{},[48,118314],{"alt":63,"src":118315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[23,118317,118318],{"start":92},[26,118319,118320],{},"方式二(命令行安装)",[58,118322,118324],{"className":118234,"code":118323,"language":118236,"meta":63,"style":63},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[65,118325,118326,118331,118336],{"__ignoreMap":63},[68,118327,118328],{"class":70,"line":71},[68,118329,118330],{},"# 列出可安装的 Linux 版本\n",[68,118332,118333],{"class":70,"line":92},[68,118334,118335],{},"#（需要科学手段）\n",[68,118337,118338],{"class":70,"line":1387},[68,118339,118340],{},"wsl --list --online\n",[19,118342,118343],{},[48,118344],{"alt":63,"src":118345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118347,118348],{},"选择对应发行版并安装",[58,118350,118352],{"className":118234,"code":118351,"language":118236,"meta":63,"style":63},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[65,118353,118354,118359],{"__ignoreMap":63},[68,118355,118356],{"class":70,"line":71},[68,118357,118358],{},"# Ubuntu安装完毕后需要重启系统\n",[68,118360,118361],{"class":70,"line":92},[68,118362,118363],{},"wsl --install -d Ubuntu-24.04\n",[22203,118365,118367],{"id":118366},"_2324-查看系统状态","2.3.2.4 查看系统状态",[58,118369,118371],{"className":118234,"code":118370,"language":118236,"meta":63,"style":63},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[65,118372,118373,118378,118383,118388,118393,118397,118401,118406,118411,118416],{"__ignoreMap":63},[68,118374,118375],{"class":70,"line":71},[68,118376,118377],{},"# 查看 wsl\n",[68,118379,118380],{"class":70,"line":92},[68,118381,118382],{},"wsl -l\n",[68,118384,118385],{"class":70,"line":1387},[68,118386,118387],{},"# 查看 wsl 运行版本或模式\n",[68,118389,118390],{"class":70,"line":1402},[68,118391,118392],{},"wsl -l -v\n",[68,118394,118395],{"class":70,"line":1408},[68,118396,2606],{"emptyLinePlaceholder":260},[68,118398,118399],{"class":70,"line":1422},[68,118400,2606],{"emptyLinePlaceholder":260},[68,118402,118403],{"class":70,"line":1428},[68,118404,118405],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[68,118407,118408],{"class":70,"line":1519},[68,118409,118410],{},"wsl --set-version \u003Cdistro> 2\n",[68,118412,118413],{"class":70,"line":1525},[68,118414,118415],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[68,118417,118418],{"class":70,"line":1537},[68,118419,118420],{},"wsl --unregister \u003Cdistro>\n",[19,118422,118423],{},"输出Version为2即正常",[19,118425,118426],{},[48,118427],{"alt":63,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22203,118430,118432],{"id":118431},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118434,118435],{},"直接在Powershell里输入wsl命令进入子系统",[58,118437,118439],{"className":118234,"code":118438,"language":118236,"meta":63,"style":63},"# 进入子系统\nwsl\n",[65,118440,118441,118446],{"__ignoreMap":63},[68,118442,118443],{"class":70,"line":71},[68,118444,118445],{},"# 进入子系统\n",[68,118447,118448],{"class":70,"line":92},[68,118449,118450],{},"wsl\n",[19,118452,118453],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118455,118456],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118458,118459],{},[48,118460],{"alt":63,"src":118461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[301,118463,118465],{"id":118464},"_233-配置各种环境","2.3.3 配置各种环境",[22203,118467,118469],{"id":118468},"_2331-换源","2.3.3.1 换源",[19,118471,118472],{},"(同实体机LINUX，往下找教程)",[22203,118474,118476],{"id":118475},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23115,118478,118480],{"id":118479},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118482,118483],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118485,118486],{},[48,118487],{"alt":63,"src":118488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118490,118491],{},[48,118492],{"alt":63,"src":118493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23115,118495,118497],{"id":118496},"_23322-cuda","2.3.3.2.2 CUDA",[19,118499,118500,118501],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[30,118502,118503],{"href":118503,"rel":118504},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[34],[19,118506,118507,118510],{},[48,118508],{"alt":63,"src":118509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[48,118511],{"alt":63,"src":118512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118514,118515],{},"在下方的网站，选择合适的版本。",[19,118517,118518,118519],{},"WSL2 专属 CUDA 指南：",[30,118520,118521],{"href":118521,"rel":118522},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[34],[19,118524,118525],{},[483,118526,118527],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118529,118530],{},[48,118531],{"alt":63,"src":118532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118534,118535],{},"挨行敲一遍",[19,118537,118538],{},[48,118539],{"alt":63,"src":118540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118542,118543,118544,118547],{},"敲完后，输入",[65,118545,118546],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118549,118550],{},[48,118551],{"alt":63,"src":118552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118554,118555,118556,118559],{},"（请详看下方教程的",[483,118557,118558],{},"安装CUDA的配置环境来看","如何配置环境）",[23115,118561,118563],{"id":118562},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118565,118472],{},[19,118567,118568],{},[48,118569],{"alt":63,"src":118570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22203,118572,118574],{"id":118573},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118576,118577],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118579,118580],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118582,118583],{},[48,118584],{"alt":63,"src":118585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118587,118588],{},"连接WSL2",[19,118590,118591],{},[48,118592],{"alt":63,"src":118593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118595,118596],{},"远程开发成功。",[19,118598,118599],{},[48,118600],{"alt":63,"src":118601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118603,118604],{},[48,118605],{"alt":63,"src":118606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118608,118609],{},[48,118610],{"alt":63,"src":118611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22203,118613,118615],{"id":118614},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118617,118618],{},[48,118619],{"alt":63,"src":118620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22203,118622,118624],{"id":118623},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[58,118626,118628],{"className":60,"code":118627,"language":62,"meta":63,"style":63},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[65,118629,118630,118638,118646,118657,118661],{"__ignoreMap":63},[68,118631,118632,118634,118636],{"class":70,"line":71},[68,118633,24780],{"class":74},[68,118635,117515],{"class":78},[68,118637,26446],{"class":78},[68,118639,118640,118642,118644],{"class":70,"line":92},[68,118641,24780],{"class":74},[68,118643,117515],{"class":78},[68,118645,117531],{"class":78},[68,118647,118648,118650,118652,118654],{"class":70,"line":1387},[68,118649,24780],{"class":74},[68,118651,117515],{"class":78},[68,118653,24039],{"class":78},[68,118655,118656],{"class":78}," mesa-utils\n",[68,118658,118659],{"class":70,"line":1402},[68,118660,2606],{"emptyLinePlaceholder":260},[68,118662,118663],{"class":70,"line":1408},[68,118664,118665],{"class":393},"#然后重启wsl2即可\n",[250,118667,118668],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":63,"searchDepth":92,"depth":92,"links":118670},[118671,118672,118677],{"id":117948,"depth":92,"text":117949},{"id":117961,"depth":92,"text":117962,"children":118673},[118674,118675,118676],{"id":117965,"depth":1387,"text":117966},{"id":118012,"depth":1387,"text":118013},{"id":118073,"depth":1387,"text":118074},{"id":118109,"depth":92,"text":118110,"children":118678},[118679,118680,118681],{"id":118113,"depth":1387,"text":118114},{"id":118175,"depth":1387,"text":118176},{"id":118464,"depth":1387,"text":118465},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117940,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118688,"title":118689,"body":118690,"description":257,"extension":258,"meta":121625,"navigation":260,"path":121626,"seo":121627,"stem":121628,"__hash__":121629},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118691,"toc":121597},[118692,118695,118699,118705,118709,118715,118719,118907,118910,118915,118919,118923,118926,118929,118935,118940,118943,118946,118951,118984,118989,118993,119070,119073,119078,119082,119085,119124,119127,119136,119154,119159,119166,119283,119288,119291,119318,119323,119327,119336,119386,119393,119397,119400,119414,119421,119455,119460,119464,119487,119490,119495,119499,119502,119505,119508,119550,119554,119557,119560,119601,119605,119609,119612,119617,119622,119625,119648,119651,119659,119664,119667,119672,119677,119680,119685,119689,119694,119717,119722,119784,119792,119797,119802,119805,119810,119813,119818,119823,119841,119846,119852,119857,119871,119875,119878,119881,119884,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,118693,118689],{"id":118694},"_3-安装必备配置",[14,118696,118698],{"id":118697},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[58,118700,118703],{"className":118701,"code":118702,"language":5393},[5391],"  打开下方网站（注意，该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",[65,118704,118702],{"__ignoreMap":63},[301,118706,118708],{"id":118707},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[58,118710,118713],{"className":118711,"code":118712,"language":5393},[5391],"  输入以下命令\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",[65,118714,118712],{"__ignoreMap":63},[301,118716,118718],{"id":118717},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[58,118720,118724],{"className":118721,"code":118722,"language":118723,"meta":63,"style":63},"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",[65,118725,118726,118734,118745,118757,118771,118775,118785,118790,118794,118798,118803,118807,118819,118823,118828,118832,118843,118847,118863,118867,118878,118882,118887,118891,118899],{"__ignoreMap":63},[68,118727,118728,118730,118732],{"class":70,"line":71},[68,118729,24780],{"class":74},[68,118731,117515],{"class":78},[68,118733,26446],{"class":78},[68,118735,118736,118738,118740,118742],{"class":70,"line":92},[68,118737,24780],{"class":74},[68,118739,117515],{"class":78},[68,118741,24039],{"class":78},[68,118743,118744],{"class":78}," vim\n",[68,118746,118747,118749,118752,118754],{"class":70,"line":1387},[68,118748,24780],{"class":74},[68,118750,118751],{"class":78}," rm",[68,118753,25529],{"class":82},[68,118755,118756],{"class":78}," \u002Fetc\u002Fapt\u002Fsources.list\n",[68,118758,118759,118761,118763,118765,118768],{"class":70,"line":1402},[68,118760,24780],{"class":74},[68,118762,118751],{"class":78},[68,118764,25529],{"class":82},[68,118766,118767],{"class":78}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[68,118769,118770],{"class":82},"**\n",[68,118772,118773],{"class":70,"line":1408},[68,118774,2606],{"emptyLinePlaceholder":260},[68,118776,118777,118779,118782],{"class":70,"line":1422},[68,118778,24780],{"class":74},[68,118780,118781],{"class":78}," vim",[68,118783,118784],{"class":78}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[68,118786,118787],{"class":70,"line":1428},[68,118788,118789],{"class":78},"```\n",[68,118791,118792],{"class":70,"line":1519},[68,118793,2606],{"emptyLinePlaceholder":260},[68,118795,118796],{"class":70,"line":1525},[68,118797,2606],{"emptyLinePlaceholder":260},[68,118799,118800],{"class":70,"line":1537},[68,118801,118802],{"class":74},"选择好Ubuntu版本后，复制下方的内容。\n",[68,118804,118805],{"class":70,"line":1819},[68,118806,2606],{"emptyLinePlaceholder":260},[68,118808,118809,118811,118814,118817],{"class":70,"line":1824},[68,118810,560],{"class":331},[68,118812,118813],{"class":78},"[](",[68,118815,118816],{"class":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[68,118818,342],{"class":78},[68,118820,118821],{"class":70,"line":1830},[68,118822,2606],{"emptyLinePlaceholder":260},[68,118824,118825],{"class":70,"line":1835},[68,118826,118827],{"class":74},"粘贴进去\n",[68,118829,118830],{"class":70,"line":1849},[68,118831,2606],{"emptyLinePlaceholder":260},[68,118833,118834,118836,118838,118841],{"class":70,"line":1854},[68,118835,560],{"class":331},[68,118837,118813],{"class":78},[68,118839,118840],{"class":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[68,118842,342],{"class":78},[68,118844,118845],{"class":70,"line":1860},[68,118846,2606],{"emptyLinePlaceholder":260},[68,118848,118849,118852,118855,118858,118860],{"class":70,"line":1881},[68,118850,118851],{"class":74},"按一下ESC，然后英文冒号，输入",[68,118853,118854],{"class":78}," `",[68,118856,118857],{"class":74},":wq!",[68,118859,1305],{"class":78},[68,118861,118862],{"class":74},"然后回车\n",[68,118864,118865],{"class":70,"line":1886},[68,118866,2606],{"emptyLinePlaceholder":260},[68,118868,118869,118871,118873,118876],{"class":70,"line":1900},[68,118870,560],{"class":331},[68,118872,118813],{"class":78},[68,118874,118875],{"class":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[68,118877,342],{"class":78},[68,118879,118880],{"class":70,"line":1905},[68,118881,2606],{"emptyLinePlaceholder":260},[68,118883,118884],{"class":70,"line":1934},[68,118885,118886],{"class":74},"输入以下命令\n",[68,118888,118889],{"class":70,"line":1939},[68,118890,2606],{"emptyLinePlaceholder":260},[68,118892,118893,118896],{"class":70,"line":1956},[68,118894,118895],{"class":78},"```",[68,118897,118898],{"class":74},"Bash\n",[68,118900,118901,118903,118905],{"class":70,"line":1961},[68,118902,24780],{"class":74},[68,118904,117515],{"class":78},[68,118906,26446],{"class":78},[19,118908,118909],{},"这里被替换成对应学校则成功",[19,118911,118912],{},[48,118913],{"alt":63,"src":118914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118916,118918],{"id":118917},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[301,118920,118922],{"id":118921},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118924,118925],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118927,118928],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118930,118931],{},[30,118932,118933],{"href":118933,"rel":118934},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[34],[19,118936,118937],{},[48,118938],{"alt":63,"src":118939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118941,118942],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118944,118945],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118947,118948],{},[48,118949],{"alt":63,"src":118950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[58,118952,118954],{"className":60,"code":118953,"language":62,"meta":63,"style":63},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[65,118955,118956,118961,118968,118973],{"__ignoreMap":63},[68,118957,118958],{"class":70,"line":71},[68,118959,118960],{"class":393},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[68,118962,118963,118965],{"class":70,"line":92},[68,118964,101476],{"class":82},[68,118966,118967],{"class":78}," ~\u002FDownloads\n",[68,118969,118970],{"class":70,"line":1387},[68,118971,118972],{"class":393},"#下方chrome安装包名不一定是这个，根据名字来看\n",[68,118974,118975,118977,118979,118981],{"class":70,"line":1402},[68,118976,24780],{"class":74},[68,118978,117515],{"class":78},[68,118980,24039],{"class":78},[68,118982,118983],{"class":78}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118985,118986],{},[48,118987],{"alt":63,"src":118988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[301,118990,118992],{"id":118991},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[58,118994,118996],{"className":60,"code":118995,"language":62,"meta":63,"style":63},"# 老版\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",[65,118997,118998,119003,119011,119022,119027,119031,119036,119046,119054,119065],{"__ignoreMap":63},[68,118999,119000],{"class":70,"line":71},[68,119001,119002],{"class":393},"# 老版\n",[68,119004,119005,119007,119009],{"class":70,"line":92},[68,119006,24780],{"class":74},[68,119008,117515],{"class":78},[68,119010,26446],{"class":78},[68,119012,119013,119015,119017,119019],{"class":70,"line":1387},[68,119014,24780],{"class":74},[68,119016,117515],{"class":78},[68,119018,24039],{"class":78},[68,119020,119021],{"class":78}," neofetch\n",[68,119023,119024],{"class":70,"line":1402},[68,119025,119026],{"class":74},"neofetch\n",[68,119028,119029],{"class":70,"line":1408},[68,119030,2606],{"emptyLinePlaceholder":260},[68,119032,119033],{"class":70,"line":1422},[68,119034,119035],{"class":393},"# 新版\n",[68,119037,119038,119040,119043],{"class":70,"line":1428},[68,119039,24780],{"class":74},[68,119041,119042],{"class":78}," add-apt-repository",[68,119044,119045],{"class":78}," ppa:zhangsongcui3371\u002Ffastfetch\n",[68,119047,119048,119050,119052],{"class":70,"line":1519},[68,119049,24780],{"class":74},[68,119051,117515],{"class":78},[68,119053,26446],{"class":78},[68,119055,119056,119058,119060,119062],{"class":70,"line":1525},[68,119057,24780],{"class":74},[68,119059,117515],{"class":78},[68,119061,24039],{"class":78},[68,119063,119064],{"class":78}," fastfetch\n",[68,119066,119067],{"class":70,"line":1537},[68,119068,119069],{"class":74},"fastfetch\n",[19,119071,119072],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119074,119075],{},[48,119076],{"alt":63,"src":119077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[301,119079,119081],{"id":119080},"_323-移除snap应用","3.2.3 移除snap应用",[19,119083,119084],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[58,119086,119088],{"className":60,"code":119087,"language":62,"meta":63,"style":63},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[65,119089,119090,119102,119113],{"__ignoreMap":63},[68,119091,119092,119094,119096,119099],{"class":70,"line":71},[68,119093,24780],{"class":74},[68,119095,26717],{"class":78},[68,119097,119098],{"class":78}," disable",[68,119100,119101],{"class":78}," snapd.service\n",[68,119103,119104,119106,119108,119110],{"class":70,"line":92},[68,119105,24780],{"class":74},[68,119107,26717],{"class":78},[68,119109,119098],{"class":78},[68,119111,119112],{"class":78}," snapd.socket\n",[68,119114,119115,119117,119119,119121],{"class":70,"line":1387},[68,119116,24780],{"class":74},[68,119118,26717],{"class":78},[68,119120,119098],{"class":78},[68,119122,119123],{"class":78}," snapd.seeded.service\n",[19,119125,119126],{},"然后查看snap应用列表",[19,119128,119129,119130,119135],{},"根据你安装的选择不同（最小安装或普通安装），有",[30,119131,119134],{"href":119132,"rel":119133},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[34],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[58,119137,119139],{"className":60,"code":119138,"language":62,"meta":63,"style":63},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[65,119140,119141,119146],{"__ignoreMap":63},[68,119142,119143],{"class":70,"line":71},[68,119144,119145],{"class":393},"# 查询当前系统上snap安装了哪些app\n",[68,119147,119148,119151],{"class":70,"line":92},[68,119149,119150],{"class":74},"snap",[68,119152,119153],{"class":78}," list\n",[19,119155,119156],{},[48,119157],{"alt":63,"src":119158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119160,119161,119162,119165],{},"卸载掉图中所有应用，按照 ",[483,119163,119164],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[58,119167,119169],{"className":60,"code":119168,"language":62,"meta":63,"style":63},"#移除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",[65,119170,119171,119176,119188,119193,119204,119209,119220,119225,119236,119241,119245,119250,119261,119272],{"__ignoreMap":63},[68,119172,119173],{"class":70,"line":71},[68,119174,119175],{"class":393},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[68,119177,119178,119180,119183,119185],{"class":70,"line":92},[68,119179,24780],{"class":74},[68,119181,119182],{"class":78}," snap",[68,119184,26283],{"class":78},[68,119186,119187],{"class":78}," snap-store\n",[68,119189,119190],{"class":70,"line":1387},[68,119191,119192],{"class":393},"#移除firefox浏览器\n",[68,119194,119195,119197,119199,119201],{"class":70,"line":1402},[68,119196,24780],{"class":74},[68,119198,119182],{"class":78},[68,119200,26283],{"class":78},[68,119202,119203],{"class":78}," firefox\n",[68,119205,119206],{"class":70,"line":1408},[68,119207,119208],{"class":393},"#移除gnome-42-2204\n",[68,119210,119211,119213,119215,119217],{"class":70,"line":1422},[68,119212,24780],{"class":74},[68,119214,119182],{"class":78},[68,119216,26283],{"class":78},[68,119218,119219],{"class":78}," gnome-42-2204\n",[68,119221,119222],{"class":70,"line":1428},[68,119223,119224],{"class":393},"#移除gtk-common-themes\n",[68,119226,119227,119229,119231,119233],{"class":70,"line":1519},[68,119228,24780],{"class":74},[68,119230,119182],{"class":78},[68,119232,26283],{"class":78},[68,119234,119235],{"class":78}," gtk-common-themes\n",[68,119237,119238],{"class":70,"line":1525},[68,119239,119240],{"class":393},"#移除其它...\n",[68,119242,119243],{"class":70,"line":1537},[68,119244,2880],{"class":335},[68,119246,119247],{"class":70,"line":1819},[68,119248,119249],{"class":393},"#移除core22,bare以及snapd\n",[68,119251,119252,119254,119256,119258],{"class":70,"line":1824},[68,119253,24780],{"class":74},[68,119255,119182],{"class":78},[68,119257,26283],{"class":78},[68,119259,119260],{"class":78}," core22\n",[68,119262,119263,119265,119267,119269],{"class":70,"line":1830},[68,119264,24780],{"class":74},[68,119266,119182],{"class":78},[68,119268,26283],{"class":78},[68,119270,119271],{"class":78}," bare\n",[68,119273,119274,119276,119278,119280],{"class":70,"line":1835},[68,119275,24780],{"class":74},[68,119277,119182],{"class":78},[68,119279,26283],{"class":78},[68,119281,119282],{"class":78}," snapd\n",[19,119284,119285],{},[48,119286],{"alt":63,"src":119287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119289,119290],{},"输入以下命令查看是否还有snap包",[58,119292,119294],{"className":60,"code":119293,"language":62,"meta":63,"style":63},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[65,119295,119296,119302,119306,119310,119314],{"__ignoreMap":63},[68,119297,119298,119300],{"class":70,"line":71},[68,119299,119150],{"class":74},[68,119301,119153],{"class":78},[68,119303,119304],{"class":70,"line":92},[68,119305,119002],{"class":393},[68,119307,119308],{"class":70,"line":1387},[68,119309,119026],{"class":74},[68,119311,119312],{"class":70,"line":1402},[68,119313,119035],{"class":393},[68,119315,119316],{"class":70,"line":1408},[68,119317,119069],{"class":74},[19,119319,119320],{},[48,119321],{"alt":63,"src":119322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[301,119324,119326],{"id":119325},"_324-移除snap","3.2.4 移除snap",[19,119328,119329,119330,119335],{},"在删除掉",[30,119331,119334],{"href":119332,"rel":119333},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[34],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[58,119337,119339],{"className":60,"code":119338,"language":62,"meta":63,"style":63}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[65,119340,119341,119346,119359,119364,119375],{"__ignoreMap":63},[68,119342,119343],{"class":70,"line":71},[68,119344,119345],{"class":393}," #使用apt移除掉snap\n",[68,119347,119348,119350,119352,119354,119357],{"class":70,"line":92},[68,119349,24780],{"class":74},[68,119351,117515],{"class":78},[68,119353,117823],{"class":78},[68,119355,119356],{"class":82}," --purge",[68,119358,119282],{"class":78},[68,119360,119361],{"class":70,"line":1387},[68,119362,119363],{"class":393},"#移除snapd的一些目录\n",[68,119365,119366,119368,119370,119372],{"class":70,"line":1402},[68,119367,24780],{"class":74},[68,119369,118751],{"class":78},[68,119371,25529],{"class":82},[68,119373,119374],{"class":78}," \u002Fvar\u002Fcache\u002Fsnapd\n",[68,119376,119377,119379,119381,119383],{"class":70,"line":1408},[68,119378,24780],{"class":74},[68,119380,118751],{"class":78},[68,119382,25529],{"class":82},[68,119384,119385],{"class":78}," ~\u002Fsnap\n",[19,119387,119388,119389,119392],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[65,119390,119391],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[301,119394,119396],{"id":119395},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119398,119399],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[58,119401,119403],{"className":60,"code":119402,"language":62,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[65,119404,119405],{"__ignoreMap":63},[68,119406,119407,119409,119411],{"class":70,"line":71},[68,119408,24780],{"class":74},[68,119410,118781],{"class":78},[68,119412,119413],{"class":78}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119415,119416,119417,119420],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[65,119418,119419],{},":wq"," 回车",[58,119422,119424],{"className":60,"code":119423,"language":62,"meta":63,"style":63},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[65,119425,119426,119433,119447],{"__ignoreMap":63},[68,119427,119428,119431],{"class":70,"line":71},[68,119429,119430],{"class":74},"Package:",[68,119432,119282],{"class":78},[68,119434,119435,119438,119441,119444],{"class":70,"line":92},[68,119436,119437],{"class":74},"Pin:",[68,119439,119440],{"class":78}," release",[68,119442,119443],{"class":78}," a=",[68,119445,119446],{"class":82},"*\n",[68,119448,119449,119452],{"class":70,"line":1387},[68,119450,119451],{"class":74},"Pin-Priority:",[68,119453,119454],{"class":82}," -10\n",[19,119456,119457],{},[48,119458],{"alt":63,"src":119459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[301,119461,119463],{"id":119462},"_326-测试是否成功","3.2.6 测试是否成功",[58,119465,119467],{"className":60,"code":119466,"language":62,"meta":63,"style":63},"sudo apt update\nsudo apt install firefox\n",[65,119468,119469,119477],{"__ignoreMap":63},[68,119470,119471,119473,119475],{"class":70,"line":71},[68,119472,24780],{"class":74},[68,119474,117515],{"class":78},[68,119476,26446],{"class":78},[68,119478,119479,119481,119483,119485],{"class":70,"line":92},[68,119480,24780],{"class":74},[68,119482,117515],{"class":78},[68,119484,24039],{"class":78},[68,119486,119203],{"class":78},[19,119488,119489],{},"这里提示snapd无法被安装，就证明成功了",[19,119491,119492],{},[48,119493],{"alt":63,"src":119494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[301,119496,119498],{"id":119497},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119500,119501],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119503,119504],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119506,119507],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[58,119509,119511],{"className":60,"code":119510,"language":62,"meta":63,"style":63},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[65,119512,119513,119518,119527,119532,119540],{"__ignoreMap":63},[68,119514,119515],{"class":70,"line":71},[68,119516,119517],{"class":393},"# 添加Mozilla提供的源\n",[68,119519,119520,119522,119524],{"class":70,"line":92},[68,119521,24780],{"class":74},[68,119523,119042],{"class":78},[68,119525,119526],{"class":78}," ppa:mozillateam\u002Fppa\n",[68,119528,119529],{"class":70,"line":1387},[68,119530,119531],{"class":393},"# 安装Firefox\n",[68,119533,119534,119536,119538],{"class":70,"line":1402},[68,119535,24780],{"class":74},[68,119537,117515],{"class":78},[68,119539,26446],{"class":78},[68,119541,119542,119544,119546,119548],{"class":70,"line":1408},[68,119543,24780],{"class":74},[68,119545,117515],{"class":78},[68,119547,24039],{"class":78},[68,119549,119203],{"class":78},[301,119551,119553],{"id":119552},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119555,119556],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119558,119559],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[58,119561,119563],{"className":60,"code":119562,"language":62,"meta":63,"style":63},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[65,119564,119565,119570,119580,119588,119592],{"__ignoreMap":63},[68,119566,119567],{"class":70,"line":71},[68,119568,119569],{"class":393},"#删掉禁止安装snap的配置文件\n",[68,119571,119572,119574,119576,119578],{"class":70,"line":92},[68,119573,24780],{"class":74},[68,119575,118751],{"class":78},[68,119577,25529],{"class":82},[68,119579,119413],{"class":78},[68,119581,119582,119584,119586],{"class":70,"line":1387},[68,119583,24780],{"class":74},[68,119585,117515],{"class":78},[68,119587,26446],{"class":78},[68,119589,119590],{"class":70,"line":1402},[68,119591,2606],{"emptyLinePlaceholder":260},[68,119593,119594,119596,119598],{"class":70,"line":1408},[68,119595,24780],{"class":74},[68,119597,117515],{"class":78},[68,119599,119600],{"class":78}," dist-update\n",[14,119602,119604],{"id":119603},"_33-中文输入法","3.3 中文输入法",[301,119606,119608],{"id":119607},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119610,119611],{},"官网下载搜狗输入法",[19,119613,119614],{},[48,119615],{"alt":63,"src":119616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119618,119619],{},[48,119620],{"alt":63,"src":119621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119623,119624],{},"打开终端输入如下",[58,119626,119628],{"className":60,"code":119627,"language":62,"meta":63,"style":63},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[65,119629,119630,119637],{"__ignoreMap":63},[68,119631,119632,119634],{"class":70,"line":71},[68,119633,101476],{"class":82},[68,119635,119636],{"class":78}," ~\u002FDownloads\u002F\n",[68,119638,119639,119641,119643,119645],{"class":70,"line":92},[68,119640,24780],{"class":74},[68,119642,117515],{"class":78},[68,119644,24039],{"class":78},[68,119646,119647],{"class":78}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119649,119650],{},"打开Fcitx",[19,119652,119653,119656],{},[48,119654],{"alt":63,"src":119655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[48,119657],{"alt":63,"src":119658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119660,119661],{},[48,119662],{"alt":63,"src":119663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119665,119666],{},"添加搜狗输入法",[19,119668,119669],{},[48,119670],{"alt":63,"src":119671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119673,119674],{},[48,119675],{"alt":63,"src":119676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119678,119679],{},"将搜狗输入法设置为唯一输入法",[19,119681,119682],{},[48,119683],{"alt":63,"src":119684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[301,119686,119688],{"id":119687},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[23,119690,119691],{},[26,119692,119693],{},"卸载旧输入法",[58,119695,119697],{"className":118721,"code":119696,"language":118723,"meta":63,"style":63},"sudo apt purge fcitx* ibus*\n",[65,119698,119699],{"__ignoreMap":63},[68,119700,119701,119703,119705,119707,119710,119712,119715],{"class":70,"line":71},[68,119702,24780],{"class":74},[68,119704,117515],{"class":78},[68,119706,117856],{"class":78},[68,119708,119709],{"class":78}," fcitx",[68,119711,788],{"class":82},[68,119713,119714],{"class":78}," ibus",[68,119716,119446],{"class":82},[23,119718,119719],{"start":92},[26,119720,119721],{},"安装Fcitx5",[58,119723,119725],{"className":60,"code":119724,"language":62,"meta":63,"style":63},"# 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",[65,119726,119727,119732,119746,119750,119755,119764,119772],{"__ignoreMap":63},[68,119728,119729],{"class":70,"line":71},[68,119730,119731],{"class":393},"# Ubuntu22.04及以上、Debian12及以上\n",[68,119733,119734,119736,119738,119740,119743],{"class":70,"line":92},[68,119735,24780],{"class":74},[68,119737,117515],{"class":78},[68,119739,24039],{"class":78},[68,119741,119742],{"class":78}," fcitx5",[68,119744,119745],{"class":78}," fcitx5-chinese-addons\n",[68,119747,119748],{"class":70,"line":1387},[68,119749,2606],{"emptyLinePlaceholder":260},[68,119751,119752],{"class":70,"line":1402},[68,119753,119754],{"class":393},"# Ubuntu20.04\n",[68,119756,119757,119759,119761],{"class":70,"line":1408},[68,119758,24780],{"class":74},[68,119760,119042],{"class":78},[68,119762,119763],{"class":78}," ppa:zhsj\u002Ffcitx5\n",[68,119765,119766,119768,119770],{"class":70,"line":1422},[68,119767,24780],{"class":74},[68,119769,117515],{"class":78},[68,119771,26446],{"class":78},[68,119773,119774,119776,119778,119780,119782],{"class":70,"line":1428},[68,119775,24780],{"class":74},[68,119777,117515],{"class":78},[68,119779,24039],{"class":78},[68,119781,119742],{"class":78},[68,119783,119745],{"class":78},[23,119785,119786,119789],{"start":1387},[26,119787,119788],{},"Reboot System",[26,119790,119791],{},"启动Fcitx5",[19,119793,119794],{},[48,119795],{"alt":63,"src":119796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[23,119798,119799],{"start":1408},[26,119800,119801],{},"修改一些设置",[19,119803,119804],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119806,119807],{},[48,119808],{"alt":63,"src":119809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119811,119812],{},"添加快捷键以便于更好切换中英文",[19,119814,119815],{},[48,119816],{"alt":63,"src":119817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[23,119819,119820],{"start":1422},[26,119821,119822],{},"重启",[58,119824,119826],{"className":118721,"code":119825,"language":118723,"meta":63,"style":63},"sudo shutdown -r now\n",[65,119827,119828],{"__ignoreMap":63},[68,119829,119830,119832,119835,119838],{"class":70,"line":71},[68,119831,24780],{"class":74},[68,119833,119834],{"class":78}," shutdown",[68,119836,119837],{"class":82}," -r",[68,119839,119840],{"class":78}," now\n",[23,119842,119843],{"start":1428},[26,119844,119845],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119847,119848],{},[30,119849,119850],{"href":119850,"rel":119851},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[34],[23,119853,119854],{"start":1519},[26,119855,119856],{},"再重启",[58,119858,119859],{"className":118721,"code":119825,"language":118723,"meta":63,"style":63},[65,119860,119861],{"__ignoreMap":63},[68,119862,119863,119865,119867,119869],{"class":70,"line":71},[68,119864,24780],{"class":74},[68,119866,119834],{"class":78},[68,119868,119837],{"class":82},[68,119870,119840],{"class":78},[14,119872,119874],{"id":119873},"_34-pip3源替换","3.4 pip3源替换",[19,119876,119877],{},"非Debian系发行版需要做。",[19,119879,119880],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119882,119883],{},"使用dnf的系统也可能不用做。",[58,119885,119887],{"className":60,"code":119886,"language":62,"meta":63,"style":63},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[65,119888,119889,119894,119901,119906,119911],{"__ignoreMap":63},[68,119890,119891],{"class":70,"line":71},[68,119892,119893],{"class":393},"# 检查是否已安装 pip\n",[68,119895,119896,119899],{"class":70,"line":92},[68,119897,119898],{"class":74},"pip3",[68,119900,26497],{"class":82},[68,119902,119903],{"class":70,"line":1387},[68,119904,119905],{"class":393},"# 如果未安装，先安装 pip3（见下方）\n",[68,119907,119908],{"class":70,"line":1402},[68,119909,119910],{"class":393},"# 配置 pip 使用清华源\n",[68,119912,119913,119915,119917,119920,119923],{"class":70,"line":1408},[68,119914,119898],{"class":74},[68,119916,79],{"class":78},[68,119918,119919],{"class":78}," set",[68,119921,119922],{"class":78}," global.index-url",[68,119924,119925],{"class":78}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119927,119928],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119930,119931],{},[48,119932],{"alt":63,"src":119933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[58,119935,119937],{"className":60,"code":119936,"language":62,"meta":63,"style":63},"#安装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",[65,119938,119939,119944,119952,119963,119967,119972,119991,119995,120000,120012,120016,120021],{"__ignoreMap":63},[68,119940,119941],{"class":70,"line":71},[68,119942,119943],{"class":393},"#安装pip3\n",[68,119945,119946,119948,119950],{"class":70,"line":92},[68,119947,24780],{"class":74},[68,119949,117515],{"class":78},[68,119951,26446],{"class":78},[68,119953,119954,119956,119958,119960],{"class":70,"line":1387},[68,119955,24780],{"class":74},[68,119957,26280],{"class":78},[68,119959,24039],{"class":78},[68,119961,119962],{"class":78}," python3-pip\n",[68,119964,119965],{"class":70,"line":1402},[68,119966,2606],{"emptyLinePlaceholder":260},[68,119968,119969],{"class":70,"line":1408},[68,119970,119971],{"class":393},"#更新pip3\n",[68,119973,119974,119976,119978,119980,119982,119984,119987,119989],{"class":70,"line":1422},[68,119975,101080],{"class":74},[68,119977,161],{"class":82},[68,119979,101105],{"class":78},[68,119981,24039],{"class":78},[68,119983,26634],{"class":82},[68,119985,119986],{"class":78}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[68,119988,101110],{"class":82},[68,119990,101113],{"class":78},[68,119992,119993],{"class":70,"line":1428},[68,119994,2606],{"emptyLinePlaceholder":260},[68,119996,119997],{"class":70,"line":1519},[68,119998,119999],{"class":393},"#设置pip源为清华源\n",[68,120001,120002,120004,120006,120008,120010],{"class":70,"line":1525},[68,120003,119898],{"class":74},[68,120005,79],{"class":78},[68,120007,119919],{"class":78},[68,120009,119922],{"class":78},[68,120011,119925],{"class":78},[68,120013,120014],{"class":70,"line":1537},[68,120015,2606],{"emptyLinePlaceholder":260},[68,120017,120018],{"class":70,"line":1819},[68,120019,120020],{"class":393},"#测试\n",[68,120022,120023,120025,120027,120029,120031,120033],{"class":70,"line":1824},[68,120024,101080],{"class":74},[68,120026,161],{"class":82},[68,120028,101105],{"class":78},[68,120030,24039],{"class":78},[68,120032,101110],{"class":82},[68,120034,101113],{"class":78},[19,120036,120037],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120039,120040],{},[48,120041],{"alt":63,"src":120042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120044,120046],{"id":120045},"_35-显卡驱动安装","3.5 显卡驱动安装",[301,120048,120050],{"id":120049},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[58,120052,120054],{"className":118721,"code":120053,"language":118723,"meta":63,"style":63},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[65,120055,120056,120061,120076,120081],{"__ignoreMap":63},[68,120057,120058],{"class":70,"line":71},[68,120059,120060],{"class":393},"# 如果是使用apt安装的驱动\n",[68,120062,120063,120065,120067,120069,120071,120074],{"class":70,"line":92},[68,120064,24780],{"class":74},[68,120066,26280],{"class":78},[68,120068,26283],{"class":78},[68,120070,119356],{"class":82},[68,120072,120073],{"class":78}," nvidia",[68,120075,119446],{"class":82},[68,120077,120078],{"class":70,"line":1387},[68,120079,120080],{"class":393},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[68,120082,120083,120085],{"class":70,"line":1402},[68,120084,24780],{"class":74},[68,120086,120087],{"class":78}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[301,120089,120091],{"id":120090},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22203,120093,120095],{"id":120094},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23115,120097,120099],{"id":120098},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[58,120101,120103],{"className":118721,"code":120102,"language":118723,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,120104,120105,120110,120121,120126,120136,120141],{"__ignoreMap":63},[68,120106,120107],{"class":70,"line":71},[68,120108,120109],{"class":393},"# 安装英伟达驱动\n",[68,120111,120112,120114,120116,120118],{"class":70,"line":92},[68,120113,24780],{"class":74},[68,120115,117515],{"class":78},[68,120117,24039],{"class":78},[68,120119,120120],{"class":78}," nvidia-driver-版本号\n",[68,120122,120123],{"class":70,"line":1387},[68,120124,120125],{"class":393},"# 重启 \n",[68,120127,120128,120130,120132,120134],{"class":70,"line":1402},[68,120129,24780],{"class":74},[68,120131,119834],{"class":78},[68,120133,119837],{"class":82},[68,120135,119840],{"class":78},[68,120137,120138],{"class":70,"line":1408},[68,120139,120140],{"class":393},"# 检查驱动是否安装成功\n",[68,120142,120143],{"class":70,"line":1422},[68,120144,120145],{"class":74},"nvidia-smi\n",[23115,120147,120149],{"id":120148},"_35212-debian","3.5.2.1.2 Debian",[58,120151,120153],{"className":118721,"code":120152,"language":118723,"meta":63,"style":63},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,120154,120155,120159,120173,120177,120187,120191],{"__ignoreMap":63},[68,120156,120157],{"class":70,"line":71},[68,120158,120109],{"class":393},[68,120160,120161,120163,120165,120167,120170],{"class":70,"line":92},[68,120162,24780],{"class":74},[68,120164,117515],{"class":78},[68,120166,24039],{"class":78},[68,120168,120169],{"class":78}," nvidia-driver",[68,120171,120172],{"class":78}," nvidia-settings\n",[68,120174,120175],{"class":70,"line":1387},[68,120176,120125],{"class":393},[68,120178,120179,120181,120183,120185],{"class":70,"line":1402},[68,120180,24780],{"class":74},[68,120182,119834],{"class":78},[68,120184,119837],{"class":82},[68,120186,119840],{"class":78},[68,120188,120189],{"class":70,"line":1408},[68,120190,120140],{"class":393},[68,120192,120193],{"class":70,"line":1422},[68,120194,120145],{"class":74},[22203,120196,120198],{"id":120197},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120200,120201,120202,120205],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[483,120203,120204],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120207,120208,120209],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23758,120210,120211],{},[483,120212,120213],{},"（也可以不禁用桌面环境，直接进行下一步。）",[58,120215,120217],{"className":118721,"code":120216,"language":118723,"meta":63,"style":63},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[65,120218,120219,120224,120234,120239,120252,120257],{"__ignoreMap":63},[68,120220,120221],{"class":70,"line":71},[68,120222,120223],{"class":393},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[68,120225,120226,120228,120231],{"class":70,"line":92},[68,120227,24780],{"class":74},[68,120229,120230],{"class":78}," telinit",[68,120232,120233],{"class":82}," 3\n",[68,120235,120236],{"class":70,"line":1387},[68,120237,120238],{"class":393},"# ubuntu 使用下方命令\n",[68,120240,120241,120243,120246,120249],{"class":70,"line":1402},[68,120242,24780],{"class":74},[68,120244,120245],{"class":78}," service",[68,120247,120248],{"class":78}," lightdm",[68,120250,120251],{"class":78}," stop\n",[68,120253,120254],{"class":70,"line":1408},[68,120255,120256],{"class":393},"# Fedora 使用下方命令\n",[68,120258,120259,120261,120263,120266],{"class":70,"line":1422},[68,120260,24780],{"class":74},[68,120262,26717],{"class":78},[68,120264,120265],{"class":78}," isolate",[68,120267,120268],{"class":78}," multi-user.target\n",[19,120270,120271],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[58,120273,120275],{"className":118721,"code":120274,"language":118723,"meta":63,"style":63},"# 编译环境+准备工作\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",[65,120276,120277,120282,120293,120298,120305,120310,120322,120327,120334,120339],{"__ignoreMap":63},[68,120278,120279],{"class":70,"line":71},[68,120280,120281],{"class":393},"# 编译环境+准备工作\n",[68,120283,120284,120286,120288,120290],{"class":70,"line":92},[68,120285,24780],{"class":74},[68,120287,117515],{"class":78},[68,120289,24039],{"class":78},[68,120291,120292],{"class":78}," build-essential\n",[68,120294,120295],{"class":70,"line":1387},[68,120296,120297],{"class":393},"# 进入到.run目录中\n",[68,120299,120300,120302],{"class":70,"line":1402},[68,120301,101476],{"class":82},[68,120303,120304],{"class":78}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[68,120306,120307],{"class":70,"line":1408},[68,120308,120309],{"class":393},"# 给驱动文件增加可执行权限：\n",[68,120311,120312,120314,120316,120319],{"class":70,"line":1422},[68,120313,24780],{"class":74},[68,120315,24783],{"class":78},[68,120317,120318],{"class":78}," a+x",[68,120320,120321],{"class":78}," NVIDIA-Linux-x86_64-550.107.02.run\n",[68,120323,120324],{"class":70,"line":1428},[68,120325,120326],{"class":393},"# 然后执行安装：\n",[68,120328,120329,120331],{"class":70,"line":1519},[68,120330,24780],{"class":74},[68,120332,120333],{"class":78}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[68,120335,120336],{"class":70,"line":1525},[68,120337,120338],{"class":393},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[68,120340,120341,120343,120346],{"class":70,"line":1537},[68,120342,24780],{"class":74},[68,120344,120345],{"class":78}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[68,120347,120348],{"class":82},"  --no-opengl-files\n",[19,120350,120351],{},"安装完毕重启即可",[58,120353,120355],{"className":118721,"code":120354,"language":118723,"meta":63,"style":63},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[65,120356,120357,120361,120367,120371],{"__ignoreMap":63},[68,120358,120359],{"class":70,"line":71},[68,120360,120125],{"class":393},[68,120362,120363,120365],{"class":70,"line":92},[68,120364,24780],{"class":74},[68,120366,26851],{"class":78},[68,120368,120369],{"class":70,"line":1387},[68,120370,120140],{"class":393},[68,120372,120373],{"class":70,"line":1402},[68,120374,120145],{"class":74},[301,120376,120378],{"id":120377},"_353-安装cuda","3.5.3 安装CUDA",[19,120380,120381],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120383,120384],{},[48,120385],{"alt":63,"src":120386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[23,120388,120389],{},[26,120390,120391],{},"先查看显卡驱动所支持的最高CUDA版本",[58,120393,120394],{"className":118721,"code":120145,"language":118723,"meta":63,"style":63},[65,120395,120396],{"__ignoreMap":63},[68,120397,120398],{"class":70,"line":71},[68,120399,120145],{"class":74},[19,120401,120402],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120404,120405],{},[48,120406],{"alt":63,"src":120407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[23,120409,120410],{"start":92},[26,120411,120412],{},"下载CUDA并安装CUDA",[19,120414,118500,120415],{},[30,120416,118503],{"href":118503,"rel":120417},[34],[19,120419,120420],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120422,120423],{},[48,120424],{"alt":63,"src":120425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120427,120428,120429,120434],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[30,120430,120433],{"href":120431,"rel":120432},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[34],"Vinci机器人队单片机教程","）",[19,120436,120437],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120439,120440],{},[48,120441],{"alt":63,"src":120442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120444,120445],{},"将最下方框框里的命令敲入终端",[58,120447,120449],{"className":118721,"code":120448,"language":118723,"meta":63,"style":63},"# 在当前文件夹下创建一个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",[65,120450,120451,120456,120465,120470,120477,120482,120490,120495,120506,120511],{"__ignoreMap":63},[68,120452,120453],{"class":70,"line":71},[68,120454,120455],{"class":393},"# 在当前文件夹下创建一个ttt的子文件夹\n",[68,120457,120458,120460,120462],{"class":70,"line":92},[68,120459,101466],{"class":74},[68,120461,29417],{"class":82},[68,120463,120464],{"class":78}," .\u002Fttt\n",[68,120466,120467],{"class":70,"line":1387},[68,120468,120469],{"class":393},"# 进入ttt文件夹\n",[68,120471,120472,120474],{"class":70,"line":1402},[68,120473,101476],{"class":82},[68,120475,120476],{"class":78}," ttt\n",[68,120478,120479],{"class":70,"line":1408},[68,120480,120481],{"class":393},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[68,120483,120484,120487],{"class":70,"line":1422},[68,120485,120486],{"class":74},"wget",[68,120488,120489],{"class":78}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[68,120491,120492],{"class":70,"line":1428},[68,120493,120494],{"class":393},"# 给予权限\n",[68,120496,120497,120499,120501,120503],{"class":70,"line":1519},[68,120498,24780],{"class":74},[68,120500,24783],{"class":78},[68,120502,120318],{"class":78},[68,120504,120505],{"class":78}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[68,120507,120508],{"class":70,"line":1525},[68,120509,120510],{"class":393},"# 运行脚本\n",[68,120512,120513,120515],{"class":70,"line":1537},[68,120514,24780],{"class":74},[68,120516,120505],{"class":78},[19,120518,120519],{},[48,120520],{"alt":63,"src":120521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120523,120524],{},"正在安装中：",[19,120526,120527],{},[48,120528],{"alt":63,"src":120529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120531,120532],{},"输入accept接受即可",[19,120534,120535],{},[48,120536],{"alt":63,"src":120537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120539,120540],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120542,120543],{},[48,120544],{"alt":63,"src":120545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120547,120548],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120550,120551],{},[48,120552],{"alt":63,"src":120553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[23,120555,120556],{"start":1387},[26,120557,120558],{},"配置环境",[19,120560,120561],{},"根据上方确认一下路径，比如我上面红色框起来的为",[58,120563,120565],{"className":118721,"code":120564,"language":118723,"meta":63,"style":63},"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",[65,120566,120567,120583,120598],{"__ignoreMap":63},[68,120568,120569,120572,120575,120578,120581],{"class":70,"line":71},[68,120570,120571],{"class":74},"Please",[68,120573,120574],{"class":78}," make",[68,120576,120577],{"class":78}," sure",[68,120579,120580],{"class":78}," that",[68,120582,2880],{"class":335},[68,120584,120585,120587,120590,120593,120596],{"class":70,"line":92},[68,120586,52472],{"class":74},[68,120588,120589],{"class":78},"   PATH",[68,120591,120592],{"class":78}," includes",[68,120594,120595],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[68,120597,2880],{"class":335},[68,120599,120600,120602,120605,120607,120610,120613,120615,120618,120621,120624,120627,120629,120632,120634],{"class":70,"line":1387},[68,120601,52472],{"class":74},[68,120603,120604],{"class":78},"   LD_LIBRARY_PATH",[68,120606,120592],{"class":78},[68,120608,120609],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[68,120611,120612],{"class":78}," or,",[68,120614,138],{"class":78},[68,120616,120617],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[68,120619,120620],{"class":78}," to",[68,120622,120623],{"class":78}," \u002Fetc\u002Fld.so.conf",[68,120625,120626],{"class":78}," and",[68,120628,27434],{"class":78},[68,120630,120631],{"class":78}," ldconfig",[68,120633,64805],{"class":78},[68,120635,120636],{"class":78}," root\n",[19,120638,120639],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[58,120641,120643],{"className":118721,"code":120642,"language":118723,"meta":63,"style":63},"which nvcc\n",[65,120644,120645],{"__ignoreMap":63},[68,120646,120647,120650],{"class":70,"line":71},[68,120648,120649],{"class":82},"which",[68,120651,120652],{"class":78}," nvcc\n",[19,120654,120655],{},[48,120656],{"alt":63,"src":120657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120659,120660],{},"所以我进行以下操作：",[58,120662,120664],{"className":118721,"code":120663,"language":118723,"meta":63,"style":63},"sudo vim ~\u002F.bashrc\n",[65,120665,120666],{"__ignoreMap":63},[68,120667,120668,120670,120672],{"class":70,"line":71},[68,120669,24780],{"class":74},[68,120671,118781],{"class":78},[68,120673,120674],{"class":78}," ~\u002F.bashrc\n",[19,120676,120677],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[58,120679,120681],{"className":118721,"code":120680,"language":118723,"meta":63,"style":63},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[65,120682,120683,120695],{"__ignoreMap":63},[68,120684,120685,120687,120690,120692],{"class":70,"line":71},[68,120686,25246],{"class":331},[68,120688,120689],{"class":335}," PATH",[68,120691,381],{"class":331},[68,120693,120694],{"class":335},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[68,120696,120697,120699,120702,120704],{"class":70,"line":92},[68,120698,25246],{"class":331},[68,120700,120701],{"class":335}," LD_LIBRARY_PATH",[68,120703,381],{"class":331},[68,120705,120706],{"class":335},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120708,120709],{},[48,120710],{"alt":63,"src":120711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[58,120713,120715],{"className":118721,"code":120714,"language":118723,"meta":63,"style":63},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[65,120716,120717,120722,120728,120733],{"__ignoreMap":63},[68,120718,120719],{"class":70,"line":71},[68,120720,120721],{"class":393},"# 刷新当前终端的环境变量\n",[68,120723,120724,120726],{"class":70,"line":92},[68,120725,101093],{"class":82},[68,120727,120674],{"class":78},[68,120729,120730],{"class":70,"line":1387},[68,120731,120732],{"class":393},"# 验证CUDA是否安装成功\n",[68,120734,120735,120738],{"class":70,"line":1402},[68,120736,120737],{"class":74},"nvcc",[68,120739,120740],{"class":82}," -V\n",[19,120742,120743],{},"出现下图这种则安装成功。",[19,120745,120746],{},[48,120747],{"alt":63,"src":120748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[301,120750,120752],{"id":120751},"_354-安装cudnn","3.5.4 安装cuDNN",[23,120754,120755],{},[26,120756,120757],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120759,120760,120761,120766],{},"前往 NVIDIA cuDNN 下载页面：",[30,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",[34],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120768,120769],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120771,120772],{},[48,120773],{"alt":63,"src":120774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120776,120777],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120779,120780],{},[48,120781],{"alt":63,"src":120782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120784,120785],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120787,120788],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120790,120791],{},[483,120792,120793],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120795,120796],{},"下载好的：",[19,120798,120799],{},[48,120800],{"alt":63,"src":120801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[23,120803,120804],{"start":92},[26,120805,120806],{},"安装cuDNN",[19,120808,120809],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120811,120812],{},[48,120813],{"alt":63,"src":120814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120816,120817],{},"解压文件，并复制到对应位置完成安装",[58,120819,120821],{"className":118721,"code":120820,"language":118723,"meta":63,"style":63},"# 解压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",[65,120822,120823,120828,120839,120844,120851,120856,120872,120886,120891,120902,120911,120915,120931],{"__ignoreMap":63},[68,120824,120825],{"class":70,"line":71},[68,120826,120827],{"class":393},"# 解压cuDNN文件\n",[68,120829,120830,120833,120836],{"class":70,"line":92},[68,120831,120832],{"class":74},"tar",[68,120834,120835],{"class":82}," -xvf",[68,120837,120838],{"class":78}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[68,120840,120841],{"class":70,"line":1387},[68,120842,120843],{"class":393},"# cd进文件夹\n",[68,120845,120846,120848],{"class":70,"line":1402},[68,120847,101476],{"class":82},[68,120849,120850],{"class":78}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[68,120852,120853],{"class":70,"line":1408},[68,120854,120855],{"class":393},"# 复制cuDNN文件到CUDA目录\n",[68,120857,120858,120860,120862,120865,120867,120870],{"class":70,"line":1422},[68,120859,24780],{"class":74},[68,120861,28065],{"class":78},[68,120863,120864],{"class":78}," include\u002Fcudnn",[68,120866,788],{"class":82},[68,120868,120869],{"class":78},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[68,120871,2880],{"class":335},[68,120873,120874,120876,120878,120881,120883],{"class":70,"line":1428},[68,120875,24780],{"class":74},[68,120877,28065],{"class":78},[68,120879,120880],{"class":78}," lib\u002Flibcudnn",[68,120882,788],{"class":82},[68,120884,120885],{"class":78},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[68,120887,120888],{"class":70,"line":1519},[68,120889,120890],{"class":393},"# 对比一下有没有缺文件\n",[68,120892,120893,120895,120898,120900],{"class":70,"line":1525},[68,120894,26965],{"class":74},[68,120896,120897],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[68,120899,788],{"class":82},[68,120901,2880],{"class":335},[68,120903,120904,120906,120909],{"class":70,"line":1537},[68,120905,26965],{"class":74},[68,120907,120908],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[68,120910,119446],{"class":82},[68,120912,120913],{"class":70,"line":1819},[68,120914,120494],{"class":393},[68,120916,120917,120919,120921,120924,120926,120928],{"class":70,"line":1824},[68,120918,24780],{"class":74},[68,120920,24783],{"class":78},[68,120922,120923],{"class":78}," a+r",[68,120925,120897],{"class":78},[68,120927,788],{"class":82},[68,120929,120930],{"class":335},"   \n",[68,120932,120933,120935,120937,120939,120941],{"class":70,"line":1830},[68,120934,24780],{"class":74},[68,120936,24783],{"class":78},[68,120938,120923],{"class":78},[68,120940,120908],{"class":78},[68,120942,119446],{"class":82},[23,120944,120945],{"start":1387},[26,120946,120947],{},"检查是否安装成功",[58,120949,120951],{"className":118721,"code":120950,"language":118723,"meta":63,"style":63},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[65,120952,120953,120958],{"__ignoreMap":63},[68,120954,120955],{"class":70,"line":71},[68,120956,120957],{"class":393},"# 检查cuDNN版本命令\n",[68,120959,120960,120963,120966,120968,120970,120973,120976],{"class":70,"line":92},[68,120961,120962],{"class":74},"cat",[68,120964,120965],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[68,120967,25313],{"class":331},[68,120969,30437],{"class":74},[68,120971,120972],{"class":78}," CUDNN_MAJOR",[68,120974,120975],{"class":82}," -A",[68,120977,47924],{"class":82},[19,120979,120980],{},"出现下图这样的就是安装成功了",[19,120982,120983],{},[48,120984],{"alt":63,"src":120985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[23,120987,120988],{"start":1402},[26,120989,120990],{},"软链接(一般不需要)",[58,120992,120994],{"className":118721,"code":120993,"language":118723,"meta":63,"style":63},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[65,120995,120996,121001],{"__ignoreMap":63},[68,120997,120998],{"class":70,"line":71},[68,120999,121000],{"class":393},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[68,121002,121003,121005],{"class":70,"line":92},[68,121004,24780],{"class":74},[68,121006,121007],{"class":78}," ldconfig\n",[19,121009,121010],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[58,121012,121017],{"className":121013,"code":121014,"language":121015,"meta":121016,"style":63},"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",[65,121018,121019,121024,121029,121034,121039,121044,121049],{"__ignoreMap":63},[68,121020,121021],{"class":70,"line":71},[68,121022,121023],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[68,121025,121026],{"class":70,"line":92},[68,121027,121028],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[68,121030,121031],{"class":70,"line":1387},[68,121032,121033],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[68,121035,121036],{"class":70,"line":1402},[68,121037,121038],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[68,121040,121041],{"class":70,"line":1408},[68,121042,121043],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[68,121045,121046],{"class":70,"line":1422},[68,121047,121048],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[68,121050,121051],{"class":70,"line":1428},[68,121052,121053],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121055,121056],{},"运行下方的命令",[58,121058,121060],{"className":118721,"code":121059,"language":118723,"meta":63,"style":63},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[65,121061,121062,121067,121074,121079],{"__ignoreMap":63},[68,121063,121064],{"class":70,"line":71},[68,121065,121066],{"class":393},"# cd进入CUDA路径\n",[68,121068,121069,121071],{"class":70,"line":92},[68,121070,101476],{"class":82},[68,121072,121073],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[68,121075,121076],{"class":70,"line":1387},[68,121077,121078],{"class":393}," # 查看本路径下的需要软链接的文件名\n",[68,121080,121081],{"class":70,"line":1402},[68,121082,121083],{"class":74}," ls\n",[19,121085,121086],{},[48,121087],{"alt":63,"src":121088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121090,121091,121092,18615,121095,18615,121098,121101],{},"如上图，我需要将",[65,121093,121094],{},"libcudnn_xxx_xxxxx.so.8.9.7",[65,121096,121097],{},"libcudnn_xxx_xxxxx.so.8",[65,121099,121100],{},"libcudnn_xxx_xxxxx.so","软链接",[58,121103,121105],{"className":118721,"code":121104,"language":118723,"meta":63,"style":63},"# 创建符号链接。对于每个 .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",[65,121106,121107,121112,121128,121142,121156,121170,121184,121198,121212,121217,121223,121228],{"__ignoreMap":63},[68,121108,121109],{"class":70,"line":71},[68,121110,121111],{"class":393},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[68,121113,121114,121116,121119,121122,121125],{"class":70,"line":92},[68,121115,24780],{"class":74},[68,121117,121118],{"class":78}," ln",[68,121120,121121],{"class":82}," -sf",[68,121123,121124],{"class":78}," libcudnn_cnn_train.so.8.9.7",[68,121126,121127],{"class":78}," libcudnn_cnn_train.so.8\n",[68,121129,121130,121132,121134,121136,121139],{"class":70,"line":1387},[68,121131,24780],{"class":74},[68,121133,121118],{"class":78},[68,121135,121121],{"class":82},[68,121137,121138],{"class":78}," libcudnn_adv_infer.so.8.9.7",[68,121140,121141],{"class":78}," libcudnn_adv_infer.so.8\n",[68,121143,121144,121146,121148,121150,121153],{"class":70,"line":1402},[68,121145,24780],{"class":74},[68,121147,121118],{"class":78},[68,121149,121121],{"class":82},[68,121151,121152],{"class":78}," libcudnn_adv_train.so.8.9.7",[68,121154,121155],{"class":78}," libcudnn_adv_train.so.8\n",[68,121157,121158,121160,121162,121164,121167],{"class":70,"line":1408},[68,121159,24780],{"class":74},[68,121161,121118],{"class":78},[68,121163,121121],{"class":82},[68,121165,121166],{"class":78}," libcudnn_cnn_infer.so.8.9.7",[68,121168,121169],{"class":78}," libcudnn_cnn_infer.so.8\n",[68,121171,121172,121174,121176,121178,121181],{"class":70,"line":1422},[68,121173,24780],{"class":74},[68,121175,121118],{"class":78},[68,121177,121121],{"class":82},[68,121179,121180],{"class":78}," libcudnn.so.8.9.7",[68,121182,121183],{"class":78}," libcudnn.so.8\n",[68,121185,121186,121188,121190,121192,121195],{"class":70,"line":1428},[68,121187,24780],{"class":74},[68,121189,121118],{"class":78},[68,121191,121121],{"class":82},[68,121193,121194],{"class":78}," libcudnn_ops_infer.so.8.9.7",[68,121196,121197],{"class":78}," libcudnn_ops_infer.so.8\n",[68,121199,121200,121202,121204,121206,121209],{"class":70,"line":1519},[68,121201,24780],{"class":74},[68,121203,121118],{"class":78},[68,121205,121121],{"class":82},[68,121207,121208],{"class":78}," libcudnn_ops_train.so.8.9.7",[68,121210,121211],{"class":78}," libcudnn_ops_train.so.8\n",[68,121213,121214],{"class":70,"line":1525},[68,121215,121216],{"class":393},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[68,121218,121219,121221],{"class":70,"line":1537},[68,121220,24780],{"class":74},[68,121222,121007],{"class":78},[68,121224,121225],{"class":70,"line":1819},[68,121226,121227],{"class":393},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[68,121229,121230,121232,121235,121238,121240,121243],{"class":70,"line":1824},[68,121231,26965],{"class":74},[68,121233,121234],{"class":82}," -l",[68,121236,121237],{"class":78}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[68,121239,788],{"class":82},[68,121241,121242],{"class":78},".so",[68,121244,119446],{"class":82},[301,121246,121248],{"id":121247},"_355-常见问题","3.5.5 常见问题",[23,121250,121251],{},[26,121252,121253],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[58,121255,121257],{"className":118721,"code":121256,"language":118723,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[65,121258,121259],{"__ignoreMap":63},[68,121260,121261,121263,121265],{"class":70,"line":71},[68,121262,24780],{"class":74},[68,121264,118781],{"class":78},[68,121266,121267],{"class":78}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121269,121270],{},"blacklist-nouveau.conf文件内容如下：",[58,121272,121274],{"className":118721,"code":121273,"language":118723,"meta":63,"style":63},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[65,121275,121276,121284,121291,121303,121313],{"__ignoreMap":63},[68,121277,121278,121281],{"class":70,"line":71},[68,121279,121280],{"class":74},"blacklist",[68,121282,121283],{"class":78}," nouveau\n",[68,121285,121286,121288],{"class":70,"line":92},[68,121287,121280],{"class":74},[68,121289,121290],{"class":78}," lbm-nouveau\n",[68,121292,121293,121295,121298,121301],{"class":70,"line":1387},[68,121294,116130],{"class":74},[68,121296,121297],{"class":78}," nouveau",[68,121299,121300],{"class":78}," modeset=",[68,121302,3291],{"class":82},[68,121304,121305,121308,121310],{"class":70,"line":1402},[68,121306,121307],{"class":82},"alias",[68,121309,121297],{"class":78},[68,121311,121312],{"class":78}," off\n",[68,121314,121315,121317,121320],{"class":70,"line":1408},[68,121316,121307],{"class":82},[68,121318,121319],{"class":78}," lbm-nouveau",[68,121321,121312],{"class":78},[19,121323,121324],{},"接着运行下方命令",[58,121326,121328],{"className":118721,"code":121327,"language":118723,"meta":63,"style":63},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[65,121329,121330,121340,121345],{"__ignoreMap":63},[68,121331,121332,121334,121337],{"class":70,"line":71},[68,121333,24780],{"class":74},[68,121335,121336],{"class":78}," update-initramfs",[68,121338,121339],{"class":82}," -u\n",[68,121341,121342],{"class":70,"line":92},[68,121343,121344],{"class":74},"或者\n",[68,121346,121347,121349,121352],{"class":70,"line":1387},[68,121348,24780],{"class":74},[68,121350,121351],{"class":78}," dracut",[68,121353,121354],{"class":82}," --force\n",[19,121356,121357],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[58,121359,121361],{"className":118721,"code":121360,"language":118723,"meta":63,"style":63},"lsmod | grep nouveau\n",[65,121362,121363],{"__ignoreMap":63},[68,121364,121365,121368,121370,121372],{"class":70,"line":71},[68,121366,121367],{"class":74},"lsmod",[68,121369,25313],{"class":331},[68,121371,30437],{"class":74},[68,121373,121283],{"class":78},[23,121375,121376],{"start":92},[26,121377,121378],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[58,121380,121382],{"className":118721,"code":121381,"language":118723,"meta":63,"style":63},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[65,121383,121384],{"__ignoreMap":63},[68,121385,121386,121388,121390],{"class":70,"line":71},[68,121387,24780],{"class":74},[68,121389,118781],{"class":78},[68,121391,121392],{"class":78}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121394,121395],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[58,121397,121399],{"className":118721,"code":121398,"language":118723,"meta":63,"style":63},"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",[65,121400,121401,121409,121417,121425,121432,121440,121450,121458],{"__ignoreMap":63},[68,121402,121403,121406],{"class":70,"line":71},[68,121404,121405],{"class":74},"Section",[68,121407,121408],{"class":78}," \"OutputClass\"\n",[68,121410,121411,121414],{"class":70,"line":92},[68,121412,121413],{"class":74},"   Identifier",[68,121415,121416],{"class":78}," \"nvidia\"\n",[68,121418,121419,121422],{"class":70,"line":1387},[68,121420,121421],{"class":74},"   MatchDriver",[68,121423,121424],{"class":78}," \"nvidia-drm\"\n",[68,121426,121427,121430],{"class":70,"line":1402},[68,121428,121429],{"class":74},"   Driver",[68,121431,121416],{"class":78},[68,121433,121434,121437],{"class":70,"line":1408},[68,121435,121436],{"class":74},"   Option",[68,121438,121439],{"class":78}," \"AllowEmptyInitialConfiguration\"\n",[68,121441,121442,121444,121447],{"class":70,"line":1422},[68,121443,121436],{"class":74},[68,121445,121446],{"class":78}," \"PrimaryGPU\"",[68,121448,121449],{"class":78}," \"yes\"\n",[68,121451,121452,121455],{"class":70,"line":1428},[68,121453,121454],{"class":74},"   ModulePath",[68,121456,121457],{"class":78}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[68,121459,121460],{"class":70,"line":1519},[68,121461,121462],{"class":74},"EndSection\n",[23,121464,121465],{"start":1387},[26,121466,121467],{},"安装N卡驱动提示错误",[58,121469,121471],{"className":121013,"code":121470,"language":121015,"meta":121016,"style":63},"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",[65,121472,121473],{"__ignoreMap":63},[68,121474,121475],{"class":70,"line":71},[68,121476,121470],{},[23,121478,121479],{},[26,121480,121481],{},"检查当前运行的内核版本：",[19,121483,121484],{},"运行以下命令以查看你当前正在使用的内核版本：",[58,121486,121488],{"className":60,"code":121487,"language":62,"meta":63,"style":63},"uname -r\n",[65,121489,121490],{"__ignoreMap":63},[68,121491,121492,121494],{"class":70,"line":71},[68,121493,70405],{"class":74},[68,121495,121496],{"class":82}," -r\n",[23,121498,121499],{"start":92},[26,121500,121501],{},"安装内核开发文件：",[19,121503,121504,121505,121508],{},"确保你已经安装了与当前内核版本相匹配的 ",[65,121506,121507],{},"kernel-devel"," 包。运行以下命令来安装：",[58,121510,121512],{"className":60,"code":121511,"language":62,"meta":63,"style":63},"sudo dnf install kernel-devel-$(uname -r)\n",[65,121513,121514],{"__ignoreMap":63},[68,121515,121516,121518,121520,121522,121525,121527,121529,121531],{"class":70,"line":71},[68,121517,24780],{"class":74},[68,121519,26519],{"class":78},[68,121521,24039],{"class":78},[68,121523,121524],{"class":78}," kernel-devel-",[68,121526,25303],{"class":335},[68,121528,70405],{"class":74},[68,121530,119837],{"class":82},[68,121532,342],{"class":335},[19,121534,121535],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[23,121537,121538],{"start":1387},[26,121539,121540],{},"安装内核源代码（如果需要）：",[19,121542,121543],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[58,121545,121547],{"className":60,"code":121546,"language":62,"meta":63,"style":63},"sudo dnf install kernel-headers kernel-source\n",[65,121548,121549],{"__ignoreMap":63},[68,121550,121551,121553,121555,121557,121560],{"class":70,"line":71},[68,121552,24780],{"class":74},[68,121554,26519],{"class":78},[68,121556,24039],{"class":78},[68,121558,121559],{"class":78}," kernel-headers",[68,121561,121562],{"class":78}," kernel-source\n",[23,121564,121565],{"start":1402},[26,121566,121567],{},"检查安装：",[19,121569,121570,121571,121574],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[65,121572,121573],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[58,121576,121578],{"className":60,"code":121577,"language":62,"meta":63,"style":63},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[65,121579,121580],{"__ignoreMap":63},[68,121581,121582,121584],{"class":70,"line":71},[68,121583,26965],{"class":74},[68,121585,121586],{"class":78}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121588,121589,121590,121593],{},"如果仍然遇到问题，可以通过 ",[65,121591,121592],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[250,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":63,"searchDepth":92,"depth":92,"links":121598},[121599,121603,121613,121617,121618],{"id":118697,"depth":92,"text":118698,"children":121600},[121601,121602],{"id":118707,"depth":1387,"text":118708},{"id":118717,"depth":1387,"text":118718},{"id":118917,"depth":92,"text":118918,"children":121604},[121605,121606,121607,121608,121609,121610,121611,121612],{"id":118921,"depth":1387,"text":118922},{"id":118991,"depth":1387,"text":118992},{"id":119080,"depth":1387,"text":119081},{"id":119325,"depth":1387,"text":119326},{"id":119395,"depth":1387,"text":119396},{"id":119462,"depth":1387,"text":119463},{"id":119497,"depth":1387,"text":119498},{"id":119552,"depth":1387,"text":119553},{"id":119603,"depth":92,"text":119604,"children":121614},[121615,121616],{"id":119607,"depth":1387,"text":119608},{"id":119687,"depth":1387,"text":119688},{"id":119873,"depth":92,"text":119874},{"id":120045,"depth":92,"text":120046,"children":121619},[121620,121621,121622,121623,121624],{"id":120049,"depth":1387,"text":120050},{"id":120090,"depth":1387,"text":120091},{"id":120377,"depth":1387,"text":120378},{"id":120751,"depth":1387,"text":120752},{"id":121247,"depth":1387,"text":121248},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118689,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121631,"title":121632,"body":121633,"description":257,"extension":258,"meta":121973,"navigation":260,"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-命令教程长期积累",[23,121639,121640],{},[26,121641,121642],{},"大多数命令",[19,121644,121645],{},"常用 Linux 命令速查：",[58,121647,121649],{"className":60,"code":121648,"language":62,"meta":63,"style":63},"# 文件与目录\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",[65,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":63},[68,121652,121653],{"class":70,"line":71},[68,121654,121655],{"class":393},"# 文件与目录\n",[68,121657,121658,121660],{"class":70,"line":92},[68,121659,26965],{"class":74},[68,121661,121662],{"class":393},"        # 列出目录内容\n",[68,121664,121665,121667],{"class":70,"line":1387},[68,121666,101476],{"class":82},[68,121668,121669],{"class":393},"        # 切换目录\n",[68,121671,121672,121675],{"class":70,"line":1402},[68,121673,121674],{"class":82},"pwd",[68,121676,121677],{"class":393},"       # 显示当前路径\n",[68,121679,121680,121682],{"class":70,"line":1408},[68,121681,101466],{"class":74},[68,121683,121684],{"class":393},"     # 创建目录\n",[68,121686,121687,121689],{"class":70,"line":1422},[68,121688,25526],{"class":74},[68,121690,121691],{"class":393},"        # 删除文件或目录\n",[68,121693,121694,121697],{"class":70,"line":1428},[68,121695,121696],{"class":74},"cp",[68,121698,121699],{"class":393},"        # 复制文件或目录\n",[68,121701,121702,121705],{"class":70,"line":1519},[68,121703,121704],{"class":74},"mv",[68,121706,121707],{"class":393},"        # 移动\u002F重命名文件或目录\n",[68,121709,121710,121712],{"class":70,"line":1525},[68,121711,101483],{"class":74},[68,121713,121714],{"class":393},"     # 创建空文件\n",[68,121716,121717,121719],{"class":70,"line":1537},[68,121718,120962],{"class":74},[68,121720,121721],{"class":393},"       # 查看文件内容\n",[68,121723,121724,121727],{"class":70,"line":1819},[68,121725,121726],{"class":74},"head\u002Ftail",[68,121728,121729],{"class":393}," # 查看文件头部\u002F尾部\n",[68,121731,121732],{"class":70,"line":1824},[68,121733,2606],{"emptyLinePlaceholder":260},[68,121735,121736],{"class":70,"line":1830},[68,121737,121738],{"class":393},"# 权限管理\n",[68,121740,121741,121743],{"class":70,"line":1835},[68,121742,24815],{"class":74},[68,121744,121745],{"class":393},"     # 修改文件权限\n",[68,121747,121748,121751],{"class":70,"line":1849},[68,121749,121750],{"class":74},"chown",[68,121752,121753],{"class":393},"     # 修改文件所有者\n",[68,121755,121756,121758],{"class":70,"line":1854},[68,121757,24780],{"class":74},[68,121759,121760],{"class":393},"      # 以管理员身份执行\n",[68,121762,121763],{"class":70,"line":1860},[68,121764,2606],{"emptyLinePlaceholder":260},[68,121766,121767],{"class":70,"line":1881},[68,121768,121769],{"class":393},"# 系统信息\n",[68,121771,121772,121774],{"class":70,"line":1886},[68,121773,70405],{"class":74},[68,121775,121776],{"class":393},"     # 系统信息\n",[68,121778,121779,121782],{"class":70,"line":1900},[68,121780,121781],{"class":74},"df",[68,121783,121784],{"class":393},"        # 磁盘使用情况\n",[68,121786,121787,121790],{"class":70,"line":1905},[68,121788,121789],{"class":74},"free",[68,121791,121792],{"class":393},"      # 内存使用情况\n",[68,121794,121795,121798],{"class":70,"line":1934},[68,121796,121797],{"class":74},"top\u002Fhtop",[68,121799,121800],{"class":393},"  # 进程监控\n",[68,121802,121803,121806],{"class":70,"line":1939},[68,121804,121805],{"class":74},"ps",[68,121807,121808],{"class":393},"        # 查看进程\n",[68,121810,121811],{"class":70,"line":1956},[68,121812,2606],{"emptyLinePlaceholder":260},[68,121814,121815],{"class":70,"line":1961},[68,121816,121817],{"class":393},"# 网络\n",[68,121819,121820,121823],{"class":70,"line":1966},[68,121821,121822],{"class":74},"ping",[68,121824,121825],{"class":393},"      # 测试网络连通性\n",[68,121827,121828,121830],{"class":70,"line":1971},[68,121829,27053],{"class":74},[68,121831,121832],{"class":393},"      # 发送 HTTP 请求\n",[68,121834,121835,121837],{"class":70,"line":1985},[68,121836,120486],{"class":74},[68,121838,121839],{"class":393},"      # 下载文件\n",[68,121841,121842,121845],{"class":70,"line":1990},[68,121843,121844],{"class":74},"ssh",[68,121846,121847],{"class":393},"       # 远程登录\n",[68,121849,121850,121853],{"class":70,"line":2783},[68,121851,121852],{"class":74},"scp",[68,121854,121855],{"class":393},"       # 远程文件传输\n",[68,121857,121858],{"class":70,"line":2797},[68,121859,2606],{"emptyLinePlaceholder":260},[68,121861,121862],{"class":70,"line":2805},[68,121863,121864],{"class":393},"# 包管理（Debian\u002FUbuntu）\n",[68,121866,121867,121869,121871],{"class":70,"line":2810},[68,121868,117566],{"class":74},[68,121870,117545],{"class":78},[68,121872,121873],{"class":393},"   # 更新软件源\n",[68,121875,121876,121878,121880],{"class":70,"line":2816},[68,121877,117566],{"class":74},[68,121879,24039],{"class":78},[68,121881,121882],{"class":393},"  # 安装软件包\n",[68,121884,121885,121887,121889],{"class":70,"line":2822},[68,121886,117566],{"class":74},[68,121888,26283],{"class":78},[68,121890,121891],{"class":393},"   # 卸载软件包\n",[23,121893,121894],{"start":92},[26,121895,121896],{},"KDE Dolphin 以root打开",[19,121898,121899],{},"kde5",[58,121901,121903],{"className":60,"code":121902,"language":62,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[65,121904,121905],{"__ignoreMap":63},[68,121906,121907,121910,121913,121916,121918,121920,121923,121926,121928,121931,121933],{"class":70,"line":71},[68,121908,121909],{"class":74},"pkexec",[68,121911,121912],{"class":78}," env",[68,121914,121915],{"class":78}," DISPLAY=",[68,121917,28347],{"class":335},[68,121919,28405],{"class":78},[68,121921,121922],{"class":335},"$XAUTHORITY ",[68,121924,121925],{"class":78},"KDE_SESSION_VERSION=",[68,121927,652],{"class":82},[68,121929,121930],{"class":78}," KDE_FULL_SESSION=",[68,121932,1570],{"class":82},[68,121934,121935],{"class":78}," dolphin\n",[19,121937,121938],{},"kde6",[58,121940,121942],{"className":60,"code":121941,"language":62,"meta":63,"style":63},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[65,121943,121944],{"__ignoreMap":63},[68,121945,121946,121948,121950,121952,121954,121956,121958,121960,121962,121964,121966],{"class":70,"line":71},[68,121947,121909],{"class":74},[68,121949,121912],{"class":78},[68,121951,121915],{"class":78},[68,121953,28347],{"class":335},[68,121955,28405],{"class":78},[68,121957,121922],{"class":335},[68,121959,121925],{"class":78},[68,121961,677],{"class":82},[68,121963,121930],{"class":78},[68,121965,1570],{"class":82},[68,121967,121935],{"class":78},[250,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":63,"searchDepth":92,"depth":92,"links":121972},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121632,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121979,"title":121980,"body":121981,"description":257,"extension":258,"meta":121995,"navigation":260,"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-各种环境配置",[19,121987,121988],{},[30,121989,121992],{"href":121990,"rel":121991},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[34],"电控组环境搭建大全",{"title":63,"searchDepth":92,"depth":92,"links":121994},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121980,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122001,"title":122002,"body":122003,"description":257,"extension":258,"meta":122351,"navigation":260,"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-拓展功能",[14,122009,122011],{"id":122010},"_61-wine","6.1 Wine",[14,122013,122015],{"id":122014},"_62-android","6.2 Android",[301,122017,122019],{"id":122018},"_621-i卡a卡","6.2.1 I卡、A卡",[23,122021,122022],{},[26,122023,122024],{},"Wayland-Waydroid(体验超级好)",[19,122026,122027,122028],{},"Waydroid 官网与安装指南：",[30,122029,122030],{"href":122030,"rel":122031},"https:\u002F\u002Fwaydro.id\u002F",[34],[301,122033,122035],{"id":122034},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[23,122037,122038],{},[26,122039,122040,122041,122043,122044,122048,122050,122053,122058,122255],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53917,122042],{},"BlissOS 官网下载：",[30,122045,122046],{"href":122046,"rel":122047},"https:\u002F\u002Fblissos.org\u002F",[34],[53917,122049],{},[48,122051],{"alt":63,"src":122052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[23,122054,122055],{"start":1387},[26,122056,122057],{},"比较推荐的配置",[58,122059,122061],{"className":60,"code":122060,"language":62,"meta":63,"style":63},"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",[65,122062,122063,122070,122080,122090,122100,122112,122122,122129,122139,122148,122157,122167,122177,122186,122196,122206,122218,122228,122237,122247],{"__ignoreMap":63},[68,122064,122065,122068],{"class":70,"line":71},[68,122066,122067],{"class":74},"qemu-system-x86_64",[68,122069,24882],{"class":82},[68,122071,122072,122075,122078],{"class":70,"line":92},[68,122073,122074],{"class":82},"        -M",[68,122076,122077],{"class":78}," q35,vmport=off",[68,122079,24882],{"class":82},[68,122081,122082,122085,122088],{"class":70,"line":1387},[68,122083,122084],{"class":82},"        -accel",[68,122086,122087],{"class":78}," kvm",[68,122089,24882],{"class":82},[68,122091,122092,122095,122098],{"class":70,"line":1402},[68,122093,122094],{"class":82},"        -cpu",[68,122096,122097],{"class":78}," qemu64,+sse3,+sse4.2",[68,122099,24882],{"class":82},[68,122101,122102,122105,122108,122110],{"class":70,"line":1408},[68,122103,122104],{"class":82},"        -smp",[68,122106,122107],{"class":78}," 8,cores=",[68,122109,626],{"class":82},[68,122111,24882],{"class":82},[68,122113,122114,122117,122120],{"class":70,"line":1422},[68,122115,122116],{"class":82},"        -m",[68,122118,122119],{"class":78}," 6G",[68,122121,24882],{"class":82},[68,122123,122124,122127],{"class":70,"line":1428},[68,122125,122126],{"class":82},"        -usb",[68,122128,24882],{"class":82},[68,122130,122131,122134,122137],{"class":70,"line":1519},[68,122132,122133],{"class":82},"        -device",[68,122135,122136],{"class":78}," virtio-tablet",[68,122138,24882],{"class":82},[68,122140,122141,122143,122146],{"class":70,"line":1525},[68,122142,122133],{"class":82},[68,122144,122145],{"class":78}," virtio-keyboard",[68,122147,24882],{"class":82},[68,122149,122150,122152,122155],{"class":70,"line":1537},[68,122151,122133],{"class":82},[68,122153,122154],{"class":78}," usb-tablet",[68,122156,24882],{"class":82},[68,122158,122159,122162,122165],{"class":70,"line":1819},[68,122160,122161],{"class":82},"        -bios",[68,122163,122164],{"class":78}," OVMF-pure-efi64.fd",[68,122166,24882],{"class":82},[68,122168,122169,122172,122175],{"class":70,"line":1824},[68,122170,122171],{"class":82},"        -net",[68,122173,122174],{"class":78}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[68,122176,24882],{"class":82},[68,122178,122179,122181,122184],{"class":70,"line":1830},[68,122180,122171],{"class":82},[68,122182,122183],{"class":78}," nic,model=virtio",[68,122185,24882],{"class":82},[68,122187,122188,122191,122194],{"class":70,"line":1835},[68,122189,122190],{"class":82},"        -audio",[68,122192,122193],{"class":78}," sdl,model=hda",[68,122195,24882],{"class":82},[68,122197,122198,122201,122204],{"class":70,"line":1849},[68,122199,122200],{"class":82},"        -display",[68,122202,122203],{"class":78}," sdl,gl=on,show-cursor=on",[68,122205,24882],{"class":82},[68,122207,122208,122210,122213,122216],{"class":70,"line":1854},[68,122209,122133],{"class":82},[68,122211,122212],{"class":78}," virtio-vga-gl,xres=1920,yres=",[68,122214,122215],{"class":82},"1080",[68,122217,24882],{"class":82},[68,122219,122220,122223,122226],{"class":70,"line":1860},[68,122221,122222],{"class":82},"        -drive",[68,122224,122225],{"class":78}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[68,122227,24882],{"class":82},[68,122229,122230,122232,122235],{"class":70,"line":1881},[68,122231,122222],{"class":82},[68,122233,122234],{"class":78}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[68,122236,24882],{"class":82},[68,122238,122239,122242,122245],{"class":70,"line":1886},[68,122240,122241],{"class":82},"        -monitor",[68,122243,122244],{"class":78}," stdio",[68,122246,24882],{"class":82},[68,122248,122249,122252],{"class":70,"line":1900},[68,122250,122251],{"class":82},"        -serial",[68,122253,122254],{"class":78}," none\n",[23,122256,122257],{"start":1408},[26,122258,122259,122260],{},"常用操作：",[23,122261,122262,122265,122321],{},[26,122263,122264],{},"全屏：Ctrl+Alt+F",[26,122266,122267,122268,122273],{},"adb调试",[23,122269,122270],{},[26,122271,122272],{},"使Linux与Android用ADB连接。",[58,122274,122276],{"className":60,"code":122275,"language":62,"meta":63,"style":63},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[65,122277,122278,122283,122294,122299,122311,122316],{"__ignoreMap":63},[68,122279,122280],{"class":70,"line":71},[68,122281,122282],{"class":393},"# 连接安卓\n",[68,122284,122285,122288,122291],{"class":70,"line":92},[68,122286,122287],{"class":74},"adb",[68,122289,122290],{"class":78}," connect",[68,122292,122293],{"class":82}," 127.0.0.1\n",[68,122295,122296],{"class":70,"line":1387},[68,122297,122298],{"class":393},"# 打开shell\n",[68,122300,122301,122303,122305,122308],{"class":70,"line":1402},[68,122302,122287],{"class":74},[68,122304,27087],{"class":82},[68,122306,122307],{"class":78}," 127.0.0.1:5555",[68,122309,122310],{"class":78}," shell\n",[68,122312,122313],{"class":70,"line":1408},[68,122314,122315],{"class":393},"# 使用root权限\n",[68,122317,122318],{"class":70,"line":1422},[68,122319,122320],{"class":74},"su\n",[26,122322,122323,122324],{},"中文输入法",[23,122325,122326],{},[26,122327,122328],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122330,122332],{"id":122331},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122334,122335,122336],{},"rEFInd 官网与文档：",[30,122337,122338],{"href":122338,"rel":122339},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[34],[250,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":63,"searchDepth":92,"depth":92,"links":122344},[122345,122346,122350],{"id":122010,"depth":92,"text":122011},{"id":122014,"depth":92,"text":122015,"children":122347},[122348,122349],{"id":122018,"depth":1387,"text":122019},{"id":122034,"depth":1387,"text":122035},{"id":122331,"depth":92,"text":122332},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122002,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122357,"title":122358,"body":122359,"description":257,"extension":258,"meta":125658,"navigation":260,"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-其他操作",[14,122365,122367],{"id":122366},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122369,122370],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122372,122373,122374,122377],{},"进入工控机的硬盘目录，进入",[65,122375,122376],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[58,122379,122383],{"className":122380,"code":122381,"language":122382,"meta":63,"style":63},"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",[65,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":63},[68,122386,122387,122390],{"class":70,"line":71},[68,122388,122389],{"class":51501},"network",[68,122391,122392],{"class":335},": \n",[68,122394,122395,122398,122400,122402],{"class":70,"line":92},[68,122396,122397],{"class":51501},"  version",[68,122399,51638],{"class":335},[68,122401,412],{"class":82},[68,122403,2880],{"class":335},[68,122405,122406,122409],{"class":70,"line":1387},[68,122407,122408],{"class":51501},"  wifis",[68,122410,122392],{"class":335},[68,122412,122413,122416],{"class":70,"line":1402},[68,122414,122415],{"class":51501},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[68,122417,122392],{"class":335},[68,122419,122420,122423,122425,122428],{"class":70,"line":1408},[68,122421,122422],{"class":51501},"      renderer",[68,122424,51638],{"class":335},[68,122426,122427],{"class":78},"NetworkManager",[68,122429,2880],{"class":335},[68,122431,122432,122435],{"class":70,"line":1422},[68,122433,122434],{"class":51501},"      match",[68,122436,122392],{"class":335},[68,122438,122439,122442,122444,122447],{"class":70,"line":1428},[68,122440,122441],{"class":51501},"        name",[68,122443,51638],{"class":335},[68,122445,122446],{"class":78},"\"wlan0\"",[68,122448,2880],{"class":335},[68,122450,122451,122454,122456,122458],{"class":70,"line":1519},[68,122452,122453],{"class":51501},"      dhcp4",[68,122455,51638],{"class":335},[68,122457,1570],{"class":82},[68,122459,2880],{"class":335},[68,122461,122462,122465,122467,122469],{"class":70,"line":1525},[68,122463,122464],{"class":51501},"      dhcp6",[68,122466,51638],{"class":335},[68,122468,1570],{"class":82},[68,122470,2880],{"class":335},[68,122472,122473,122476],{"class":70,"line":1537},[68,122474,122475],{"class":51501},"      access-points",[68,122477,122392],{"class":335},[68,122479,122480,122483],{"class":70,"line":1819},[68,122481,122482],{"class":78},"        \"EMIS_Vinci_Robocon_5G\"",[68,122484,122392],{"class":335},[68,122486,122487,122490],{"class":70,"line":1824},[68,122488,122489],{"class":51501},"          auth",[68,122491,122392],{"class":335},[68,122493,122494,122497,122499,122502],{"class":70,"line":1830},[68,122495,122496],{"class":51501},"            key-management",[68,122498,51638],{"class":335},[68,122500,122501],{"class":78},"\"psk\"",[68,122503,2880],{"class":335},[68,122505,122506,122509,122511,122514],{"class":70,"line":1835},[68,122507,122508],{"class":51501},"            password",[68,122510,51638],{"class":335},[68,122512,122513],{"class":78},"\"vinci666\"",[68,122515,2880],{"class":335},[68,122517,122518,122521],{"class":70,"line":1849},[68,122519,122520],{"class":51501},"          networkmanager",[68,122522,122392],{"class":335},[68,122524,122525,122528,122530,122533],{"class":70,"line":1854},[68,122526,122527],{"class":51501},"            uuid",[68,122529,51638],{"class":335},[68,122531,122532],{"class":78},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[68,122534,2880],{"class":335},[68,122536,122537,122540,122542,122545],{"class":70,"line":1860},[68,122538,122539],{"class":51501},"            name",[68,122541,51638],{"class":335},[68,122543,122544],{"class":78},"\"EMIS_Vinci_Robocon_5G\"",[68,122546,2880],{"class":335},[68,122548,122549,122552],{"class":70,"line":1881},[68,122550,122551],{"class":51501},"            passthrough",[68,122553,122392],{"class":335},[68,122555,122556,122559,122561,122564],{"class":70,"line":1886},[68,122557,122558],{"class":51501},"              wifi-security.auth-alg",[68,122560,51638],{"class":335},[68,122562,122563],{"class":78},"\"open\"",[68,122565,2880],{"class":335},[68,122567,122568,122571,122573,122576],{"class":70,"line":1900},[68,122569,122570],{"class":51501},"              ipv6.addr-gen-mode",[68,122572,51638],{"class":335},[68,122574,122575],{"class":78},"\"default\"",[68,122577,2880],{"class":335},[68,122579,122580,122583,122585,122588],{"class":70,"line":1905},[68,122581,122582],{"class":51501},"              ipv6.ip6-privacy",[68,122584,51638],{"class":335},[68,122586,122587],{"class":78},"\"-1\"",[68,122589,2880],{"class":335},[68,122591,122592,122595,122597,122599],{"class":70,"line":1934},[68,122593,122594],{"class":51501},"              proxy._",[68,122596,51638],{"class":335},[68,122598,7857],{"class":78},[68,122600,2880],{"class":335},[68,122602,122603,122606],{"class":70,"line":1939},[68,122604,122605],{"class":51501},"      networkmanager",[68,122607,122392],{"class":335},[68,122609,122610,122613,122615,122617],{"class":70,"line":1956},[68,122611,122612],{"class":51501},"        uuid",[68,122614,51638],{"class":335},[68,122616,122532],{"class":78},[68,122618,2880],{"class":335},[68,122620,122621,122623,122625],{"class":70,"line":1961},[68,122622,122441],{"class":51501},[68,122624,51638],{"class":335},[68,122626,122627],{"class":78},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122629,122630],{},"将其改为新wifi的名和密码：",[58,122632,122634],{"className":122380,"code":122633,"language":122382,"meta":63,"style":63},"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",[65,122635,122636,122642,122651,122657,122664,122673,122681,122687,122693],{"__ignoreMap":63},[68,122637,122638,122640],{"class":70,"line":71},[68,122639,122389],{"class":51501},[68,122641,3945],{"class":335},[68,122643,122644,122646,122648],{"class":70,"line":92},[68,122645,122397],{"class":51501},[68,122647,51638],{"class":335},[68,122649,122650],{"class":82},"2\n",[68,122652,122653,122655],{"class":70,"line":1387},[68,122654,122408],{"class":51501},[68,122656,3945],{"class":335},[68,122658,122659,122662],{"class":70,"line":1402},[68,122660,122661],{"class":51501},"    wlan0",[68,122663,3945],{"class":335},[68,122665,122666,122668,122670],{"class":70,"line":1408},[68,122667,122453],{"class":51501},[68,122669,51638],{"class":335},[68,122671,122672],{"class":82},"true\n",[68,122674,122675,122677,122679],{"class":70,"line":1422},[68,122676,122464],{"class":51501},[68,122678,51638],{"class":335},[68,122680,122672],{"class":82},[68,122682,122683,122685],{"class":70,"line":1428},[68,122684,122475],{"class":51501},[68,122686,3945],{"class":335},[68,122688,122689,122691],{"class":70,"line":1519},[68,122690,122482],{"class":78},[68,122692,3945],{"class":335},[68,122694,122695,122698,122700],{"class":70,"line":1525},[68,122696,122697],{"class":51501},"          password",[68,122699,51638],{"class":335},[68,122701,122702],{"class":78},"\"vinci666\"\n",[19,122704,122705],{},"工控机开机即可连上网。",[14,122707,122709],{"id":122708},"_72-ssh远程开发","7.2 SSH远程开发",[301,122711,122713],{"id":122712},"_721-环境准备","7.2.1 环境准备",[19,122715,122716],{},[483,122717,122718],{},"1.硬件准备",[19,122720,122721],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122723,122724],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122726,122727],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122729,122730],{},[483,122731,122732],{},"2.设置固定IP",[19,122734,122735],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122737,122738],{},"1.进入设置界面",[19,122740,122741],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122743,122744],{},[48,122745],{"alt":63,"src":122746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122748,122749],{},"2.配置所连接的网络",[19,122751,122752],{},[48,122753],{"alt":63,"src":122754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122756,122757],{},"3.设置固定IP",[19,122759,122760],{},"查看当前IP地址。",[19,122762,122763],{},[48,122764],{"alt":63,"src":122765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122767,122768],{},"设置固定IP。",[19,122770,122771],{},[48,122772],{"alt":63,"src":122773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122775,122776],{},"至此，IP配置完毕。",[301,122778,122780],{"id":122779},"_722-环境搭建","7.2.2 环境搭建",[19,122782,122783],{},[483,122784,25957],{},[19,122786,122787],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122789,122790],{},[483,122791,122792],{},"实现",[19,122794,122795],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[23,122797,122798,122801,122804,122807],{},[26,122799,122800],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[26,122802,122803],{},"远程主机启动SSH服务；",[26,122805,122806],{},"本地主机登陆远程主机；",[26,122808,122809],{},"实现数据传输。",[19,122811,122812],{},"1.安装SSH客户端与服务端",[19,122814,122815],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[58,122817,122819],{"className":121013,"code":122818,"language":121015,"meta":121016,"style":63}," sudo apt install openssh-server\n",[65,122820,122821],{"__ignoreMap":63},[68,122822,122823],{"class":70,"line":71},[68,122824,122818],{},[19,122826,122827],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[58,122829,122831],{"className":121013,"code":122830,"language":121015,"meta":121016,"style":63},"sudo apt install openssh-client\n",[65,122832,122833],{"__ignoreMap":63},[68,122834,122835],{"class":70,"line":71},[68,122836,122830],{},[19,122838,122839],{},"2.远程主机启动SSH服务",[19,122841,122842],{},"远程主机启动 ssh 服务命令如下：",[58,122844,122846],{"className":121013,"code":122845,"language":121015,"meta":121016,"style":63},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[65,122847,122848],{"__ignoreMap":63},[68,122849,122850],{"class":70,"line":71},[68,122851,122845],{},[19,122853,122854],{},"启动后可使用如下命令查看服务是否正常运行：",[58,122856,122858],{"className":121013,"code":122857,"language":121015,"meta":121016,"style":63},"ps -e | grep ssh\n",[65,122859,122860],{"__ignoreMap":63},[68,122861,122862],{"class":70,"line":71},[68,122863,122857],{},[19,122865,122866],{},"如果启动成功，会包含 sshd 程序。",[19,122868,122869],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[58,122871,122873],{"className":121013,"code":122872,"language":121015,"meta":121016,"style":63},"sudo systemctl enable ssh\n",[65,122874,122875],{"__ignoreMap":63},[68,122876,122877],{"class":70,"line":71},[68,122878,122872],{},[19,122880,122881],{},"3.本地远程登录",[19,122883,122884],{},"登录远程主机可以调用如下命令:",[58,122886,122888],{"className":60,"code":122887,"language":62,"meta":63,"style":63},"ssh -X 用户名@ip地址\n",[65,122889,122890],{"__ignoreMap":63},[68,122891,122892,122894,122897],{"class":70,"line":71},[68,122893,121844],{"class":74},[68,122895,122896],{"class":82}," -X",[68,122898,122899],{"class":78}," 用户名@ip地址\n",[19,122901,122902],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122904,122905],{},"如果退出，可以调用exit命令：",[58,122907,122909],{"className":121013,"code":122908,"language":121015,"meta":121016,"style":63},"exit\n",[65,122910,122911],{"__ignoreMap":63},[68,122912,122913],{"class":70,"line":71},[68,122914,122908],{},[19,122916,122917],{},[483,122918,122919],{},"4.实现数据传输",[19,122921,122922],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122924,122925],{},"上传文件指令格式如下：",[58,122927,122929],{"className":121013,"code":122928,"language":121015,"meta":121016,"style":63},"scp 本地文件路径 账号@ip:路径\n",[65,122930,122931],{"__ignoreMap":63},[68,122932,122933],{"class":70,"line":71},[68,122934,122928],{},[19,122936,122937],{},"上传文件夹指令格式如下：",[58,122939,122941],{"className":121013,"code":122940,"language":121015,"meta":121016,"style":63},"scp -r 本地文件夹路径 账号@ip:路径\n",[65,122942,122943],{"__ignoreMap":63},[68,122944,122945],{"class":70,"line":71},[68,122946,122940],{},[19,122948,122949],{},"下载文件指令格式如下：",[58,122951,122953],{"className":121013,"code":122952,"language":121015,"meta":121016,"style":63},"scp 账号@ip:路径 本地文件夹路径\n",[65,122954,122955],{"__ignoreMap":63},[68,122956,122957],{"class":70,"line":71},[68,122958,122952],{},[19,122960,122961],{},"下载文件夹指令格式如下：",[58,122963,122965],{"className":121013,"code":122964,"language":121015,"meta":121016,"style":63},"scp -r 账号@ip:路径 本地文件夹路径\n",[65,122966,122967],{"__ignoreMap":63},[68,122968,122969],{"class":70,"line":71},[68,122970,122964],{},[19,122972,122973],{},[483,122974,122975],{},"优化",[19,122977,122978],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[23,122980,122981,122984],{},[26,122982,122983],{},"本地生成密钥对；",[26,122985,122986],{},"将公钥上传至远程主机。",[19,122988,122989],{},[483,122990,122991],{},"1.生成密钥对",[19,122993,122994],{},"本地客户端生成公私钥：（一路回车默认即可）",[58,122996,122998],{"className":121013,"code":122997,"language":121015,"meta":121016,"style":63},"ssh-keygen\n",[65,122999,123000],{"__ignoreMap":63},[68,123001,123002],{"class":70,"line":71},[68,123003,122997],{},[19,123005,123006],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[23,123008,123009,123012],{},[26,123010,123011],{},"id_rsa （私钥）；",[26,123013,123014],{},"id_rsa.pub (公钥)。",[19,123016,123017],{},[483,123018,123019],{},"2.公钥上传",[19,123021,123022],{},"上传指令如下：",[58,123024,123026],{"className":121013,"code":123025,"language":121015,"meta":121016,"style":63},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[65,123027,123028],{"__ignoreMap":63},[68,123029,123030],{"class":70,"line":71},[68,123031,123025],{},[19,123033,123034],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123036,123037],{},"以后再远程登录就无需录入密码了。",[301,123039,123041],{"id":123040},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123043,123044],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123046,123047],{},[483,123048,123049],{},"1.准备工作",[19,123051,123052],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123054,123055],{},[483,123056,123057],{},"2.为VScode安装远程开发插件",[19,123059,123060,123061,123064,123065,123068,123069,28588],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[65,123062,123063],{},"扩展：商店","的搜索栏输入",[65,123066,123067],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[65,123070,123071],{},"安装",[19,123073,123074],{},[48,123075],{"alt":63,"src":123076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123078,123079],{},[483,123080,123081],{},"3.配置远程连接",[19,123083,123084,123085,123088,123089,123092],{},"步骤1：使用快捷键",[65,123086,123087],{},"ctrl + shift + p","打开命令输入窗口，并输入",[65,123090,123091],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123094,123095],{},[48,123096],{"alt":63,"src":123097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123099,123100,123101,28588],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[65,123102,123103],{},"Add New SSH Host",[19,123105,123106],{},[48,123107],{"alt":63,"src":123108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123110,123111,123112,123115,123116,123119,123120,123123],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[65,123113,123114],{},"ssh +X ubuntu@192.168.43.164","，其中，",[65,123117,123118],{},"ubuntu","需要替换为你的登录用户名，",[65,123121,123122],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123125,123126],{},[48,123127],{"alt":63,"src":123128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123130,123131],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123133,123134],{},[48,123135],{"alt":63,"src":123136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123138,123139],{},[48,123140],{"alt":63,"src":123141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123143,123144],{},[483,123145,123146],{},"4.使用",[19,123148,123149,123150,123088,123152,123154],{},"步骤1：继续使用快捷键",[65,123151,123087],{},[65,123153,123091],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123156,123157],{},[48,123158],{"alt":63,"src":123159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123161,123162,123163,123166],{},"或者，也可以点击侧边栏的",[65,123164,123165],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123168,123169],{},[48,123170],{"alt":63,"src":123171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123173,123174,123175,123178,123179,123182],{},"步骤2：选择菜单栏的",[65,123176,123177],{},"文件","下的",[65,123180,123181],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123184,123185],{},[48,123186],{"alt":63,"src":123187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123189,123190],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123192,123194],{"id":123193},"_73-远程桌面","7.3 远程桌面",[19,123196,123197],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123199,123200],{},"我们选择使用VNC来看。",[23,123202,123203],{},[26,123204,123205],{},"安装VNC服务器：",[19,123207,123208],{},"这里以TigerVNC为例进行安装：",[58,123210,123212],{"className":60,"code":123211,"language":62,"meta":63,"style":63},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[65,123213,123214],{"__ignoreMap":63},[68,123215,123216,123218,123220,123222,123225],{"class":70,"line":71},[68,123217,24780],{"class":74},[68,123219,117515],{"class":78},[68,123221,24039],{"class":78},[68,123223,123224],{"class":78}," tigervnc-standalone-server",[68,123226,123227],{"class":78}," tigervnc-common\n",[23,123229,123230],{"start":92},[26,123231,123232],{},"设置VNC密码：",[19,123234,123235],{},"为VNC用户设置密码，运行以下命令：",[58,123237,123239],{"className":60,"code":123238,"language":62,"meta":63,"style":63},"vncpasswd\n",[65,123240,123241],{"__ignoreMap":63},[68,123242,123243],{"class":70,"line":71},[68,123244,123238],{"class":74},[23,123246,123247],{"start":1387},[26,123248,123249],{},"配置VNC启动脚本:",[19,123251,123252],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[58,123254,123256],{"className":60,"code":123255,"language":62,"meta":63,"style":63},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[65,123257,123258,123267],{"__ignoreMap":63},[68,123259,123260,123262,123264],{"class":70,"line":71},[68,123261,101466],{"class":74},[68,123263,29417],{"class":82},[68,123265,123266],{"class":78}," ~\u002F.vnc\n",[68,123268,123269,123272],{"class":70,"line":92},[68,123270,123271],{"class":74},"nano",[68,123273,123274],{"class":78}," ~\u002F.vnc\u002Fxstartup\n",[19,123276,123277],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[58,123279,123281],{"className":60,"code":123280,"language":62,"meta":63,"style":63},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[65,123282,123283,123288,123296,123303],{"__ignoreMap":63},[68,123284,123285],{"class":70,"line":71},[68,123286,123287],{"class":393},"#!\u002Fbin\u002Fsh\n",[68,123289,123290,123293],{"class":70,"line":92},[68,123291,123292],{"class":82},"unset",[68,123294,123295],{"class":78}," SESSION_MANAGER\n",[68,123297,123298,123300],{"class":70,"line":1387},[68,123299,123292],{"class":82},[68,123301,123302],{"class":78}," DBUS_SESSION_BUS_ADDRESS\n",[68,123304,123305],{"class":70,"line":1402},[68,123306,123307],{"class":74},"gnome-session\n",[19,123309,123310],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[23,123312,123313],{"start":1402},[26,123314,123315],{},"给予执行权限：",[19,123317,123318],{},"为xstartup文件设置执行权限：",[58,123320,123322],{"className":60,"code":123321,"language":62,"meta":63,"style":63},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[65,123323,123324],{"__ignoreMap":63},[68,123325,123326,123328,123331],{"class":70,"line":71},[68,123327,24815],{"class":74},[68,123329,123330],{"class":78}," +x",[68,123332,123274],{"class":78},[23,123334,123335],{"start":1408},[26,123336,123337],{},"启动VNC服务器：",[58,123339,123341],{"className":60,"code":123340,"language":62,"meta":63,"style":63},"vncserver -geometry 1920x1080 -localhost=0\n",[65,123342,123343],{"__ignoreMap":63},[68,123344,123345,123348,123351,123354],{"class":70,"line":71},[68,123346,123347],{"class":74},"vncserver",[68,123349,123350],{"class":82}," -geometry",[68,123352,123353],{"class":78}," 1920x1080",[68,123355,123356],{"class":82}," -localhost=0\n",[19,123358,123359],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123361,123362],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[23,123364,123365],{"start":1422},[26,123366,123367],{},"查看已开启的VNC服务器：",[58,123369,123371],{"className":60,"code":123370,"language":62,"meta":63,"style":63},"vncserver -list\n",[65,123372,123373],{"__ignoreMap":63},[68,123374,123375,123377],{"class":70,"line":71},[68,123376,123347],{"class":74},[68,123378,123379],{"class":82}," -list\n",[19,123381,123382],{},[48,123383],{"alt":63,"src":123384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[23,123386,123387],{"start":1428},[26,123388,123389],{},"连接到VNC服务器：",[19,123391,123392],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[23,123394,123395],{"start":1519},[26,123396,123397],{},"停止VNC服务器：",[19,123399,123400],{},"如果需要停止VNC服务器，可以使用以下命令：",[58,123402,123404],{"className":60,"code":123403,"language":62,"meta":63,"style":63},"vncserver -kill :1\n",[65,123405,123406],{"__ignoreMap":63},[68,123407,123408,123410,123413],{"class":70,"line":71},[68,123409,123347],{"class":74},[68,123411,123412],{"class":82}," -kill",[68,123414,123415],{"class":78}," :1\n",[19,123417,123418],{},"将:1替换为你实际使用的显示编号。",[19,123420,123421],{},[48,123422],{"alt":63,"src":123423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123425,123426],{},[48,123427],{"alt":63,"src":123428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123430,123432],{"id":123431},"_74-usb端口设置","7.4 USB端口设置",[19,123434,123435],{},[483,123436,123437],{},"首先先配置好权限",[58,123439,123441],{"className":60,"code":123440,"language":62,"meta":63,"style":63},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[65,123442,123443,123448,123461,123468,123473],{"__ignoreMap":63},[68,123444,123445],{"class":70,"line":71},[68,123446,123447],{"class":393},"# 将用户权限提高\n",[68,123449,123450,123452,123454,123456,123459],{"class":70,"line":92},[68,123451,24780],{"class":74},[68,123453,26778],{"class":78},[68,123455,26781],{"class":82},[68,123457,123458],{"class":78}," dialout",[68,123460,26786],{"class":335},[68,123462,123463,123465],{"class":70,"line":1387},[68,123464,26805],{"class":74},[68,123466,123467],{"class":78}," dialout\n",[68,123469,123470],{"class":70,"line":1402},[68,123471,123472],{"class":393},"# 查看下面命令是否输出dialout（若输出才正常）\n",[68,123474,123475],{"class":70,"line":1408},[68,123476,123477],{"class":74},"groups\n",[19,123479,123480],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[301,123482,123484],{"id":123483},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123486,123487,123490],{},[483,123488,123489],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123492,123493,123496],{},[483,123494,123495],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123498,123499],{},[483,123500,123501],{},"流程如下：",[19,123503,123504],{},"（1）.查找设备idVendor和idProduct",[19,123506,123507,123508,123511],{},"接入两个USB设备，在终端调用指令",[65,123509,123510],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123513,123514],{},[48,123515],{"alt":63,"src":123516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123518,123519,123520,123523],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[65,123521,123522],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123525,123526],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123528,123529],{},"（2）.编写映射规则",[19,123531,123532,123533,123536],{},"在",[65,123534,123535],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[58,123538,123540],{"className":60,"code":123539,"language":62,"meta":63,"style":63},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[65,123541,123542],{"__ignoreMap":63},[68,123543,123544,123546,123548],{"class":70,"line":71},[68,123545,24780],{"class":74},[68,123547,118781],{"class":78},[68,123549,123550],{"class":78}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123552,123553],{},"输入如下内容：",[58,123555,123557],{"className":60,"code":123556,"language":62,"meta":63,"style":63},"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",[65,123558,123559,123589],{"__ignoreMap":63},[68,123560,123561,123564,123566,123569,123572,123575,123578,123580,123583,123586],{"class":70,"line":71},[68,123562,123563],{"class":335},"KERNEL",[68,123565,381],{"class":331},[68,123567,123568],{"class":78},"=\"ttyUSB*\",",[68,123570,123571],{"class":74}," ATTRS",[68,123573,123574],{"class":78},"{idVendor}==",[68,123576,123577],{"class":74},"\"10c4\"",[68,123579,711],{"class":74},[68,123581,123582],{"class":78}," ATTRS{idProduct}==\"ea60\",",[68,123584,123585],{"class":78}," MODE:=\"0777\",",[68,123587,123588],{"class":78}," SYMLINK+=\"mylidar\"\n",[68,123590,123591,123593,123595,123597,123599,123601,123604,123606,123609,123611],{"class":70,"line":92},[68,123592,123563],{"class":335},[68,123594,381],{"class":331},[68,123596,123568],{"class":78},[68,123598,123571],{"class":74},[68,123600,123574],{"class":78},[68,123602,123603],{"class":74},"\"1a86\"",[68,123605,711],{"class":74},[68,123607,123608],{"class":78}," ATTRS{idProduct}==\"7523\",",[68,123610,123585],{"class":78},[68,123612,123613],{"class":78}," SYMLINK+=\"mycar\"\n",[19,123615,123616],{},"代码解释：",[42,123618,123619,123622,123625,123628],{},[26,123620,123621],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[26,123623,123624],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[26,123626,123627],{},"SYMLINK是符号连接，即绑定的别名；",[26,123629,123630],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123632,123633,123634,123637,123640],{},"***小提示：***",[23758,123635,123636],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[65,123638,123639],{},"\u002Fetc\u002Fudev\u002Frule.d",[23758,123641,123642],{},"目录即可。",[19,123644,123645],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123647,123648],{},"（3）.使规则生效",[19,123650,123651],{},"在终端下输入如下指令：",[58,123653,123655],{"className":60,"code":123654,"language":62,"meta":63,"style":63},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[65,123656,123657,123662,123674,123685,123689,123694,123707],{"__ignoreMap":63},[68,123658,123659],{"class":70,"line":71},[68,123660,123661],{"class":393},"# Ubuntu用下方命令\n",[68,123663,123664,123666,123668,123671],{"class":70,"line":92},[68,123665,24780],{"class":74},[68,123667,120245],{"class":78},[68,123669,123670],{"class":78}," udev",[68,123672,123673],{"class":78}," reload\n",[68,123675,123676,123678,123680,123682],{"class":70,"line":1387},[68,123677,24780],{"class":74},[68,123679,120245],{"class":78},[68,123681,123670],{"class":78},[68,123683,123684],{"class":78}," restart\n",[68,123686,123687],{"class":70,"line":1402},[68,123688,2606],{"emptyLinePlaceholder":260},[68,123690,123691],{"class":70,"line":1408},[68,123692,123693],{"class":393},"#Fedora用下方命令\n",[68,123695,123696,123698,123701,123704],{"class":70,"line":1422},[68,123697,24780],{"class":74},[68,123699,123700],{"class":78}," udevadm",[68,123702,123703],{"class":78}," control",[68,123705,123706],{"class":82}," --reload\n",[68,123708,123709,123711,123713],{"class":70,"line":1428},[68,123710,24780],{"class":74},[68,123712,123700],{"class":78},[68,123714,123715],{"class":78}," trigger\n",[19,123717,123718],{},"再重新插拔设备即可。",[19,123720,123721],{},"（4）.测试",[19,123723,123724],{},"终端下输入如下指令",[58,123726,123728],{"className":60,"code":123727,"language":62,"meta":63,"style":63},"ll \u002Fdev | grep ttyUSB\n",[65,123729,123730],{"__ignoreMap":63},[68,123731,123732,123735,123738,123740,123742],{"class":70,"line":71},[68,123733,123734],{"class":74},"ll",[68,123736,123737],{"class":78}," \u002Fdev",[68,123739,25313],{"class":331},[68,123741,30437],{"class":74},[68,123743,123744],{"class":78}," ttyUSB\n",[19,123746,123747],{},"运行结果如下：",[19,123749,123750],{},[48,123751],{"alt":63,"src":123752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123754,123755,123756,123759],{},"也可以多次插拔USB设备，会发现设备端口",[65,123757,123758],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123761,123762],{},[483,123763,118162],{},[19,123765,123766],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[301,123768,123770],{"id":123769},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123772,123773,123775],{},[483,123774,123489],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123777,123778,123780],{},[483,123779,123495],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123782,123783],{},[483,123784,123501],{},[19,123786,123787],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123789,123790],{},"调用如下指令查看第一台雷达的USB信息：",[58,123792,123794],{"className":60,"code":123793,"language":62,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[65,123795,123796,123816],{"__ignoreMap":63},[68,123797,123798,123801,123803,123806,123809,123811,123813],{"class":70,"line":71},[68,123799,123800],{"class":74},"udevadm",[68,123802,70022],{"class":78},[68,123804,123805],{"class":82}," --attribute-walk",[68,123807,123808],{"class":82}," --name=\u002Fdev\u002FttyUSB0",[68,123810,25313],{"class":331},[68,123812,30437],{"class":74},[68,123814,123815],{"class":78}," KERNELS\n",[68,123817,123818,123820,123822,123824,123827,123829,123831],{"class":70,"line":92},[68,123819,123800],{"class":74},[68,123821,70022],{"class":78},[68,123823,123805],{"class":82},[68,123825,123826],{"class":82}," --name=\u002Fdev\u002FttyACM0",[68,123828,25313],{"class":331},[68,123830,30437],{"class":74},[68,123832,123815],{"class":78},[19,123834,123835],{},[48,123836],{"alt":63,"src":123837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123839,123840],{},"调用如下指令查看第二台雷达的USB信息：",[58,123842,123844],{"className":60,"code":123843,"language":62,"meta":63,"style":63},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[65,123845,123846],{"__ignoreMap":63},[68,123847,123848,123850,123852,123854,123857,123859,123861],{"class":70,"line":71},[68,123849,123800],{"class":74},[68,123851,70022],{"class":78},[68,123853,123805],{"class":82},[68,123855,123856],{"class":82}," --name=\u002Fdev\u002FttyUSB1",[68,123858,25313],{"class":331},[68,123860,30437],{"class":74},[68,123862,123815],{"class":78},[19,123864,123865,123866,123869,123870,123873,123874,123877],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[65,123867,123868],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[65,123871,123872],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[483,123875,123876],{},"唯一性标识","”。",[19,123879,123529],{},[19,123881,123532,123882,123884],{},[65,123883,123535],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[58,123886,123887],{"className":60,"code":123539,"language":62,"meta":63,"style":63},[65,123888,123889],{"__ignoreMap":63},[68,123890,123891,123893,123895],{"class":70,"line":71},[68,123892,24780],{"class":74},[68,123894,118781],{"class":78},[68,123896,123550],{"class":78},[58,123898,123900],{"className":60,"code":123899,"language":62,"meta":63,"style":63},"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",[65,123901,123902,123931],{"__ignoreMap":63},[68,123903,123904,123906,123908,123910,123913,123915,123918,123921,123923,123926,123928],{"class":70,"line":71},[68,123905,123563],{"class":335},[68,123907,381],{"class":331},[68,123909,123568],{"class":78},[68,123911,123912],{"class":335}," KERNELS",[68,123914,381],{"class":331},[68,123916,123917],{"class":78},"=\"1-1.3:1.0\",",[68,123919,123920],{"class":74}," MODE:",[68,123922,381],{"class":78},[68,123924,123925],{"class":74},"\"0777\"",[68,123927,711],{"class":74},[68,123929,123930],{"class":78}," SYMLINK+=\"rplidar_front\"\n",[68,123932,123933,123935,123937,123939,123941,123943,123946,123948,123950,123952,123954],{"class":70,"line":92},[68,123934,123563],{"class":335},[68,123936,381],{"class":331},[68,123938,123568],{"class":78},[68,123940,123912],{"class":335},[68,123942,381],{"class":331},[68,123944,123945],{"class":78},"=\"1-1.4:1.0\",",[68,123947,123920],{"class":74},[68,123949,381],{"class":78},[68,123951,123925],{"class":74},[68,123953,711],{"class":74},[68,123955,123956],{"class":78}," SYMLINK+=\"rplidar_back\"\n",[19,123958,123648],{},[19,123960,123651],{},[58,123962,123963],{"className":60,"code":123654,"language":62,"meta":63,"style":63},[65,123964,123965,123969,123979,123989,123993,123997,124007],{"__ignoreMap":63},[68,123966,123967],{"class":70,"line":71},[68,123968,123661],{"class":393},[68,123970,123971,123973,123975,123977],{"class":70,"line":92},[68,123972,24780],{"class":74},[68,123974,120245],{"class":78},[68,123976,123670],{"class":78},[68,123978,123673],{"class":78},[68,123980,123981,123983,123985,123987],{"class":70,"line":1387},[68,123982,24780],{"class":74},[68,123984,120245],{"class":78},[68,123986,123670],{"class":78},[68,123988,123684],{"class":78},[68,123990,123991],{"class":70,"line":1402},[68,123992,2606],{"emptyLinePlaceholder":260},[68,123994,123995],{"class":70,"line":1408},[68,123996,123693],{"class":393},[68,123998,123999,124001,124003,124005],{"class":70,"line":1422},[68,124000,24780],{"class":74},[68,124002,123700],{"class":78},[68,124004,123703],{"class":78},[68,124006,123706],{"class":82},[68,124008,124009,124011,124013],{"class":70,"line":1428},[68,124010,24780],{"class":74},[68,124012,123700],{"class":78},[68,124014,123715],{"class":78},[19,124016,123718],{},[19,124018,123721],{},[19,124020,123724,124021,124024],{},[65,124022,124023],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124026,124027],{},[48,124028],{"alt":63,"src":124029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124031,124032],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124034,124035,124037],{},[483,124036,118162],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[301,124039,124041],{"id":124040},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124043,124044],{},"（1）.查看所连接的主机USB接口的信息",[58,124046,124048],{"className":60,"code":124047,"language":62,"meta":63,"style":63},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[65,124049,124050,124080],{"__ignoreMap":63},[68,124051,124052,124054,124056,124059,124061,124063,124065,124067,124070,124073,124075,124078],{"class":70,"line":71},[68,124053,123800],{"class":74},[68,124055,70022],{"class":78},[68,124057,124058],{"class":82}," -a",[68,124060,29417],{"class":82},[68,124062,28625],{"class":335},[68,124064,123800],{"class":74},[68,124066,70022],{"class":78},[68,124068,124069],{"class":82}," -q",[68,124071,124072],{"class":78}," path",[68,124074,25319],{"class":82},[68,124076,124077],{"class":78}," \u002Fdev\u002FttyACM0",[68,124079,342],{"class":335},[68,124081,124082,124084,124086,124088,124090,124092,124094,124096,124098,124100,124102,124105],{"class":70,"line":92},[68,124083,123800],{"class":74},[68,124085,70022],{"class":78},[68,124087,124058],{"class":82},[68,124089,29417],{"class":82},[68,124091,28625],{"class":335},[68,124093,123800],{"class":74},[68,124095,70022],{"class":78},[68,124097,124069],{"class":82},[68,124099,124072],{"class":78},[68,124101,25319],{"class":82},[68,124103,124104],{"class":78}," \u002Fdev\u002FttyUSB0",[68,124106,342],{"class":335},[19,124108,124109],{},[48,124110],{"alt":63,"src":124111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124113,124114],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124116,123529],{},[19,124118,123532,124119,123884],{},[65,124120,123535],{},[58,124122,124123],{"className":60,"code":123539,"language":62,"meta":63,"style":63},[65,124124,124125],{"__ignoreMap":63},[68,124126,124127,124129,124131],{"class":70,"line":71},[68,124128,24780],{"class":74},[68,124130,118781],{"class":78},[68,124132,123550],{"class":78},[58,124134,124136],{"className":60,"code":124135,"language":62,"meta":63,"style":63},"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",[65,124137,124138,124166,124192],{"__ignoreMap":63},[68,124139,124140,124142,124144,124147,124149,124151,124153,124155,124158,124161,124163],{"class":70,"line":71},[68,124141,123563],{"class":335},[68,124143,381],{"class":331},[68,124145,124146],{"class":78},"=\"ttyACM*\",",[68,124148,123571],{"class":74},[68,124150,123574],{"class":78},[68,124152,123603],{"class":74},[68,124154,711],{"class":74},[68,124156,124157],{"class":78}," ATTRS{idProduct}==\"55d4\",",[68,124159,124160],{"class":78}," ATTRS{serial}==\"0001\",",[68,124162,123585],{"class":78},[68,124164,124165],{"class":78}," SYMLINK+=\"ttyACM_MCU\"\n",[68,124167,124168,124170,124172,124174,124176,124178,124180,124182,124184,124187,124189],{"class":70,"line":92},[68,124169,123563],{"class":335},[68,124171,381],{"class":331},[68,124173,124146],{"class":78},[68,124175,123571],{"class":74},[68,124177,123574],{"class":78},[68,124179,123603],{"class":74},[68,124181,711],{"class":74},[68,124183,124157],{"class":78},[68,124185,124186],{"class":78}," ATTRS{serial}==\"0002\",",[68,124188,123585],{"class":78},[68,124190,124191],{"class":78}," SYMLINK+=\"ttyACM_Lidar\"\n",[68,124193,124194,124196,124198,124200,124202,124204,124206,124208,124210,124212],{"class":70,"line":1387},[68,124195,123563],{"class":335},[68,124197,381],{"class":331},[68,124199,123568],{"class":78},[68,124201,123571],{"class":74},[68,124203,123574],{"class":78},[68,124205,123603],{"class":74},[68,124207,711],{"class":74},[68,124209,123608],{"class":78},[68,124211,123585],{"class":78},[68,124213,124214],{"class":78}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124216,123648],{},[19,124218,123651],{},[58,124220,124221],{"className":60,"code":123654,"language":62,"meta":63,"style":63},[65,124222,124223,124227,124237,124247,124251,124255,124265],{"__ignoreMap":63},[68,124224,124225],{"class":70,"line":71},[68,124226,123661],{"class":393},[68,124228,124229,124231,124233,124235],{"class":70,"line":92},[68,124230,24780],{"class":74},[68,124232,120245],{"class":78},[68,124234,123670],{"class":78},[68,124236,123673],{"class":78},[68,124238,124239,124241,124243,124245],{"class":70,"line":1387},[68,124240,24780],{"class":74},[68,124242,120245],{"class":78},[68,124244,123670],{"class":78},[68,124246,123684],{"class":78},[68,124248,124249],{"class":70,"line":1402},[68,124250,2606],{"emptyLinePlaceholder":260},[68,124252,124253],{"class":70,"line":1408},[68,124254,123693],{"class":393},[68,124256,124257,124259,124261,124263],{"class":70,"line":1422},[68,124258,24780],{"class":74},[68,124260,123700],{"class":78},[68,124262,123703],{"class":78},[68,124264,123706],{"class":82},[68,124266,124267,124269,124271],{"class":70,"line":1428},[68,124268,24780],{"class":74},[68,124270,123700],{"class":78},[68,124272,123715],{"class":78},[19,124274,124275,124276],{},"再重新插拔设备即可，或者 ",[483,124277,124278],{},"直接重启系统。",[19,124280,123721],{},[19,124282,123724,124283,124024],{},[65,124284,124023],{},[19,124286,124287],{},[48,124288],{"alt":63,"src":124289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124291,124032],{},[19,124293,124294,124296],{},[483,124295,118162],{}," 一些设备可能没有串口号等。",[301,124298,124300],{"id":124299},"_744-其他注意事项","7.4.4 其他注意事项",[19,124302,124303,124304,124306,124307,124310,124311,18615,124314,124317,124318,124320],{},"并非所有的USB设备端口号都是",[65,124305,123758],{},"的格式，比如Arduino的端口号可能是",[65,124308,124309],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[65,124312,124313],{},"videon",[65,124315,124316],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[65,124319,124313],{},"端口，绑定时需要关联的也是该接口。",[19,124322,124323,124324,124327,124328,124331,124332,124334,124335,124338,124339,124342,124343,124346,124347,124346,124350,124346,124353,28588],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[65,124325,124326],{},"KERNEL==\"ttyUSB*\"","修改为",[65,124329,124330],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[65,124333,124326],{},"修改为类似于",[65,124336,124337],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[65,124340,124341],{},"video[0,2,4,6]","表示可以绑定的端口为",[65,124344,124345],{},"video0","或",[65,124348,124349],{},"video2",[65,124351,124352],{},"video4",[65,124354,124355],{},"video6",[14,124357,124359],{"id":124358},"_75-挂载内网网页","7.5 挂载内网网页",[19,124361,124362],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124364,124365],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124367,124368],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124370,124371,124372],{},"Termux 下载地址（F-Droid）：",[30,124373,124374],{"href":124374,"rel":124375},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[34],[19,124377,124378],{},"首先打开app后，先更新软件缓存：",[58,124380,124382],{"className":60,"code":124381,"language":62,"meta":63,"style":63},"pkg update\n",[65,124383,124384],{"__ignoreMap":63},[68,124385,124386,124389],{"class":70,"line":71},[68,124387,124388],{"class":74},"pkg",[68,124390,26446],{"class":78},[19,124392,124393],{},"然后换源",[58,124395,124397],{"className":60,"code":124396,"language":62,"meta":63,"style":63},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[65,124398,124399],{"__ignoreMap":63},[68,124400,124401,124403,124406],{"class":70,"line":71},[68,124402,123271],{"class":74},[68,124404,124405],{"class":335}," $PREFIX",[68,124407,124408],{"class":78},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124410,124411],{},"将该文件内容替换为下面：",[58,124413,124415],{"className":60,"code":124414,"language":62,"meta":63,"style":63},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[65,124416,124417],{"__ignoreMap":63},[68,124418,124419,124422,124425,124428],{"class":70,"line":71},[68,124420,124421],{"class":74},"deb",[68,124423,124424],{"class":78}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[68,124426,124427],{"class":78}," stable",[68,124429,124430],{"class":78}," main\n",[42,124432,124433,124460],{},[26,124434,124435,124436,124438,124439],{},"如果你使用的是",[65,124437,123271],{},"编辑器：",[42,124440,124441,124448,124454],{},[26,124442,124443,124444,124447],{},"按 ",[65,124445,124446],{},"Ctrl+O"," 保存文件。",[26,124449,124443,124450,124453],{},[65,124451,124452],{},"Enter"," 确认文件名。",[26,124455,124443,124456,124459],{},[65,124457,124458],{},"Ctrl+X"," 退出编辑器。",[26,124461,124435,124462,124438,124465],{},[65,124463,124464],{},"vim",[42,124466,124467,124473],{},[26,124468,124443,124469,124472],{},[65,124470,124471],{},"Esc"," 退出编辑模式。",[26,124474,124475,124476,124478],{},"输入 ",[65,124477,119419],{}," 保存并退出。",[19,124480,124481],{},"接下来重新更新软件源：",[58,124483,124485],{"className":60,"code":124484,"language":62,"meta":63,"style":63},"pkg update && pkg upgrade\n",[65,124486,124487],{"__ignoreMap":63},[68,124488,124489,124491,124493,124495,124497],{"class":70,"line":71},[68,124490,124388],{"class":74},[68,124492,117545],{"class":78},[68,124494,26394],{"class":335},[68,124496,124388],{"class":74},[68,124498,117531],{"class":78},[19,124500,124501],{},"安装python：",[58,124503,124505],{"className":60,"code":124504,"language":62,"meta":63,"style":63},"pkg install python\n",[65,124506,124507],{"__ignoreMap":63},[68,124508,124509,124511,124513],{"class":70,"line":71},[68,124510,124388],{"class":74},[68,124512,24039],{"class":78},[68,124514,124515],{"class":78}," python\n",[19,124517,124518,26677],{},[483,124519,124520],{},"通过Termux访问设备存储",[19,124522,124523],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[58,124525,124527],{"className":60,"code":124526,"language":62,"meta":63,"style":63},"termux-setup-storage\n",[65,124528,124529],{"__ignoreMap":63},[68,124530,124531],{"class":70,"line":71},[68,124532,124526],{"class":74},[23,124534,124535],{},[26,124536,124537,26677,124540],{},[483,124538,124539],{},"进入HTML文件所在的目录",[23,124541,124542],{},[26,124543,124544,124545,124547],{},"使用",[65,124546,101476],{},"命令进入HTML文件所在的目录：",[58,124549,124551],{"className":60,"code":124550,"language":62,"meta":63,"style":63},"cd ~\u002Fyour_html_folder\n",[65,124552,124553],{"__ignoreMap":63},[68,124554,124555,124557],{"class":70,"line":71},[68,124556,101476],{"class":82},[68,124558,124559],{"class":78}," ~\u002Fyour_html_folder\n",[23,124561,124562],{"start":92},[26,124563,124564,26677,124567,124572,124589],{},[483,124565,124566],{},"启动Python HTTP服务器",[23,124568,124569],{},[26,124570,124571],{},"运行以下命令启动一个简单的HTTP服务器：",[58,124573,124575],{"className":60,"code":124574,"language":62,"meta":63,"style":63},"python -m http.server 8000\n",[65,124576,124577],{"__ignoreMap":63},[68,124578,124579,124581,124583,124586],{"class":70,"line":71},[68,124580,30581],{"class":74},[68,124582,161],{"class":82},[68,124584,124585],{"class":78}," http.server",[68,124587,124588],{"class":82}," 8000\n",[23,124590,124591],{"start":1387},[26,124592,124593,124594,124597],{},"这会在端口",[65,124595,124596],{},"8000","上启动一个Web服务器。",[42,124599,124600],{},[26,124601,124602],{},"启动服务器后，Termux会显示日志信息，例如：",[58,124604,124606],{"className":121013,"code":124605,"language":121015,"meta":121016,"style":63},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[65,124607,124608],{"__ignoreMap":63},[68,124609,124610],{"class":70,"line":71},[68,124611,124605],{},[42,124613,124614],{},[26,124615,124616],{},"这表示服务器已成功启动。",[19,124618,124619],{},[483,124620,124621],{},"在浏览器中访问HTML文件",[23,124623,124624],{},[26,124625,124626,26677,124629,124634],{},[483,124627,124628],{},"在同一设备上访问",[23,124630,124631],{},[26,124632,124633],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[58,124635,124638],{"className":124636,"code":124637,"language":71865,"meta":63,"style":63},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[65,124639,124640],{"__ignoreMap":63},[68,124641,124642,124645],{"class":70,"line":71},[68,124643,124644],{"class":335},"http:",[68,124646,124647],{"class":393},"\u002F\u002Flocalhost:8000\n",[42,124649,124650],{},[26,124651,124652,124653,124656],{},"如果HTML文件中有",[65,124654,124655],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124658,124660],{"id":124659},"_76-linux重点知识","7.6 Linux重点知识",[301,124662,124664],{"id":124663},"_761-关于点的说明","7.6.1 关于点的说明",[19,124666,124667],{},[48,124668],{"alt":63,"src":124669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124671,124672],{},"一点本目录，两点上目录",[301,124674,124676],{"id":124675},"_762-目录","7.6.2 目录",[22203,124678,124680],{"id":124679},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124682,124683],{},[483,124684,124685],{},"\u002Fboot:",[19,124687,124688],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124690,124691],{},[483,124692,124693],{},"\u002Fetc:",[19,124695,124696],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124698,124699],{},[483,124700,124701],{},"\u002Flib：",[19,124703,124704],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124706,124707],{},[483,124708,124709],{},"\u002Fsys:",[19,124711,124712],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22203,124714,124716],{"id":124715},"_7622-指令集合","7.6.2.2 指令集合",[19,124718,124719],{},[483,124720,124721],{},"\u002Fbin:",[19,124723,124724],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124726,124727],{},[483,124728,124729],{},"\u002Fsbin:",[19,124731,124732],{},"只有系统管理员才能使用的程序和指令",[22203,124734,124736],{"id":124735},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124738,124739],{},[483,124740,124741],{},"\u002Fdev:",[19,124743,124744],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124746,124747],{},[483,124748,124749],{},"\u002Fmedia:",[19,124751,124752],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124754,124755],{},[483,124756,124757],{},"\u002Fmnt:",[19,124759,124760],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22203,124762,124764],{"id":124763},"_7624-临时文件","7.6.2.4 临时文件",[19,124766,124767],{},[483,124768,124769],{},"\u002Frun:",[19,124771,124772],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124774,124775],{},[483,124776,124777],{},"\u002Flost+found:",[19,124779,124780],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124782,124783],{},[483,124784,124785],{},"\u002Ftmp:",[19,124787,124788],{},"这个目录是用来存放一些临时文件的",[22203,124790,124792],{"id":124791},"_7625-账户","7.6.2.5 账户",[19,124794,124795],{},[483,124796,124797],{},"\u002Froot：",[19,124799,124800],{},"系统管理员的用户主目录",[19,124802,124803,26677],{},[483,124804,124805],{},"\u002Fhome",[19,124807,124808],{},"用户的主目录，以用户的账号命名的",[19,124810,124811,26677],{},[483,124812,124813],{},"\u002Fusr",[19,124815,124816],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124818,124819],{},[483,124820,124821],{},"\u002Fusr\u002Fbin：",[19,124823,124824],{},"系统用户使用的应用程序与指令",[19,124826,124827],{},[483,124828,124829],{},"\u002Fusr\u002Fsbin：",[19,124831,124832],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124834,124835],{},[483,124836,124837],{},"\u002Fusr\u002Fsrc：",[19,124839,124840],{},"内核源代码默认的放置目录",[22203,124842,124844],{"id":124843},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124846,124847],{},[483,124848,124849],{},"\u002Fvar：",[19,124851,124852],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124854,124855],{},[483,124856,124857],{},"\u002Fproc:",[19,124859,124860,124861,124864],{},"管理 ",[483,124862,124863],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22203,124866,124868],{"id":124867},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124870,124871],{},[483,124872,124873],{},"\u002Fopt:",[19,124875,124876],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124878,124879],{},[483,124880,124881],{},"\u002Fsrv:",[19,124883,124884],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[301,124886,124888],{"id":124887},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124890,124891],{},[48,124892],{"alt":63,"src":124893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124895,124896],{},"windows-->linux:",[19,124898,124899],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124901,124902],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124904,124905],{},"linux传输文件到windows",[19,124907,124908],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[301,124910,124912],{"id":124911},"_764-易忘知识","7.6.4 易忘知识",[19,124914,124915],{},"操作系统内核查看",[58,124917,124918],{"className":60,"code":121487,"language":62,"meta":63,"style":63},[65,124919,124920],{"__ignoreMap":63},[68,124921,124922,124924],{"class":70,"line":71},[68,124923,70405],{"class":74},[68,124925,121496],{"class":82},[19,124927,124928],{},[48,124929],{"alt":63,"src":124930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124932,124933],{},[48,124934],{"alt":63,"src":124935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[58,124937,124939],{"className":60,"code":124938,"language":62,"meta":63,"style":63},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[65,124940,124941,124953],{"__ignoreMap":63},[68,124942,124943,124945,124948,124951],{"class":70,"line":71},[68,124944,121704],{"class":74},[68,124946,124947],{"class":78}," mvtest",[68,124949,124950],{"class":78}," mvtest2",[68,124952,2880],{"class":335},[68,124954,124955],{"class":70,"line":92},[68,124956,124957],{"class":74},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124959,124960],{},[48,124961],{"alt":63,"src":124962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124964,124965],{},[48,124966],{"alt":63,"src":124967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124969,124970,124971,124974],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[65,124972,124973],{},"du -a"," 可以快速查看磁盘使用细节。",[301,124976,124978],{"id":124977},"_765-vim","7.6.5 Vim",[19,124980,124981],{},[48,124982],{"alt":63,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124985,124986],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124988,124989],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124991,124992],{},[483,124993,124994],{},"1.命令模式：",[19,124996,124997],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124999,125000],{},"x 删除当前光标所在处的字符",[19,125002,125003],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125005,125006],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125008,125009],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125011,125012],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125014,125015],{},"dd 剪切当前行",[19,125017,125018],{},"yy 复制当前行",[19,125020,125021],{},"p 粘贴剪贴板内容到光标下方",[19,125023,125024],{},"P 粘贴剪贴板内容到光标上方",[19,125026,125027],{},"u 撤销上一次操作",[19,125029,125030],{},"ctrl+r 重做上一次操作",[19,125032,125033,125035],{},[1128,125034],{}," 保存文件",[19,125037,125038,125040],{},[978,125039],{}," 退出Vim编辑器",[19,125042,125043,125045],{},[978,125044],{},"! 强制退出Vim编辑器，不保存修改",[19,125047,125048],{},[483,125049,125050],{},"2.输入模式：",[19,125052,125053],{},[48,125054],{"alt":63,"src":125055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125057,125058],{},[483,125059,125060],{},"3.底线命令模式：",[19,125062,125063],{},[48,125064],{"alt":63,"src":125065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125067,125068],{},"按下esc可以退出底线命令模式",[301,125070,125072],{"id":125071},"_766-apt","7.6.6 apt",[19,125074,125075],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[301,125077,125079],{"id":125078},"_767-home与root的区别","7.6.7 home与root的区别",[19,125081,125082],{},[48,125083],{"alt":63,"src":125084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125086,125087],{},[48,125088],{"alt":63,"src":125089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125091,125092],{},[48,125093],{"alt":63,"src":125094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125096,125097],{},[48,125098],{"alt":63,"src":125099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[301,125101,125103],{"id":125102},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125105,125106],{},[30,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",[34],[23,125111,125112,125115],{},[26,125113,125114],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[26,125116,125117],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125119,125120],{},[48,125121],{"alt":63,"src":125122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125124,125125],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125127,125128],{},[48,125129],{"alt":63,"src":125130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[58,125132,125134],{"className":121013,"code":125133,"language":121015,"meta":121016,"style":63},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[65,125135,125136,125141],{"__ignoreMap":63},[68,125137,125138],{"class":70,"line":71},[68,125139,125140],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[68,125142,125143],{"class":70,"line":92},[68,125144,125145],{},".\u002Fpycharm.sh\n",[19,125147,125148],{},"3️⃣创建.desktop文件",[19,125150,125151],{},[483,125152,125153],{},"原理：",[42,125155,125156,125166],{},[26,125157,125158,125159,125165],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[483,125160,125161,125164],{},[65,125162,125163],{},".desktop"," 文件"," 来识别应用。",[26,125167,125168,125170,125171],{},[65,125169,125163],{}," 文件相当于一个“应用注册表”，告诉系统：",[42,125172,125173,125176,125179,125182,125185],{},[26,125174,125175],{},"应用名字（Name）",[26,125177,125178],{},"图标（Icon）",[26,125180,125181],{},"执行命令（Exec）",[26,125183,125184],{},"分类（Categories）",[26,125186,125187],{},"是否需要终端（Terminal）",[58,125189,125191],{"className":121013,"code":125190,"language":121015,"meta":121016,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[65,125192,125193,125198],{"__ignoreMap":63},[68,125194,125195],{"class":70,"line":71},[68,125196,125197],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[68,125199,125200],{"class":70,"line":92},[68,125201,125202],{},"nano pycharm.desktop\n",[19,125204,125205],{},"nano是一个命令行下的编辑器，也可以使用vim",[58,125207,125209],{"className":121013,"code":125208,"language":121015,"meta":121016,"style":63},"[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",[65,125210,125211,125216,125221,125226,125231,125236,125241,125246,125251,125256],{"__ignoreMap":63},[68,125212,125213],{"class":70,"line":71},[68,125214,125215],{},"[Desktop Entry]\n",[68,125217,125218],{"class":70,"line":92},[68,125219,125220],{},"Version=1.0\n",[68,125222,125223],{"class":70,"line":1387},[68,125224,125225],{},"Type=Application\n",[68,125227,125228],{"class":70,"line":1402},[68,125229,125230],{},"Name=PyCharm\n",[68,125232,125233],{"class":70,"line":1408},[68,125234,125235],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[68,125237,125238],{"class":70,"line":1422},[68,125239,125240],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[68,125242,125243],{"class":70,"line":1428},[68,125244,125245],{},"Comment=JetBrains PyCharm IDE\n",[68,125247,125248],{"class":70,"line":1519},[68,125249,125250],{},"Categories=Development;IDE;\n",[68,125252,125253],{"class":70,"line":1525},[68,125254,125255],{},"Terminal=false\n",[68,125257,125258],{"class":70,"line":1537},[68,125259,125260],{},"StartupWMClass=jetbrains-pycharm\n",[42,125262,125263,125269,125275,125281],{},[26,125264,125265,125268],{},[65,125266,125267],{},"Exec"," → 点击图标时执行的命令",[26,125270,125271,125274],{},[65,125272,125273],{},"Icon"," → 显示在菜单和桌面上的图标",[26,125276,125277,125280],{},[65,125278,125279],{},"Terminal=false"," → 不打开终端",[26,125282,125283,125286],{},[65,125284,125285],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125288,125289,125290],"blockquote",{},[19,125291,125292,125293,125295,125296],{},"可以理解成 ",[65,125294,125163],{}," 文件是 Linux 的 ",[483,125297,125298],{},"快捷方式配置文件",[19,125300,125301],{},"4️⃣设置可执行权限",[58,125303,125305],{"className":121013,"code":125304,"language":121015,"meta":121016,"style":63},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[65,125306,125307],{"__ignoreMap":63},[68,125308,125309],{"class":70,"line":71},[68,125310,125304],{},[19,125312,125313],{},"5️⃣桌面图标启动的话如下：",[58,125315,125317],{"className":121013,"code":125316,"language":121015,"meta":121016,"style":63},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[65,125318,125319,125324],{"__ignoreMap":63},[68,125320,125321],{"class":70,"line":71},[68,125322,125323],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[68,125325,125326],{"class":70,"line":92},[68,125327,125328],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[23,125330,125331],{"start":1387},[26,125332,125333],{},"下载Appimage文件实现软件的安装",[19,125335,125336],{},"1️⃣先下载appimage",[19,125338,125339],{},[30,125340,125341],{"href":125341,"rel":125342},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[34],[19,125344,125345],{},[48,125346],{"alt":63,"src":125347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125349,125350],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125352,125353],{},[48,125354],{"alt":63,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125357,125358],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125360,125361],{},[48,125362],{"alt":63,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125365,125366],{},[48,125367],{"alt":63,"src":125368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125370,125371,125372,125375],{},"3️⃣给他们放在",[65,125373,125374],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125377,125378],{},"4️⃣给软件执行权限",[58,125380,125382],{"className":121013,"code":125381,"language":121015,"meta":121016,"style":63},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[65,125383,125384,125389],{"__ignoreMap":63},[68,125385,125386],{"class":70,"line":71},[68,125387,125388],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[68,125390,125391],{"class":70,"line":92},[68,125392,125393],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125395,125396],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[58,125398,125400],{"className":60,"code":125399,"language":62,"meta":63,"style":63},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[65,125401,125402,125409,125416,125422],{"__ignoreMap":63},[68,125403,125404,125406],{"class":70,"line":71},[68,125405,101476],{"class":82},[68,125407,125408],{"class":78}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[68,125410,125411,125413],{"class":70,"line":92},[68,125412,101483],{"class":74},[68,125414,125415],{"class":78}," .\u002Fqqmusic.desktop\n",[68,125417,125418,125420],{"class":70,"line":1387},[68,125419,124464],{"class":74},[68,125421,125415],{"class":78},[68,125423,125424,125426,125428,125430],{"class":70,"line":1402},[68,125425,24780],{"class":74},[68,125427,24783],{"class":78},[68,125429,123330],{"class":78},[68,125431,125415],{"class":78},[19,125433,125434,125436],{},[65,125435,101483],{},"：一个 Linux 命令，主要功能是：",[42,125438,125439,125442],{},[26,125440,125441],{},"如果文件不存在，就创建一个新的空文件",[26,125443,125444],{},"如果文件已存在，就更新该文件的最后修改时间",[58,125446,125448],{"className":121013,"code":125447,"language":121015,"meta":121016,"style":63},"[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",[65,125449,125450,125454,125459,125464,125469,125473,125478],{"__ignoreMap":63},[68,125451,125452],{"class":70,"line":71},[68,125453,125215],{},[68,125455,125456],{"class":70,"line":92},[68,125457,125458],{},"Name=QQ音乐\n",[68,125460,125461],{"class":70,"line":1387},[68,125462,125463],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[68,125465,125466],{"class":70,"line":1402},[68,125467,125468],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[68,125470,125471],{"class":70,"line":1408},[68,125472,125225],{},[68,125474,125475],{"class":70,"line":1422},[68,125476,125477],{},"Categories=Audio;Music;Player;\n",[68,125479,125480],{"class":70,"line":1428},[68,125481,125482],{},"Comment=QQ Music Client for Linux\n",[19,125484,125485],{},"将文件复制进去",[19,125487,125488],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125490,125491],{},[48,125492],{"alt":63,"src":125493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125495,125496],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125498,125499],{},[48,125500],{"alt":63,"src":125501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125503,125504,125505,125508,125509,125512],{},"如果你用的不是KDE，那么也可以直接修改",[65,125506,125507],{},"qqmuic.desktop","：在exec的末尾加上",[65,125510,125511],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[58,125514,125516],{"className":121013,"code":125515,"language":121015,"meta":121016,"style":63},"[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",[65,125517,125518,125522,125526,125531,125535,125539,125543],{"__ignoreMap":63},[68,125519,125520],{"class":70,"line":71},[68,125521,125215],{},[68,125523,125524],{"class":70,"line":92},[68,125525,125458],{},[68,125527,125528],{"class":70,"line":1387},[68,125529,125530],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[68,125532,125533],{"class":70,"line":1402},[68,125534,125468],{},[68,125536,125537],{"class":70,"line":1408},[68,125538,125225],{},[68,125540,125541],{"class":70,"line":1422},[68,125542,125477],{},[68,125544,125545],{"class":70,"line":1428},[68,125546,125482],{},[19,125548,125549],{},[48,125550],{"alt":63,"src":125551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125553,125554],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[58,125556,125558],{"className":121013,"code":125557,"language":121015,"meta":121016,"style":63},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[65,125559,125560],{"__ignoreMap":63},[68,125561,125562],{"class":70,"line":71},[68,125563,125557],{},[23,125565,125566],{"start":1402},[26,125567,125568],{},"去Flathub上安装软件",[19,125570,125571],{},[30,125572,125573],{"href":125573,"rel":125574},"https:\u002F\u002Fflathub.org\u002F",[34],[19,125576,125577],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125579,125580],{},[48,125581],{"alt":63,"src":125582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[58,125584,125586],{"className":121013,"code":125585,"language":121015,"meta":121016,"style":63},"flatpak install flathub com.obsproject.Studio\n",[65,125587,125588],{"__ignoreMap":63},[68,125589,125590],{"class":70,"line":71},[68,125591,125585],{},[19,125593,125594],{},[48,125595],{"alt":63,"src":125596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125598,125599],{},"2️⃣运行软件",[19,125601,125602],{},"a.官方方式：",[19,125604,125605],{},[48,125606],{"alt":63,"src":125607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[58,125609,125610],{"className":121013,"code":125585,"language":121015,"meta":121016,"style":63},[65,125611,125612],{"__ignoreMap":63},[68,125613,125614],{"class":70,"line":71},[68,125615,125585],{},[19,125617,125618],{},"b.当普通软件运行：",[19,125620,125621],{},[48,125622],{"alt":63,"src":125623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125625,125626],{},[48,125627],{"alt":63,"src":125628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[250,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":63,"searchDepth":92,"depth":92,"links":125633},[125634,125635,125640,125641,125647,125648],{"id":122366,"depth":92,"text":122367},{"id":122708,"depth":92,"text":122709,"children":125636},[125637,125638,125639],{"id":122712,"depth":1387,"text":122713},{"id":122779,"depth":1387,"text":122780},{"id":123040,"depth":1387,"text":123041},{"id":123193,"depth":92,"text":123194},{"id":123431,"depth":92,"text":123432,"children":125642},[125643,125644,125645,125646],{"id":123483,"depth":1387,"text":123484},{"id":123769,"depth":1387,"text":123770},{"id":124040,"depth":1387,"text":124041},{"id":124299,"depth":1387,"text":124300},{"id":124358,"depth":92,"text":124359},{"id":124659,"depth":92,"text":124660,"children":125649},[125650,125651,125652,125653,125654,125655,125656,125657],{"id":124663,"depth":1387,"text":124664},{"id":124675,"depth":1387,"text":124676},{"id":124887,"depth":1387,"text":124888},{"id":124911,"depth":1387,"text":124912},{"id":124977,"depth":1387,"text":124978},{"id":125071,"depth":1387,"text":125072},{"id":125078,"depth":1387,"text":125079},{"id":125102,"depth":1387,"text":125103},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122358,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125664,"title":125665,"body":125666,"description":257,"extension":258,"meta":125670,"navigation":260,"path":125671,"seo":125672,"stem":125673,"__hash__":125674},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125667,"toc":125668},[],{"title":63,"searchDepth":92,"depth":92,"links":125669},[],{"category":30464},"\u002Fwiki\u002F2025-01-27-linux",{"title":125665,"description":257},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125676,"title":125677,"body":125678,"description":125682,"extension":258,"meta":126073,"navigation":260,"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],[19,125681,125682],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125684,125686],{"id":125685},"_1ubuntu环境配置","1.Ubuntu环境配置",[23,125688,125689,125692,125695,125698,125701],{},[26,125690,125691],{},"ubuntu环境换源",[26,125693,125694],{},"安装cuda",[26,125696,125697],{},"安装miniconda",[26,125699,125700],{},"安装pytorch",[26,125702,125703],{},"安装genesis",[19,125705,125706],{},"参考链接：",[58,125708,125710],{"className":24027,"code":125709,"language":24029,"meta":63,"style":63},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[65,125711,125712],{"__ignoreMap":63},[68,125713,125714,125717,125720,125723,125725,125728,125731,125733,125736,125739,125741,125744,125747,125749,125752,125755,125757],{"class":70,"line":71},[68,125715,125716],{"class":74},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[68,125718,125719],{"class":78},"=blogdetail",[68,125721,125722],{"class":335},"&sharetype",[68,125724,381],{"class":331},[68,125726,125727],{"class":78},"blogdetail",[68,125729,125730],{"class":335},"&sharerId",[68,125732,381],{"class":331},[68,125734,125735],{"class":78},"144728092",[68,125737,125738],{"class":335},"&sharerefer",[68,125740,381],{"class":331},[68,125742,125743],{"class":78},"PC",[68,125745,125746],{"class":335},"&sharesource",[68,125748,381],{"class":331},[68,125750,125751],{"class":78},"qq_69379513",[68,125753,125754],{"class":335},"&sharefrom",[68,125756,381],{"class":331},[68,125758,125759],{"class":78},"from_link\n",[10,125761,125763],{"id":125762},"_2genesis-报错issue","2.Genesis 报错issue",[19,125765,125706],{},[58,125767,125768],{"className":24027,"code":125709,"language":24029,"meta":63,"style":63},[65,125769,125770],{"__ignoreMap":63},[68,125771,125772,125774,125776,125778,125780,125782,125784,125786,125788,125790,125792,125794,125796,125798,125800,125802,125804],{"class":70,"line":71},[68,125773,125716],{"class":74},[68,125775,125719],{"class":78},[68,125777,125722],{"class":335},[68,125779,381],{"class":331},[68,125781,125727],{"class":78},[68,125783,125730],{"class":335},[68,125785,381],{"class":331},[68,125787,125735],{"class":78},[68,125789,125738],{"class":335},[68,125791,381],{"class":331},[68,125793,125743],{"class":78},[68,125795,125746],{"class":335},[68,125797,381],{"class":331},[68,125799,125751],{"class":78},[68,125801,125754],{"class":335},[68,125803,381],{"class":331},[68,125805,125759],{"class":78},[58,125807,125809],{"className":24027,"code":125808,"language":24029,"meta":63,"style":63},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[65,125810,125811],{"__ignoreMap":63},[68,125812,125813],{"class":70,"line":71},[68,125814,125808],{"class":74},[10,125816,125818],{"id":125817},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125820,125821],{},"hello_robot.py",[58,125823,125825],{"className":30579,"code":125824,"language":30581,"meta":63,"style":63},"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",[65,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":63},[68,125828,125829,125831],{"class":70,"line":71},[68,125830,30593],{"class":331},[68,125832,45506],{"class":335},[68,125834,125835,125838,125841,125843,125845],{"class":70,"line":92},[68,125836,125837],{"class":335},"os.environ[",[68,125839,125840],{"class":78},"'PYOPENGL_PLATFORM'",[68,125842,4649],{"class":335},[68,125844,381],{"class":331},[68,125846,125847],{"class":78}," 'glx'\n",[68,125849,125850],{"class":70,"line":1387},[68,125851,2606],{"emptyLinePlaceholder":260},[68,125853,125854,125856,125859,125861],{"class":70,"line":1402},[68,125855,30593],{"class":331},[68,125857,125858],{"class":335}," genesis ",[68,125860,31584],{"class":331},[68,125862,125863],{"class":335}," gs\n",[68,125865,125866,125868,125871,125873],{"class":70,"line":1408},[68,125867,30938],{"class":331},[68,125869,125870],{"class":335}," pynput ",[68,125872,30593],{"class":331},[68,125874,125875],{"class":335}," keyboard\n",[68,125877,125878],{"class":70,"line":1422},[68,125879,2606],{"emptyLinePlaceholder":260},[68,125881,125882,125885,125888,125890],{"class":70,"line":1428},[68,125883,125884],{"class":335},"gs.init(",[68,125886,125887],{"class":5421},"backend",[68,125889,381],{"class":331},[68,125891,125892],{"class":335},"gs.gpu)\n",[68,125894,125895],{"class":70,"line":1519},[68,125896,2606],{"emptyLinePlaceholder":260},[68,125898,125899,125902,125904,125907,125910,125912,125914],{"class":70,"line":1525},[68,125900,125901],{"class":335},"scene ",[68,125903,381],{"class":331},[68,125905,125906],{"class":335}," gs.Scene(",[68,125908,125909],{"class":5421},"show_viewer",[68,125911,381],{"class":331},[68,125913,31677],{"class":82},[68,125915,342],{"class":335},[68,125917,125918,125921,125923],{"class":70,"line":1537},[68,125919,125920],{"class":335},"plane ",[68,125922,381],{"class":331},[68,125924,125925],{"class":335}," scene.add_entity(gs.morphs.Plane())\n",[68,125927,125928,125931,125933],{"class":70,"line":1819},[68,125929,125930],{"class":335},"franka ",[68,125932,381],{"class":331},[68,125934,125935],{"class":335}," scene.add_entity(\n",[68,125937,125938,125941,125943,125945,125948],{"class":70,"line":1824},[68,125939,125940],{"class":335},"    gs.morphs.MJCF(",[68,125942,45555],{"class":5421},[68,125944,381],{"class":331},[68,125946,125947],{"class":78},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[68,125949,38248],{"class":335},[68,125951,125952],{"class":70,"line":1830},[68,125953,342],{"class":335},[68,125955,125956],{"class":70,"line":1835},[68,125957,2606],{"emptyLinePlaceholder":260},[68,125959,125960],{"class":70,"line":1849},[68,125961,125962],{"class":335},"scene.build()\n",[68,125964,125965],{"class":70,"line":1854},[68,125966,2606],{"emptyLinePlaceholder":260},[68,125968,125969,125971,125974],{"class":70,"line":1860},[68,125970,32148],{"class":331},[68,125972,125973],{"class":74}," on_press",[68,125975,125976],{"class":335},"(key):\n",[68,125978,125979,125982],{"class":70,"line":1881},[68,125980,125981],{"class":331},"    try",[68,125983,3945],{"class":335},[68,125985,125986,125988,125991,125993,125996],{"class":70,"line":1886},[68,125987,2703],{"class":331},[68,125989,125990],{"class":335}," key.char ",[68,125992,3155],{"class":331},[68,125994,125995],{"class":78}," 'q'",[68,125997,3945],{"class":335},[68,125999,126000,126002],{"class":70,"line":1900},[68,126001,15937],{"class":331},[68,126003,126004],{"class":82}," False\n",[68,126006,126007,126010,126013],{"class":70,"line":1905},[68,126008,126009],{"class":331},"    except",[68,126011,126012],{"class":82}," AttributeError",[68,126014,3945],{"class":335},[68,126016,126017],{"class":70,"line":1934},[68,126018,126019],{"class":331},"        pass\n",[68,126021,126022],{"class":70,"line":1939},[68,126023,2606],{"emptyLinePlaceholder":260},[68,126025,126026,126029,126031,126034,126037,126039],{"class":70,"line":1956},[68,126027,126028],{"class":335},"listener ",[68,126030,381],{"class":331},[68,126032,126033],{"class":335}," keyboard.Listener(",[68,126035,126036],{"class":5421},"on_press",[68,126038,381],{"class":331},[68,126040,126041],{"class":335},"on_press)\n",[68,126043,126044],{"class":70,"line":1961},[68,126045,126046],{"class":335},"listener.start()\n",[68,126048,126049],{"class":70,"line":1966},[68,126050,2606],{"emptyLinePlaceholder":260},[68,126052,126053,126055],{"class":70,"line":1971},[68,126054,108863],{"class":331},[68,126056,126057],{"class":335}," listener.running:\n",[68,126059,126060],{"class":70,"line":1985},[68,126061,126062],{"class":335},"    scene.step()\n",[19,126064,126065],{},[48,126066],{"alt":63,"src":126067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[250,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":63,"searchDepth":92,"depth":92,"links":126072},[],{"category":23583},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125677,"description":125682},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126079,"title":126080,"body":126081,"description":257,"extension":258,"meta":126096,"navigation":260,"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-基础知识",[14,126087,126089],{"id":126088},"_11-js的组成","1.1 js的组成",[19,126091,126092],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":63,"searchDepth":92,"depth":92,"links":126094},[126095],{"id":126088,"depth":92,"text":126089},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126080,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126102,"title":126103,"body":126104,"description":257,"extension":258,"meta":126243,"navigation":260,"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必备内容",[14,126110,126112],{"id":126111},"_21-标签分类","2.1 标签分类",[19,126114,126115],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126117,126119],{"id":126118},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126121,126122,126123,126125,126126,126129],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[65,126124,560],{}," 然后按 ",[65,126127,126128],{},"Tab","，快速自动生成基本结构。",[14,126131,126133],{"id":126132},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126135,126136],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126138,126139],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126141,126142],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126144,126146],{"id":126145},"_24-视图缩放","2.4 视图缩放",[19,126148,126149,126150,126153],{},"缩放视图 ",[65,126151,126152],{},"ctrl+"," 可实现代码增大。",[19,126155,126156,126159],{},[65,126157,126158],{},"ctrl-"," 可实现代码减小。",[14,126161,126163],{"id":126162},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126165,126166,126167,28588],{},"VSCode 新建文件快捷键为 ",[65,126168,126169],{},"ctrl+N",[19,126171,126172,126173,126176,126177,126180],{},"保存快捷键为 ",[65,126174,126175],{},"ctrl+S","，将文本保存为 ",[65,126178,126179],{},".html"," 文件。",[14,126182,126184],{"id":126183},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126186,126187],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126189,126191],{"id":126190},"_27-vscode-icons","2.7 vscode-icons",[19,126193,126194],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126196,126198],{"id":126197},"_28-easy-less","2.8 Easy LESS",[19,126200,126201],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126203,126205],{"id":126204},"_29-会了吧插件","2.9 会了吧插件",[19,126207,126208],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126210,126212],{"id":126211},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126214,126215],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126217,126218],{},"②选定多个相同的单词:ctrl+D",[19,126220,126221],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126223,126224],{},"④全局替换某些单词:ctrl+h",[19,126226,126227],{},"⑤快速定位到某一行:ctrl+g",[19,126229,126230],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":63,"searchDepth":92,"depth":92,"links":126232},[126233,126234,126235,126236,126237,126238,126239,126240,126241,126242],{"id":126111,"depth":92,"text":126112},{"id":126118,"depth":92,"text":126119},{"id":126132,"depth":92,"text":126133},{"id":126145,"depth":92,"text":126146},{"id":126162,"depth":92,"text":126163},{"id":126183,"depth":92,"text":126184},{"id":126190,"depth":92,"text":126191},{"id":126197,"depth":92,"text":126198},{"id":126204,"depth":92,"text":126205},{"id":126211,"depth":92,"text":126212},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126103,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126249,"title":126250,"body":126251,"description":257,"extension":258,"meta":126410,"navigation":260,"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文本与容器标签",[14,126257,126259],{"id":126258},"_31-标题标签","3.1 标题标签",[19,126261,126262,126265,126266,126269],{},[65,126263,126264],{},"\u003Ch1>","我是一级标签",[65,126267,126268],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126271,126272,126265,126274],{},[65,126273,126264],{},[65,126275,126268],{},[19,126277,123532,126278,126281],{},[65,126279,126280],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126283,126285],{"id":126284},"_32-段落标签","3.2 段落标签",[19,126287,126288,126291,126292],{},[65,126289,126290],{},"\u003Cp>","....",[65,126293,126294],{},"\u003C\u002Fp>",[14,126296,126298],{"id":126297},"_33-换行标签","3.3 换行标签",[19,126300,126301],{},[65,126302,126303],{},"\u003Cbr \u002F>",[19,126305,126306],{},"具有强制换行的作用",[19,126308,126309],{},"单标签",[14,126311,126313],{"id":126312},"_34-文本格式化标签","3.4 文本格式化标签",[19,126315,126316],{},"提供粗体、斜体和下划线等效果",[19,126318,126319,126320,82740,126323,126326],{},"加粗：",[65,126321,126322],{},"\u003Cstrong>...\u003C\u002Fstrong>",[65,126324,126325],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126328,126329,126330,82740,126333,126326],{},"斜体：",[65,126331,126332],{},"\u003Cem>...\u003C\u002Fem>",[65,126334,126335],{},"\u003Ci>...\u003C\u002Fi>",[19,126337,126338,126339,82740,126342,126326],{},"删除线：",[65,126340,126341],{},"\u003Cdel>...\u003C\u002Fdel>",[65,126343,126344],{},"\u003Cs>...\u003C\u002Fs>",[19,126346,126347,126348,82740,126351,126326],{},"下划线：",[65,126349,126350],{},"\u003Cins>...\u003C\u002Fins>",[65,126352,126353],{},"\u003Cu>...\u003C\u002Fu>",[14,126355,126357,126358,18615,126361,102893],{"id":126356},"_35-div和span标签","3.5 ",[65,126359,126360],{},"\u003Cdiv>",[65,126362,126363],{},"\u003Cspan>",[19,126365,126366,101218,126368,126370],{},[65,126367,126360],{},[65,126369,126363],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126372,126373],{},[65,126374,126375],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126377,126378],{},[65,126379,126380],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126382,126383,126384,126386,126387,126389,126390,126393],{},"两者特点：①",[65,126385,126360],{}," 标签用来布局，但一行通常只放一个 ",[65,126388,126360],{},"。可以理解为一个大盒子，独占一行，在 ",[65,126391,126392],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126395,77450,126396,126398,126399,126401],{},[65,126397,126363],{}," 标签也可用于布局，一行可以放多个 ",[65,126400,126363],{},"，可理解为小盒子。",{"title":63,"searchDepth":92,"depth":92,"links":126403},[126404,126405,126406,126407,126408],{"id":126258,"depth":92,"text":126259},{"id":126284,"depth":92,"text":126285},{"id":126297,"depth":92,"text":126298},{"id":126312,"depth":92,"text":126313},{"id":126356,"depth":92,"text":126409},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126250,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126416,"title":126417,"body":126418,"description":257,"extension":258,"meta":126614,"navigation":260,"path":126615,"seo":126616,"stem":126617,"__hash__":126618},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126419,"toc":126606},[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图像与链接",[14,126424,126426],{"id":126425},"_41-图像标签","4.1 图像标签",[19,126428,126429],{},"（1）标签",[19,126431,126432,126435],{},[65,126433,126434],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126437,126438,126439,126442],{},"src是",[65,126440,126441],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126444,126445,126446],{},"alt:文本，替换文本。图像不能显示的文字 ",[65,126447,126448],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126450,126451,126452],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[65,126453,126454],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126456,126457],{},"width:像素，设置图像的宽度",[19,126459,126460],{},"height:像素，设置图像的高度",[19,126462,126463],{},"border：像素，设置图像的边框粗细",[19,126465,126466],{},"（2）图像标签属性的注意点：",[19,126468,126469],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126471,126472],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126474,126475],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126477,126479],{"id":126478},"_42-路径注意要点","4.2 路径注意要点：",[19,126481,126482],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126484,126485],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126487,126488],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126490,126491,126492],{},"①同一级路径：图像文件位于HTML文件同一级，如",[65,126493,126494],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126496,126497,126498],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[65,126499,126500],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126502,126503,126504],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[65,126505,126506],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126508,126509,126510,584],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[30,126511,126512],{"href":126512,"rel":126513},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[34],[14,126515,126517],{"id":126516},"_43-超链接标签","4.3 超链接标签",[19,126519,126520,126523],{},[65,126521,126522],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126525,126526,126527],{},"①语法格式：",[65,126528,126529],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126531,126532],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126534,126535],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126537,126538,126539],{},"③链接分类：外部链接：",[65,126540,126541],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126543,126544,126545],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[65,126546,126547],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126549,126550,126551],{},"空链接：如果当时没有确定链接目标时，",[65,126552,126553],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126555,126556],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126558,126559],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126561,126563],{"id":126562},"_44-锚点链接","4.4 锚点链接",[19,126565,126566],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126568,126569,126570,126573,126574],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[65,126571,126572],{},"\u003Ca href=\"#two\">","第二级",[65,126575,126576],{},"\u003C\u002Fa>",[19,126578,126579,126580],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[65,126581,126582],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126584,126586],{"id":126585},"_45-注释标签","4.5 注释标签",[19,126588,126589,126592,126593],{},[65,126590,126591],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[65,126594,126595],{},"ctrl+\u002F",[14,126597,126599],{"id":126598},"_46-特殊字符","4.6 特殊字符",[19,126601,126602],{},"可以实现添加多个空格",[48,126604],{"style":50,"src":126605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":63,"searchDepth":92,"depth":92,"links":126607},[126608,126609,126610,126611,126612,126613],{"id":126425,"depth":92,"text":126426},{"id":126478,"depth":92,"text":126479},{"id":126516,"depth":92,"text":126517},{"id":126562,"depth":92,"text":126563},{"id":126585,"depth":92,"text":126586},{"id":126598,"depth":92,"text":126599},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126417,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126620,"title":126621,"body":126622,"description":257,"extension":258,"meta":126915,"navigation":260,"path":126916,"seo":126917,"stem":126918,"__hash__":126919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126623,"toc":126906},[126624,126627,126631,126634,126637,126640,126643,126646,126649,126652,126655,126658,126678,126684,126688,126691,126694,126697,126700,126703,126706,126710,126713,126716,126719,126722,126735,126740,126743,126746,126761,126764,126767,126770,126773,126776,126780,126783,126790,126793,126796,126799,126802,126805,126811,126814,126817,126823,126826,126829,126832,126838,126841,126844,126858,126865,126868,126871,126878,126887,126890,126893,126896,126900,126903],[10,126625,126621],{"id":126626},"_5-html表格列表与表单",[14,126628,126630],{"id":126629},"_51-表格标签","5.1 表格标签",[19,126632,126633],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126635,126636],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126638,126639],{},"②表格基本语法：",[48,126641],{"style":50,"src":126642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126644,126645],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[48,126647],{"style":50,"src":126648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126650,126651],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[48,126653],{"style":50,"src":126654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126656,126657],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126659,126660,126663,126664,126666,126667,126670,126671,126673,126674,126677],{},[65,126661,126662],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[65,126665,126662],{},"内部必须拥有",[65,126668,126669],{},"\u003Ctr>","标签，一般位于第一行，",[65,126672,126662],{},"比",[65,126675,126676],{},"\u003Cth>","范围广",[19,126679,126680,126683],{},[65,126681,126682],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126685,126687],{"id":126686},"_52-合并单元格","5.2 合并单元格",[19,126689,126690],{},"（1）合并单元格方式：",[19,126692,126693],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126695,126696],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126698,126699],{},"（2）目标单元格：",[19,126701,126702],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126704,126705],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126707,126709],{"id":126708},"_53-列表标签","5.3 列表标签",[19,126711,126712],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126714,126715],{},"①无序列表：",[48,126717],{"style":50,"src":126718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126720,126721],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126723,126724,126727,126728,126731,126732,126734],{},[65,126725,126726],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[65,126729,126730],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[65,126733,126726],{},"中输入其他标签或文字是不对的",[19,126736,126737,126739],{},[65,126738,126730],{},"之间相当于一个容器，可以容纳所有元素",[19,126741,126742],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126744,126745],{},"在css中去除前边的小圆点采用如下代码:",[58,126747,126751],{"className":126748,"code":126749,"language":126750,"meta":63,"style":63},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[65,126752,126753],{"__ignoreMap":63},[68,126754,126755,126758],{"class":70,"line":71},[68,126756,126757],{"class":51501},"list-style",[68,126759,126760],{"class":335},": none;\n",[19,126762,126763],{},"②有序列表：",[48,126765],{"style":50,"src":126766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126768,126769],{},"③自定义列表：",[48,126771],{"style":50,"src":126772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[48,126774],{"style":50,"src":126775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126777,126779],{"id":126778},"_54-表单标签","5.4 表单标签",[19,126781,126782],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126784,126785,126786,126789],{},"（1）表单域：包含单元素的区域，",[65,126787,126788],{},"\u003Cform>","标签可以实现信息的收集和传递。",[48,126791],{"style":50,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126794,126795],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126797,126798],{},"表单元素提交必须有name属性",[19,126800,126801],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126803,126804],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126806,77427,126807,126810],{},[65,126808,126809],{},"\u003Cinput>","输入表单元素",[48,126812],{"style":50,"src":126813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[48,126815],{"style":50,"src":126816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126818,126819,126820],{},"单选按钮：",[65,126821,126822],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[48,126824],{"style":50,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126827,126828],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[48,126830],{"style":50,"src":126831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126833,126834,126837],{},[483,126835,126836],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126839,126840],{},"②select下拉表单元素：可以节约页面控件",[48,126842],{"style":50,"src":126843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126845,126846,14000,126848,126851,126852,126854,126855,126857],{},[483,126847,365],{},[65,126849,126850],{},"\u003Cselect>","中至少包含一对",[65,126853,102914],{},"；在",[65,126856,102914],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126859,126860,126861,126864],{},"③",[65,126862,126863],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[48,126866],{"style":50,"src":126867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126869,126870],{},"3行20列",[14,126872,126874,126875,102893],{"id":126873},"_55-lable标签","5.5 ",[65,126876,126877],{},"\u003Clable>",[19,126879,126880,126881,126883,126884,126886],{},"它不是表单标签，但常常与表单标签搭配使用，",[65,126882,126877],{},"标签用于绑定一个表单标签，当点击",[65,126885,126877],{},"标签内的文本",[19,126888,126889],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[48,126891],{"style":50,"src":126892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[48,126894],{"style":50,"src":126895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126897,126899],{"id":126898},"_56-实例","5.6 实例",[48,126901],{"style":50,"src":126902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[250,126904,126905],{},"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":63,"searchDepth":92,"depth":92,"links":126907},[126908,126909,126910,126911,126912,126914],{"id":126629,"depth":92,"text":126630},{"id":126686,"depth":92,"text":126687},{"id":126708,"depth":92,"text":126709},{"id":126778,"depth":92,"text":126779},{"id":126873,"depth":92,"text":126913},"5.5 \u003Clable>标签",{"id":126898,"depth":92,"text":126899},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126621,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126921,"title":126922,"body":126923,"description":257,"extension":258,"meta":127472,"navigation":260,"path":127473,"seo":127474,"stem":127475,"__hash__":127476},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126924,"toc":127447},[126925,126928,126932,126935,126938,126942,126945,126948,126951,126954,126957,126960,126963,126967,126970,126974,126977,126980,126983,126987,126990,126993,126996,127002,127005,127008,127011,127014,127017,127020,127023,127056,127060,127063,127066,127069,127073,127076,127079,127082,127085,127088,127092,127095,127098,127101,127105,127108,127112,127115,127119,127122,127127,127131,127134,127138,127141,127144,127147,127150,127177,127180,127184,127187,127190,127195,127198,127201,127205,127208,127213,127216,127219,127222,127226,127229,127232,127235,127239,127242,127245,127248,127252,127256,127259,127299,127302,127306,127313,127316,127320,127323,127369,127373,127376,127379,127382,127410,127414,127417,127444],[10,126926,126922],{"id":126927},"_6-css语法与文本样式",[14,126929,126931],{"id":126930},"_61-css语法规范","6.1 css语法规范",[19,126933,126934],{},"由两部分组成，选择器及一条或多条声明",[48,126936],{"style":50,"src":126937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126939,126940],{},[483,126941,365],{},[19,126943,126944],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126946,126947],{},"②属性与属性值以“键值对”的形式出现",[19,126949,126950],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126952,126953],{},"④属性和属性值之间用英文“;”分开",[48,126955],{"style":50,"src":126956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[48,126958],{"style":50,"src":126959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[48,126961],{"style":50,"src":126962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126964,126966],{"id":126965},"_62-css选择器","6.2 css选择器",[19,126968,126969],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[301,126971,126973],{"id":126972},"_621-标签选择器","6.2.1 标签选择器",[19,126975,126976],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126978,126979],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[48,126981],{"style":50,"src":126982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[301,126984,126986],{"id":126985},"_622-类选择器","6.2.2 类选择器",[19,126988,126989],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126991,126992],{},"②样例",[48,126994],{"style":50,"src":126995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126997,126998,126999,127001],{},"③ ",[483,127000,126836],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127003,127004],{},"可以理解为给这个标签起了个名字，来表示；",[19,127006,127007],{},"长名称或词组可以使用横线来为选择器命名；",[19,127009,127010],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127012,127013],{},"命名要有意义；",[48,127015],{"style":50,"src":127016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127018,127019],{},"类选择器也可以指定特殊的元素p.center{}",[19,127021,127022],{},"p.center和.center都对",[58,127024,127026],{"className":126748,"code":127025,"language":126750,"meta":63,"style":63},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[65,127027,127028,127033,127042,127052],{"__ignoreMap":63},[68,127029,127030],{"class":70,"line":71},[68,127031,127032],{"class":393},"\u002F* 类选择器指定特殊元素 *\u002F\n",[68,127034,127035,127037,127040],{"class":70,"line":92},[68,127036,19],{"class":51501},[68,127038,127039],{"class":74},".center",[68,127041,15777],{"class":335},[68,127043,127044,127046,127048,127050],{"class":70,"line":1387},[68,127045,70727],{"class":82},[68,127047,51638],{"class":335},[68,127049,51793],{"class":82},[68,127051,1498],{"class":335},[68,127053,127054],{"class":70,"line":1402},[68,127055,1772],{"class":335},[301,127057,127059],{"id":127058},"_623-多类名使用","6.2.3 多类名使用",[19,127061,127062],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[48,127064],{"style":50,"src":127065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127067,127068],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[301,127070,127072],{"id":127071},"_624-id选择器","6.2.4 id选择器",[19,127074,127075],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127077,127078],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[48,127080],{"style":50,"src":127081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127083,127084],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127086,127087],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[301,127089,127091],{"id":127090},"_625-通配符选择器","6.2.5 通配符选择器",[19,127093,127094],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127096,127097],{},"* {",[19,127099,127100],{},"color=\"red\"}",[301,127102,127104],{"id":127103},"_626-总结","6.2.6 总结",[48,127106],{"style":50,"src":127107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127109,127111],{"id":127110},"_63-css字体属性","6.3 css字体属性",[19,127113,127114],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[301,127116,127118],{"id":127117},"_631-字体系列","6.3.1 字体系列",[19,127120,127121],{},"font-family: '宋体';",[19,127123,127124,127126],{},[483,127125,365],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[301,127128,127130],{"id":127129},"_632-字体大小","6.3.2 字体大小",[19,127132,127133],{},"font-size: 20px",[19,127135,127136,26677],{},[483,127137,126836],{},[19,127139,127140],{},"①px（像素）大小是网页的最常用单位",[19,127142,127143],{},"②谷歌浏览器默认为16px",[19,127145,127146],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127148,127149],{},"④可以给body指定整个页面的大小：会自动引用",[58,127151,127153],{"className":126748,"code":127152,"language":126750,"meta":63,"style":63},"body {\n  font-size: 16px;\n}\n",[65,127154,127155,127161,127173],{"__ignoreMap":63},[68,127156,127157,127159],{"class":70,"line":71},[68,127158,52001],{"class":51501},[68,127160,15777],{"class":335},[68,127162,127163,127165,127167,127169,127171],{"class":70,"line":92},[68,127164,70827],{"class":82},[68,127166,51638],{"class":335},[68,127168,934],{"class":82},[68,127170,51693],{"class":331},[68,127172,1498],{"class":335},[68,127174,127175],{"class":70,"line":1387},[68,127176,1772],{"class":335},[19,127178,127179],{},"⑤标题标签比较特殊，需要单独指定大小",[301,127181,127183],{"id":127182},"_633-字体粗细","6.3.3 字体粗细",[19,127185,127186],{},"font-weight: bold;",[19,127188,127189],{},"font-weight: 100；",[19,127191,127192,127194],{},[483,127193,365],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127196,127197],{},"font-weight= 400;",[19,127199,127200],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[301,127202,127204],{"id":127203},"_634-文字样式","6.3.4 文字样式",[19,127206,127207],{},"font-style: normal；",[19,127209,127210,26677],{},[483,127211,127212],{},"属性值",[19,127214,127215],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127217,127218],{},"②italic：浏览器会显示斜体的字体样式",[48,127220],{"style":50,"src":127221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[301,127223,127225],{"id":127224},"_635-字体符合属性","6.3.5 字体符合属性",[48,127227],{"style":50,"src":127228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[48,127230],{"style":50,"src":127231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127233,127234],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127236,127237,26677],{},[483,127238,126836],{},[19,127240,127241],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127243,127244],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127246,127247],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127249,127251],{"id":127250},"_64-css-test文本属性","6.4 css test文本属性",[301,127253,127255],{"id":127254},"_641-文本颜色","6.4.1 文本颜色",[19,127257,127258],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[58,127260,127262],{"className":126748,"code":127261,"language":126750,"meta":63,"style":63},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[65,127263,127264,127269,127275,127285,127290,127295],{"__ignoreMap":63},[68,127265,127266],{"class":70,"line":71},[68,127267,127268],{"class":393},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[68,127270,127271,127273],{"class":70,"line":92},[68,127272,19],{"class":51501},[68,127274,15777],{"class":335},[68,127276,127277,127279,127281,127283],{"class":70,"line":1387},[68,127278,71106],{"class":82},[68,127280,51638],{"class":335},[68,127282,57622],{"class":82},[68,127284,1498],{"class":335},[68,127286,127287],{"class":70,"line":1402},[68,127288,127289],{"class":393},"  \u002F* color: #ff0000; *\u002F\n",[68,127291,127292],{"class":70,"line":1408},[68,127293,127294],{"class":393},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[68,127296,127297],{"class":70,"line":1422},[68,127298,1772],{"class":335},[48,127300],{"style":50,"src":127301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[301,127303,127305],{"id":127304},"_642-对齐文本","6.4.2 对齐文本",[19,127307,127308,127309,127312],{},"text-align属于用于设置元素内文本内容的 ",[483,127310,127311],{},"水平对齐"," 方式",[19,127314,127315],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[301,127317,127319],{"id":127318},"_643-装饰文本","6.4.3 装饰文本",[19,127321,127322],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[58,127324,127326],{"className":126748,"code":127325,"language":126750,"meta":63,"style":63},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[65,127327,127328,127334,127344,127348,127354,127365],{"__ignoreMap":63},[68,127329,127330,127332],{"class":70,"line":71},[68,127331,30],{"class":51501},[68,127333,15777],{"class":335},[68,127335,127336,127338,127340,127342],{"class":70,"line":92},[68,127337,70703],{"class":82},[68,127339,51638],{"class":335},[68,127341,54938],{"class":82},[68,127343,1498],{"class":335},[68,127345,127346],{"class":70,"line":1387},[68,127347,1772],{"class":335},[68,127349,127350,127352],{"class":70,"line":1402},[68,127351,19],{"class":51501},[68,127353,15777],{"class":335},[68,127355,127356,127358,127360,127363],{"class":70,"line":1408},[68,127357,70703],{"class":82},[68,127359,51638],{"class":335},[68,127361,127362],{"class":82},"underline",[68,127364,1498],{"class":335},[68,127366,127367],{"class":70,"line":1422},[68,127368,1772],{"class":335},[301,127370,127372],{"id":127371},"_644-文本缩进","6.4.4 文本缩进",[19,127374,127375],{},"实现文本的第一行首行缩进自己指定的距离",[19,127377,127378],{},"20px往右边走；-20px往左边走",[19,127380,127381],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[58,127383,127385],{"className":126748,"code":127384,"language":126750,"meta":63,"style":63},"p {\n  text-indent: 2em;\n}\n",[65,127386,127387,127393,127406],{"__ignoreMap":63},[68,127388,127389,127391],{"class":70,"line":71},[68,127390,19],{"class":51501},[68,127392,15777],{"class":335},[68,127394,127395,127398,127400,127402,127404],{"class":70,"line":92},[68,127396,127397],{"class":82},"  text-indent",[68,127399,51638],{"class":335},[68,127401,412],{"class":82},[68,127403,23758],{"class":331},[68,127405,1498],{"class":335},[68,127407,127408],{"class":70,"line":1387},[68,127409,1772],{"class":335},[301,127411,127413],{"id":127412},"_645-行间距","6.4.5 行间距",[19,127415,127416],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[58,127418,127420],{"className":126748,"code":127419,"language":126750,"meta":63,"style":63},"p {\n  line-height: 1.6;\n}\n",[65,127421,127422,127428,127440],{"__ignoreMap":63},[68,127423,127424,127426],{"class":70,"line":71},[68,127425,19],{"class":51501},[68,127427,15777],{"class":335},[68,127429,127430,127433,127435,127438],{"class":70,"line":92},[68,127431,127432],{"class":82},"  line-height",[68,127434,51638],{"class":335},[68,127436,127437],{"class":82},"1.6",[68,127439,1498],{"class":335},[68,127441,127442],{"class":70,"line":1387},[68,127443,1772],{"class":335},[250,127445,127446],{},"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":63,"searchDepth":92,"depth":92,"links":127448},[127449,127450,127458,127465],{"id":126930,"depth":92,"text":126931},{"id":126965,"depth":92,"text":126966,"children":127451},[127452,127453,127454,127455,127456,127457],{"id":126972,"depth":1387,"text":126973},{"id":126985,"depth":1387,"text":126986},{"id":127058,"depth":1387,"text":127059},{"id":127071,"depth":1387,"text":127072},{"id":127090,"depth":1387,"text":127091},{"id":127103,"depth":1387,"text":127104},{"id":127110,"depth":92,"text":127111,"children":127459},[127460,127461,127462,127463,127464],{"id":127117,"depth":1387,"text":127118},{"id":127129,"depth":1387,"text":127130},{"id":127182,"depth":1387,"text":127183},{"id":127203,"depth":1387,"text":127204},{"id":127224,"depth":1387,"text":127225},{"id":127250,"depth":92,"text":127251,"children":127466},[127467,127468,127469,127470,127471],{"id":127254,"depth":1387,"text":127255},{"id":127304,"depth":1387,"text":127305},{"id":127318,"depth":1387,"text":127319},{"id":127371,"depth":1387,"text":127372},{"id":127412,"depth":1387,"text":127413},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126922,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127478,"title":127479,"body":127480,"description":257,"extension":258,"meta":128129,"navigation":260,"path":128130,"seo":128131,"stem":128132,"__hash__":128133},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127481,"toc":128110},[127482,127485,127489,127493,127553,127557,127567,127570,127573,127577,127602,127606,127609,127612,127615,127618,127621,127625,127628,127631,127673,127676,127702,127708,127711,127715,127719,127725,127728,127731,127734,127737,127740,127743,127788,127792,127795,127798,127802,127806,127835,127838,127843,127846,127849,127852,127855,127859,127863,127866,127868,127871,127875,127878,127882,127885,127888,127891,127895,127899,127905,127915,127918,127921,127924,127927,127930,128053,128061,128069,128107],[10,127483,127479],{"id":127484},"_7-css引入方式与选择器进阶",[14,127486,127488],{"id":127487},"_71-css引入方式","7.1 css引入方式",[301,127490,127492],{"id":127491},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[58,127494,127498],{"className":127495,"code":127496,"language":127497,"meta":63,"style":63},"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",[65,127499,127500,127508,127515,127527,127540,127545],{"__ignoreMap":63},[68,127501,127502,127504,127506],{"class":70,"line":71},[68,127503,1243],{"class":335},[68,127505,250],{"class":51501},[68,127507,51508],{"class":335},[68,127509,127510,127513],{"class":70,"line":92},[68,127511,127512],{"class":51501},"  h1",[68,127514,15777],{"class":335},[68,127516,127517,127520,127522,127525],{"class":70,"line":1387},[68,127518,127519],{"class":82},"    color",[68,127521,51638],{"class":335},[68,127523,127524],{"class":82},"blue",[68,127526,1498],{"class":335},[68,127528,127529,127532,127534,127536,127538],{"class":70,"line":1402},[68,127530,127531],{"class":82},"    font-size",[68,127533,51638],{"class":335},[68,127535,1133],{"class":82},[68,127537,51693],{"class":331},[68,127539,1498],{"class":335},[68,127541,127542],{"class":70,"line":1408},[68,127543,127544],{"class":335},"  }\n",[68,127546,127547,127549,127551],{"class":70,"line":1422},[68,127548,51986],{"class":335},[68,127550,250],{"class":51501},[68,127552,51508],{"class":335},[19,127554,127555,26677],{},[483,127556,126836],{},[19,127558,77427,127559,127562,127563,127566],{},[65,127560,127561],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[65,127564,127565],{},"\u003Chead>","标签中",[19,127568,127569],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127571,127572],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[301,127574,127576],{"id":127575},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[58,127578,127580],{"className":127495,"code":127579,"language":127497,"meta":63,"style":63},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[65,127581,127582],{"__ignoreMap":63},[68,127583,127584,127586,127588,127590,127592,127595,127598,127600],{"class":70,"line":71},[68,127585,1243],{"class":335},[68,127587,19],{"class":51501},[68,127589,62827],{"class":74},[68,127591,381],{"class":335},[68,127593,127594],{"class":78},"\"color: red; font-size: 16px;\"",[68,127596,127597],{"class":335},">这是一个段落\u003C\u002F",[68,127599,19],{"class":51501},[68,127601,51508],{"class":335},[19,127603,127604,26677],{},[483,127605,126836],{},[19,127607,127608],{},"①style其实就是标签的属性",[19,127610,127611],{},"②在双引号中间，写法要符合css规范",[19,127613,127614],{},"③可以控制当前的标签设置样式",[19,127616,127617],{},"④书写繁琐，简单时才用",[19,127619,127620],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[301,127622,127624],{"id":127623},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127626,127627],{},"使用最多，单独建一个css文件，然后html引用",[19,127629,127630],{},"①css文件部分： style.css",[58,127632,127634],{"className":126748,"code":127633,"language":126750,"meta":63,"style":63},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[65,127635,127636,127641,127647,127657,127669],{"__ignoreMap":63},[68,127637,127638],{"class":70,"line":71},[68,127639,127640],{"class":393},"\u002F* style.css *\u002F\n",[68,127642,127643,127645],{"class":70,"line":92},[68,127644,10],{"class":51501},[68,127646,15777],{"class":335},[68,127648,127649,127651,127653,127655],{"class":70,"line":1387},[68,127650,71106],{"class":82},[68,127652,51638],{"class":335},[68,127654,127524],{"class":82},[68,127656,1498],{"class":335},[68,127658,127659,127661,127663,127665,127667],{"class":70,"line":1402},[68,127660,70827],{"class":82},[68,127662,51638],{"class":335},[68,127664,1133],{"class":82},[68,127666,51693],{"class":331},[68,127668,1498],{"class":335},[68,127670,127671],{"class":70,"line":1408},[68,127672,1772],{"class":335},[19,127674,127675],{},"②html部分",[58,127677,127679],{"className":127495,"code":127678,"language":127497,"meta":63,"style":63},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[65,127680,127681],{"__ignoreMap":63},[68,127682,127683,127685,127687,127689,127691,127693,127695,127697,127700],{"class":70,"line":71},[68,127684,1243],{"class":335},[68,127686,69206],{"class":51501},[68,127688,69209],{"class":74},[68,127690,381],{"class":335},[68,127692,69214],{"class":78},[68,127694,61258],{"class":74},[68,127696,381],{"class":335},[68,127698,127699],{"class":78},"\"style.css\"",[68,127701,51508],{"class":335},[19,127703,127704,127707],{},[65,127705,127706],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127709,127710],{},"ctrl+0回到页面原来大小",[14,127712,127714],{"id":127713},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[301,127716,127718],{"id":127717},"_721-快速生成html","7.2.1 快速生成html",[19,127720,127721,127722],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[65,127723,127724],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127726,127727],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127729,127730],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127732,127733],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127735,127736],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127738,127739],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127741,127742],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[58,127744,127746],{"className":127495,"code":127745,"language":127497,"meta":63,"style":63},"\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",[65,127747,127748,127753,127758,127763,127768,127773,127778,127783],{"__ignoreMap":63},[68,127749,127750],{"class":70,"line":71},[68,127751,127752],{"class":393},"\u003C!-- Emmet 语法示例 -->\n",[68,127754,127755],{"class":70,"line":92},[68,127756,127757],{"class":393},"\u003C!-- div*3        → 生成3个div -->\n",[68,127759,127760],{"class":70,"line":1387},[68,127761,127762],{"class":393},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[68,127764,127765],{"class":70,"line":1402},[68,127766,127767],{"class":393},"\u003C!-- div+p        → 兄弟div和p -->\n",[68,127769,127770],{"class":70,"line":1408},[68,127771,127772],{"class":393},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[68,127774,127775],{"class":70,"line":1422},[68,127776,127777],{"class":393},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[68,127779,127780],{"class":70,"line":1428},[68,127781,127782],{"class":393},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[68,127784,127785],{"class":70,"line":1519},[68,127786,127787],{"class":393},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[301,127789,127791],{"id":127790},"_722-快速生成css","7.2.2 快速生成css",[19,127793,127794],{},"简写开头",[19,127796,127797],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127799,127801],{"id":127800},"_73-css复合选择器","7.3 css复合选择器",[301,127803,127805],{"id":127804},"_731-后代选择器","7.3.1 后代选择器",[58,127807,127809],{"className":126748,"code":127808,"language":126750,"meta":63,"style":63},".parent .child {\n  color: blue;\n}\n",[65,127810,127811,127821,127831],{"__ignoreMap":63},[68,127812,127813,127816,127819],{"class":70,"line":71},[68,127814,127815],{"class":74},".parent",[68,127817,127818],{"class":74}," .child",[68,127820,15777],{"class":335},[68,127822,127823,127825,127827,127829],{"class":70,"line":92},[68,127824,71106],{"class":82},[68,127826,51638],{"class":335},[68,127828,127524],{"class":82},[68,127830,1498],{"class":335},[68,127832,127833],{"class":70,"line":1387},[68,127834,1772],{"class":335},[19,127836,127837],{},"元素1 元素2 {样式声明}",[19,127839,127840],{},[483,127841,127842],{},"注意点:",[19,127844,127845],{},"①元素1和元素2中间用空格隔开",[19,127847,127848],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127850,127851],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127853,127854],{},"④元素1和元素2可以是任意基础选择器",[301,127856,127858],{"id":127857},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127860,127861],{},[483,127862,127842],{},[19,127864,127865],{},"①元素1和元素2中间用大于号隔开",[19,127867,127848],{},[19,127869,127870],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[301,127872,127874],{"id":127873},"_733-并集选择器","7.3.3 并集选择器",[19,127876,127877],{},"元素1，元素2 {样式声明}",[19,127879,127880],{},[483,127881,127842],{},[19,127883,127884],{},"①元素1和元素2中间用逗号隔开",[19,127886,127887],{},"②逗号可以理解为和的意思",[19,127889,127890],{},"③并集选择器通常用于集体声明",[301,127892,127894],{"id":127893},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127896,127897],{},[483,127898,127842],{},[19,127900,127901,127902,127904],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69206,127903],{},"－:visited－:hover－:active。",[19,127906,127907,127908,127911,127912,25944],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127909,127910],"hover",{}," 、 ",[127913,127914],"first-child",{},[19,127916,127917],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127919,127920],{},"link对没访问的进行设置",[19,127922,127923],{},"vistied对已访问的进行改变",[19,127925,127926],{},"hover鼠标经过就会变",[19,127928,127929],{},"active常按(点)就会变",[58,127931,127933],{"className":126748,"code":127932,"language":126750,"meta":63,"style":63},"\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",[65,127934,127935,127940,127949,127959,127969,127973,127982,127993,127997,128005,128015,128025,128029,128038,128049],{"__ignoreMap":63},[68,127936,127937],{"class":70,"line":71},[68,127938,127939],{"class":393},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[68,127941,127942,127944,127947],{"class":70,"line":92},[68,127943,30],{"class":51501},[68,127945,127946],{"class":74},":link",[68,127948,15777],{"class":335},[68,127950,127951,127953,127955,127957],{"class":70,"line":1387},[68,127952,71106],{"class":82},[68,127954,51638],{"class":335},[68,127956,62570],{"class":82},[68,127958,1498],{"class":335},[68,127960,127961,127963,127965,127967],{"class":70,"line":1402},[68,127962,70703],{"class":82},[68,127964,51638],{"class":335},[68,127966,54938],{"class":82},[68,127968,1498],{"class":335},[68,127970,127971],{"class":70,"line":1408},[68,127972,1772],{"class":335},[68,127974,127975,127977,127980],{"class":70,"line":1422},[68,127976,30],{"class":51501},[68,127978,127979],{"class":74},":visited",[68,127981,15777],{"class":335},[68,127983,127984,127986,127988,127991],{"class":70,"line":1428},[68,127985,71106],{"class":82},[68,127987,51638],{"class":335},[68,127989,127990],{"class":82},"purple",[68,127992,1498],{"class":335},[68,127994,127995],{"class":70,"line":1519},[68,127996,1772],{"class":335},[68,127998,127999,128001,128003],{"class":70,"line":1525},[68,128000,30],{"class":51501},[68,128002,61141],{"class":74},[68,128004,15777],{"class":335},[68,128006,128007,128009,128011,128013],{"class":70,"line":1537},[68,128008,71106],{"class":82},[68,128010,51638],{"class":335},[68,128012,55090],{"class":82},[68,128014,1498],{"class":335},[68,128016,128017,128019,128021,128023],{"class":70,"line":1819},[68,128018,70703],{"class":82},[68,128020,51638],{"class":335},[68,128022,127362],{"class":82},[68,128024,1498],{"class":335},[68,128026,128027],{"class":70,"line":1824},[68,128028,1772],{"class":335},[68,128030,128031,128033,128036],{"class":70,"line":1830},[68,128032,30],{"class":51501},[68,128034,128035],{"class":74},":active",[68,128037,15777],{"class":335},[68,128039,128040,128042,128044,128047],{"class":70,"line":1835},[68,128041,71106],{"class":82},[68,128043,51638],{"class":335},[68,128045,128046],{"class":82},"green",[68,128048,1498],{"class":335},[68,128050,128051],{"class":70,"line":1849},[68,128052,1772],{"class":335},[301,128054,128056,128057,128060],{"id":128055},"_735-伪类选择器","7.3.5 ",[128058,128059],"focus",{},"伪类选择器",[19,128062,128063,128065,128066,128068],{},[128058,128064],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[65,128067,126809],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[58,128070,128072],{"className":126748,"code":128071,"language":126750,"meta":63,"style":63},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[65,128073,128074,128082,128093,128103],{"__ignoreMap":63},[68,128075,128076,128078,128080],{"class":70,"line":71},[68,128077,54022],{"class":51501},[68,128079,62101],{"class":74},[68,128081,15777],{"class":335},[68,128083,128084,128087,128089,128091],{"class":70,"line":92},[68,128085,128086],{"class":82},"  border-color",[68,128088,51638],{"class":335},[68,128090,55090],{"class":82},[68,128092,1498],{"class":335},[68,128094,128095,128097,128099,128101],{"class":70,"line":1387},[68,128096,70999],{"class":82},[68,128098,51638],{"class":335},[68,128100,54938],{"class":82},[68,128102,1498],{"class":335},[68,128104,128105],{"class":70,"line":1402},[68,128106,1772],{"class":335},[250,128108,128109],{},"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":63,"searchDepth":92,"depth":92,"links":128111},[128112,128117,128121],{"id":127487,"depth":92,"text":127488,"children":128113},[128114,128115,128116],{"id":127491,"depth":1387,"text":127492},{"id":127575,"depth":1387,"text":127576},{"id":127623,"depth":1387,"text":127624},{"id":127713,"depth":92,"text":127714,"children":128118},[128119,128120],{"id":127717,"depth":1387,"text":127718},{"id":127790,"depth":1387,"text":127791},{"id":127800,"depth":92,"text":127801,"children":128122},[128123,128124,128125,128126,128127],{"id":127804,"depth":1387,"text":127805},{"id":127857,"depth":1387,"text":127858},{"id":127873,"depth":1387,"text":127874},{"id":127893,"depth":1387,"text":127894},{"id":128055,"depth":1387,"text":128128},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127479,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128135,"title":128136,"body":128137,"description":257,"extension":258,"meta":130060,"navigation":260,"path":130061,"seo":130062,"stem":130063,"__hash__":130064},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128138,"toc":130034},[128139,128142,128146,128155,128159,128185,128190,128193,128196,128199,128202,128206,128209,128219,128227,128231,128266,128271,128274,128277,128280,128283,128287,128290,128299,128303,128316,128321,128324,128327,128330,128334,128337,128341,128344,128399,128402,128433,128436,128490,128494,128497,128663,128786,128789,128792,128795,128798,128802,128805,128809,128812,128815,128819,128822,128853,128880,128908,128911,128915,128941,128984,128988,129082,129085,129112,129115,129118,129121,129124,129127,129130,129133,129136,129139,129143,129200,129227,129231,129279,129283,129324,129326,129329,129332,129335,129338,129342,129434,129437,129440,129443,129447,129570,129771,129775,129779,129782,129785,129788,129792,129795,129798,129823,129826,129829,129832,129835,129838,129842,129850,129912,129915,129973,129976,129979,129982,129985,129988,129991,129994,130031],[10,128140,128136],{"id":128141},"_8-css显示模式与背景特性",[14,128143,128145],{"id":128144},"_81-css元素显示模式","8.1 css元素显示模式",[19,128147,128148,128149,128151,128152,128154],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[65,128150,126360],{},"自己占一行，比如一行可以放多个",[65,128153,126363],{},"，HTML 元素一般分为块元素和行内元素两种类型",[301,128156,128158],{"id":128157},"_811-块元素","8.1.1 块元素",[19,128160,128161,128162,128164,128165,546,128168,546,128170,546,128172,546,128175,546,128178,128181,128182,128184],{},"常见的块元素有",[65,128163,126264],{},"~",[65,128166,128167],{},"\u003Ch6>",[65,128169,126290],{},[65,128171,126360],{},[65,128173,128174],{},"\u003Cul>",[65,128176,128177],{},"\u003Col>",[65,128179,128180],{},"\u003Cli>","等，其中 ",[65,128183,126360],{}," 标签是最典型的块元素",[19,128186,128187],{},[483,128188,128189],{},"块级元素的特点：",[19,128191,128192],{},"① 比较霸道，自己独占一行。",[19,128194,128195],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128197,128198],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128200,128201],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128203,128204],{},[483,128205,365],{},[19,128207,128208],{},"①文字类的元素内不能使用块级元素",[19,128210,77450,128211,128213,128214,128216,128217],{},[65,128212,126290],{}," 标签主要用于存放文字，因此 ",[65,128215,126290],{}," 里面不能放块级元素，特别是不能放",[65,128218,126360],{},[19,128220,128221,128222,128164,128224,128226],{},"⑥同理， ",[65,128223,126264],{},[65,128225,128167],{},"等都是文字类块级标签，里面也不能放其他块级元素",[301,128228,128230],{"id":128229},"_812-行内元素","8.1.2 行内元素",[19,128232,128233,128234,546,128236,546,128239,546,128242,546,128245,546,128248,546,128251,546,128254,546,128257,546,128260,128262,128263,128265],{},"常见的行内元素有 ",[65,128235,126522],{},[65,128237,128238],{},"\u003Cstrong>",[65,128240,128241],{},"\u003Cb>",[65,128243,128244],{},"\u003Cem>",[65,128246,128247],{},"\u003Ci>",[65,128249,128250],{},"\u003Cdel>",[65,128252,128253],{},"\u003Cs>",[65,128255,128256],{},"\u003Cins>",[65,128258,128259],{},"\u003Cu>",[65,128261,126363],{}," 等，其中 ",[65,128264,126363],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128267,128268],{},[483,128269,128270],{},"特点：",[19,128272,128273],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128275,128276],{},"② 高、宽直接设置是无效的。",[19,128278,128279],{},"③ 默认宽度就是它本身内容的宽度。",[19,128281,128282],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128284,128285],{},[483,128286,365],{},[19,128288,128289],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128291,128292,128293,128295,128296,128298],{},"②特殊情况链接 ",[65,128294,126522],{}," 里面可以放块级元素，但是给 ",[65,128297,126522],{}," 转换一下块级模式最安全",[301,128300,128302],{"id":128301},"_813-行内块元素","8.1.3 行内块元素",[19,128304,128305,128306,546,128309,546,128312,128315],{},"在行内元素中有几个特殊的标签 —— ",[65,128307,128308],{},"\u003Cimg \u002F>",[65,128310,128311],{},"\u003Cinput \u002F>",[65,128313,128314],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128317,128318],{},[483,128319,128320],{},"行内块元素的特点：",[19,128322,128323],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128325,128326],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128328,128329],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[301,128331,128333],{"id":128332},"_814-总结","8.1.4 总结",[48,128335],{"style":50,"src":128336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[301,128338,128340],{"id":128339},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128342,128343],{},"①转换为块元素：display:block;",[58,128345,128347],{"className":126748,"code":128346,"language":126750,"meta":63,"style":63},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[65,128348,128349,128354,128360,128371,128383,128395],{"__ignoreMap":63},[68,128350,128351],{"class":70,"line":71},[68,128352,128353],{"class":393},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[68,128355,128356,128358],{"class":70,"line":92},[68,128357,30],{"class":51501},[68,128359,15777],{"class":335},[68,128361,128362,128365,128367,128369],{"class":70,"line":1387},[68,128363,128364],{"class":82},"  display",[68,128366,51638],{"class":335},[68,128368,61070],{"class":82},[68,128370,1498],{"class":335},[68,128372,128373,128375,128377,128379,128381],{"class":70,"line":1402},[68,128374,70769],{"class":82},[68,128376,51638],{"class":335},[68,128378,644],{"class":82},[68,128380,51693],{"class":331},[68,128382,1498],{"class":335},[68,128384,128385,128387,128389,128391,128393],{"class":70,"line":1408},[68,128386,70989],{"class":82},[68,128388,51638],{"class":335},[68,128390,734],{"class":82},[68,128392,51693],{"class":331},[68,128394,1498],{"class":335},[68,128396,128397],{"class":70,"line":1422},[68,128398,1772],{"class":335},[19,128400,128401],{},"②转换为行内元素：display:inline;",[58,128403,128405],{"className":126748,"code":128404,"language":126750,"meta":63,"style":63},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[65,128406,128407,128412,128418,128429],{"__ignoreMap":63},[68,128408,128409],{"class":70,"line":71},[68,128410,128411],{"class":393},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[68,128413,128414,128416],{"class":70,"line":92},[68,128415,51812],{"class":51501},[68,128417,15777],{"class":335},[68,128419,128420,128422,128424,128427],{"class":70,"line":1387},[68,128421,128364],{"class":82},[68,128423,51638],{"class":335},[68,128425,128426],{"class":82},"inline",[68,128428,1498],{"class":335},[68,128430,128431],{"class":70,"line":1402},[68,128432,1772],{"class":335},[19,128434,128435],{},"③转换为行内块：display:inline-block;",[58,128437,128439],{"className":126748,"code":128438,"language":126750,"meta":63,"style":63},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[65,128440,128441,128446,128452,128462,128474,128486],{"__ignoreMap":63},[68,128442,128443],{"class":70,"line":71},[68,128444,128445],{"class":393},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[68,128447,128448,128450],{"class":70,"line":92},[68,128449,68],{"class":51501},[68,128451,15777],{"class":335},[68,128453,128454,128456,128458,128460],{"class":70,"line":1387},[68,128455,128364],{"class":82},[68,128457,51638],{"class":335},[68,128459,72584],{"class":82},[68,128461,1498],{"class":335},[68,128463,128464,128466,128468,128470,128472],{"class":70,"line":1402},[68,128465,70769],{"class":82},[68,128467,51638],{"class":335},[68,128469,945],{"class":82},[68,128471,51693],{"class":331},[68,128473,1498],{"class":335},[68,128475,128476,128478,128480,128482,128484],{"class":70,"line":1408},[68,128477,70989],{"class":82},[68,128479,51638],{"class":335},[68,128481,1284],{"class":82},[68,128483,51693],{"class":331},[68,128485,1498],{"class":335},[68,128487,128488],{"class":70,"line":1422},[68,128489,1772],{"class":335},[301,128491,128493],{"id":128492},"_816-小米侧边栏","8.1.6 小米侧边栏",[48,128495],{"style":50,"src":128496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[58,128498,128500],{"className":127495,"code":128499,"language":127497,"meta":63,"style":63},"\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",[65,128501,128502,128507,128522,128541,128560,128579,128598,128617,128636,128655],{"__ignoreMap":63},[68,128503,128504],{"class":70,"line":71},[68,128505,128506],{"class":393},"\u003C!-- 小米侧边栏案例 -->\n",[68,128508,128509,128511,128513,128515,128517,128520],{"class":70,"line":92},[68,128510,1243],{"class":335},[68,128512,51812],{"class":51501},[68,128514,53687],{"class":74},[68,128516,381],{"class":335},[68,128518,128519],{"class":78},"\"sidebar\"",[68,128521,51508],{"class":335},[68,128523,128524,128526,128528,128530,128532,128534,128537,128539],{"class":70,"line":1387},[68,128525,52345],{"class":335},[68,128527,30],{"class":51501},[68,128529,61258],{"class":74},[68,128531,381],{"class":335},[68,128533,61263],{"class":78},[68,128535,128536],{"class":335},">手机 电话卡\u003C\u002F",[68,128538,30],{"class":51501},[68,128540,51508],{"class":335},[68,128542,128543,128545,128547,128549,128551,128553,128556,128558],{"class":70,"line":1402},[68,128544,52345],{"class":335},[68,128546,30],{"class":51501},[68,128548,61258],{"class":74},[68,128550,381],{"class":335},[68,128552,61263],{"class":78},[68,128554,128555],{"class":335},">电视 盒子\u003C\u002F",[68,128557,30],{"class":51501},[68,128559,51508],{"class":335},[68,128561,128562,128564,128566,128568,128570,128572,128575,128577],{"class":70,"line":1408},[68,128563,52345],{"class":335},[68,128565,30],{"class":51501},[68,128567,61258],{"class":74},[68,128569,381],{"class":335},[68,128571,61263],{"class":78},[68,128573,128574],{"class":335},">笔记本 平板\u003C\u002F",[68,128576,30],{"class":51501},[68,128578,51508],{"class":335},[68,128580,128581,128583,128585,128587,128589,128591,128594,128596],{"class":70,"line":1422},[68,128582,52345],{"class":335},[68,128584,30],{"class":51501},[68,128586,61258],{"class":74},[68,128588,381],{"class":335},[68,128590,61263],{"class":78},[68,128592,128593],{"class":335},">出行 穿戴\u003C\u002F",[68,128595,30],{"class":51501},[68,128597,51508],{"class":335},[68,128599,128600,128602,128604,128606,128608,128610,128613,128615],{"class":70,"line":1428},[68,128601,52345],{"class":335},[68,128603,30],{"class":51501},[68,128605,61258],{"class":74},[68,128607,381],{"class":335},[68,128609,61263],{"class":78},[68,128611,128612],{"class":335},">智能 路由器\u003C\u002F",[68,128614,30],{"class":51501},[68,128616,51508],{"class":335},[68,128618,128619,128621,128623,128625,128627,128629,128632,128634],{"class":70,"line":1519},[68,128620,52345],{"class":335},[68,128622,30],{"class":51501},[68,128624,61258],{"class":74},[68,128626,381],{"class":335},[68,128628,61263],{"class":78},[68,128630,128631],{"class":335},">健康 儿童\u003C\u002F",[68,128633,30],{"class":51501},[68,128635,51508],{"class":335},[68,128637,128638,128640,128642,128644,128646,128648,128651,128653],{"class":70,"line":1525},[68,128639,52345],{"class":335},[68,128641,30],{"class":51501},[68,128643,61258],{"class":74},[68,128645,381],{"class":335},[68,128647,61263],{"class":78},[68,128649,128650],{"class":335},">耳机 音响\u003C\u002F",[68,128652,30],{"class":51501},[68,128654,51508],{"class":335},[68,128656,128657,128659,128661],{"class":70,"line":1537},[68,128658,51986],{"class":335},[68,128660,51812],{"class":51501},[68,128662,51508],{"class":335},[58,128664,128666],{"className":126748,"code":128665,"language":126750,"meta":63,"style":63},".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",[65,128667,128668,128677,128687,128700,128712,128724,128736,128746,128757,128761,128771,128782],{"__ignoreMap":63},[68,128669,128670,128673,128675],{"class":70,"line":71},[68,128671,128672],{"class":74},".sidebar",[68,128674,1606],{"class":51501},[68,128676,15777],{"class":335},[68,128678,128679,128681,128683,128685],{"class":70,"line":92},[68,128680,128364],{"class":82},[68,128682,51638],{"class":335},[68,128684,61070],{"class":82},[68,128686,1498],{"class":335},[68,128688,128689,128691,128693,128696,128698],{"class":70,"line":1387},[68,128690,70769],{"class":82},[68,128692,51638],{"class":335},[68,128694,128695],{"class":82},"234",[68,128697,51693],{"class":331},[68,128699,1498],{"class":335},[68,128701,128702,128704,128706,128708,128710],{"class":70,"line":1402},[68,128703,70989],{"class":82},[68,128705,51638],{"class":335},[68,128707,785],{"class":82},[68,128709,51693],{"class":331},[68,128711,1498],{"class":335},[68,128713,128714,128716,128718,128720,128722],{"class":70,"line":1408},[68,128715,127432],{"class":82},[68,128717,51638],{"class":335},[68,128719,785],{"class":82},[68,128721,51693],{"class":331},[68,128723,1498],{"class":335},[68,128725,128726,128728,128730,128732,128734],{"class":70,"line":1422},[68,128727,71024],{"class":82},[68,128729,51638],{"class":335},[68,128731,1284],{"class":82},[68,128733,51693],{"class":331},[68,128735,1498],{"class":335},[68,128737,128738,128740,128742,128744],{"class":70,"line":1428},[68,128739,71106],{"class":82},[68,128741,51638],{"class":335},[68,128743,61043],{"class":82},[68,128745,1498],{"class":335},[68,128747,128748,128750,128752,128755],{"class":70,"line":1519},[68,128749,71079],{"class":82},[68,128751,51638],{"class":335},[68,128753,128754],{"class":82},"#55585a",[68,128756,1498],{"class":335},[68,128758,128759],{"class":70,"line":1525},[68,128760,1772],{"class":335},[68,128762,128763,128765,128767,128769],{"class":70,"line":1537},[68,128764,128672],{"class":74},[68,128766,1606],{"class":51501},[68,128768,61141],{"class":74},[68,128770,15777],{"class":335},[68,128772,128773,128775,128777,128780],{"class":70,"line":1819},[68,128774,71079],{"class":82},[68,128776,51638],{"class":335},[68,128778,128779],{"class":82},"#ff6700",[68,128781,1498],{"class":335},[68,128783,128784],{"class":70,"line":1824},[68,128785,1772],{"class":335},[48,128787],{"style":50,"src":128788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128790,128791],{},"行高=盒子高度：实现文字的垂直居中",[19,128793,128794],{},"原理讲解：",[48,128796],{"style":50,"src":128797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128799,128801],{"id":128800},"_82-css背景","8.2 css背景",[19,128803,128804],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[301,128806,128808],{"id":128807},"_821-背景颜色","8.2.1 背景颜色",[19,128810,128811],{},"background-color:颜色值;",[19,128813,128814],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[301,128816,128818],{"id":128817},"_822-背景图片","8.2.2 背景图片",[19,128820,128821],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[58,128823,128825],{"className":126748,"code":128824,"language":126750,"meta":63,"style":63},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[65,128826,128827,128833,128849],{"__ignoreMap":63},[68,128828,128829,128831],{"class":70,"line":71},[68,128830,51812],{"class":51501},[68,128832,15777],{"class":335},[68,128834,128835,128838,128840,128842,128844,128847],{"class":70,"line":92},[68,128836,128837],{"class":82},"  background-image",[68,128839,51638],{"class":335},[68,128841,61927],{"class":82},[68,128843,336],{"class":335},[68,128845,128846],{"class":5421},"images\u002Fbg.png",[68,128848,2925],{"class":335},[68,128850,128851],{"class":70,"line":1387},[68,128852,1772],{"class":335},[471,128854,128855,128864],{},[474,128856,128857],{},[477,128858,128859,128862],{},[480,128860,128861],{"align":23941},"参数值",[480,128863,102896],{"align":23941},[518,128865,128866,128873],{},[477,128867,128868,128870],{},[523,128869,54938],{"align":23941},[523,128871,128872],{"align":23941},"无背景图（默认的）",[477,128874,128875,128877],{},[523,128876,61927],{"align":23941},[523,128878,128879],{"align":23941},"使用绝对或相对地址指定背景图像",[58,128881,128882],{"className":126748,"code":128824,"language":126750,"meta":63,"style":63},[65,128883,128884,128890,128904],{"__ignoreMap":63},[68,128885,128886,128888],{"class":70,"line":71},[68,128887,51812],{"class":51501},[68,128889,15777],{"class":335},[68,128891,128892,128894,128896,128898,128900,128902],{"class":70,"line":92},[68,128893,128837],{"class":82},[68,128895,51638],{"class":335},[68,128897,61927],{"class":82},[68,128899,336],{"class":335},[68,128901,128846],{"class":5421},[68,128903,2925],{"class":335},[68,128905,128906],{"class":70,"line":1387},[68,128907,1772],{"class":335},[19,128909,128910],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[301,128912,128914],{"id":128913},"_823-背景平铺","8.2.3 背景平铺",[58,128916,128918],{"className":126748,"code":128917,"language":126750,"meta":63,"style":63},"div {\n  background-repeat: no-repeat;\n}\n",[65,128919,128920,128926,128937],{"__ignoreMap":63},[68,128921,128922,128924],{"class":70,"line":71},[68,128923,51812],{"class":51501},[68,128925,15777],{"class":335},[68,128927,128928,128931,128933,128935],{"class":70,"line":92},[68,128929,128930],{"class":82},"  background-repeat",[68,128932,51638],{"class":335},[68,128934,61937],{"class":82},[68,128936,1498],{"class":335},[68,128938,128939],{"class":70,"line":1387},[68,128940,1772],{"class":335},[471,128942,128943,128951],{},[474,128944,128945],{},[477,128946,128947,128949],{},[480,128948,128861],{"align":23941},[480,128950,102896],{"align":23941},[518,128952,128953,128961,128968,128976],{},[477,128954,128955,128958],{},[523,128956,128957],{"align":23941},"repeat",[523,128959,128960],{"align":23941},"背景图像在纵向和横向上平铺（默认的）",[477,128962,128963,128965],{},[523,128964,61937],{"align":23941},[523,128966,128967],{"align":23941},"背景图像不平铺",[477,128969,128970,128973],{},[523,128971,128972],{"align":23941},"repeat-x",[523,128974,128975],{"align":23941},"背景图像在横向上平铺",[477,128977,128978,128981],{},[523,128979,128980],{"align":23941},"repeat-y",[523,128982,128983],{"align":23941},"背景图像在纵向平铺",[301,128985,128987],{"id":128986},"_824-背景图片位置","8.2.4 背景图片位置",[58,128989,128991],{"className":126748,"code":128990,"language":126750,"meta":63,"style":63},"\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",[65,128992,128993,128998,129004,129018,129022,129027,129033,129049,129053,129058,129064,129078],{"__ignoreMap":63},[68,128994,128995],{"class":70,"line":71},[68,128996,128997],{"class":393},"\u002F* 方位名词 *\u002F\n",[68,128999,129000,129002],{"class":70,"line":92},[68,129001,51812],{"class":51501},[68,129003,15777],{"class":335},[68,129005,129006,129009,129011,129013,129016],{"class":70,"line":1387},[68,129007,129008],{"class":82},"  background-position",[68,129010,51638],{"class":335},[68,129012,51793],{"class":82},[68,129014,129015],{"class":82}," top",[68,129017,1498],{"class":335},[68,129019,129020],{"class":70,"line":1402},[68,129021,1772],{"class":335},[68,129023,129024],{"class":70,"line":1408},[68,129025,129026],{"class":393},"\u002F* 精确单位 *\u002F\n",[68,129028,129029,129031],{"class":70,"line":1422},[68,129030,51812],{"class":51501},[68,129032,15777],{"class":335},[68,129034,129035,129037,129039,129041,129043,129045,129047],{"class":70,"line":1428},[68,129036,129008],{"class":82},[68,129038,51638],{"class":335},[68,129040,1033],{"class":82},[68,129042,51693],{"class":331},[68,129044,57705],{"class":82},[68,129046,51693],{"class":331},[68,129048,1498],{"class":335},[68,129050,129051],{"class":70,"line":1519},[68,129052,1772],{"class":335},[68,129054,129055],{"class":70,"line":1525},[68,129056,129057],{"class":393},"\u002F* 混合单位 *\u002F\n",[68,129059,129060,129062],{"class":70,"line":1537},[68,129061,51812],{"class":51501},[68,129063,15777],{"class":335},[68,129065,129066,129068,129070,129072,129074,129076],{"class":70,"line":1819},[68,129067,129008],{"class":82},[68,129069,51638],{"class":335},[68,129071,1033],{"class":82},[68,129073,51693],{"class":331},[68,129075,17349],{"class":82},[68,129077,1498],{"class":335},[68,129079,129080],{"class":70,"line":1824},[68,129081,1772],{"class":335},[19,129083,129084],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[471,129086,129087,129095],{},[474,129088,129089],{},[477,129090,129091,129093],{},[480,129092,128861],{"align":23941},[480,129094,26073],{"align":23941},[518,129096,129097,129104],{},[477,129098,129099,129101],{},[523,129100,52169],{"align":23941},[523,129102,129103],{"align":23941},"百分数|由浮点数和单位标识符组成的长度值",[477,129105,129106,129109],{},[523,129107,129108],{"align":23941},"position",[523,129110,129111],{"align":23941},"top|center|bottom|left|center|right 方位名词",[19,129113,129114],{},"其他说明：",[19,129116,129117],{},"①参数是方位名词",[19,129119,129120],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129122,129123],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129125,129126],{},"②参数是精确单位",[19,129128,129129],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129131,129132],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129134,129135],{},"③参数是混合单位",[19,129137,129138],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[301,129140,129142],{"id":129141},"_825-背景图片固定","8.2.5 背景图片固定",[58,129144,129146],{"className":126748,"code":129145,"language":126750,"meta":63,"style":63},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[65,129147,129148,129153,129159,129171,129175,129180,129186,129196],{"__ignoreMap":63},[68,129149,129150],{"class":70,"line":71},[68,129151,129152],{"class":393},"\u002F* 背景滚动（默认） *\u002F\n",[68,129154,129155,129157],{"class":70,"line":92},[68,129156,51812],{"class":51501},[68,129158,15777],{"class":335},[68,129160,129161,129164,129166,129169],{"class":70,"line":1387},[68,129162,129163],{"class":82},"  background-attachment",[68,129165,51638],{"class":335},[68,129167,129168],{"class":82},"scroll",[68,129170,1498],{"class":335},[68,129172,129173],{"class":70,"line":1402},[68,129174,1772],{"class":335},[68,129176,129177],{"class":70,"line":1408},[68,129178,129179],{"class":393},"\u002F* 背景固定 *\u002F\n",[68,129181,129182,129184],{"class":70,"line":1422},[68,129183,51812],{"class":51501},[68,129185,15777],{"class":335},[68,129187,129188,129190,129192,129194],{"class":70,"line":1428},[68,129189,129163],{"class":82},[68,129191,51638],{"class":335},[68,129193,86434],{"class":82},[68,129195,1498],{"class":335},[68,129197,129198],{"class":70,"line":1519},[68,129199,1772],{"class":335},[471,129201,129202,129211],{},[474,129203,129204],{},[477,129205,129206,129209],{},[480,129207,129208],{"align":23941},"参数",[480,129210,102896],{"align":23941},[518,129212,129213,129220],{},[477,129214,129215,129217],{},[523,129216,129168],{"align":23941},[523,129218,129219],{"align":23941},"背景图像是随对象内容滚动",[477,129221,129222,129224],{},[523,129223,86434],{"align":23941},[523,129225,129226],{"align":23941},"背景图像固定",[301,129228,129230],{"id":129229},"_826-背景样式合写","8.2.6 背景样式合写",[58,129232,129234],{"className":126748,"code":129233,"language":126750,"meta":63,"style":63},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[65,129235,129236,129241,129247,129275],{"__ignoreMap":63},[68,129237,129238],{"class":70,"line":71},[68,129239,129240],{"class":393},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[68,129242,129243,129245],{"class":70,"line":92},[68,129244,51812],{"class":51501},[68,129246,15777],{"class":335},[68,129248,129249,129251,129253,129255,129258,129260,129262,129264,129266,129269,129271,129273],{"class":70,"line":1387},[68,129250,70812],{"class":82},[68,129252,51638],{"class":335},[68,129254,61043],{"class":82},[68,129256,129257],{"class":82}," url",[68,129259,336],{"class":335},[68,129261,128846],{"class":5421},[68,129263,13919],{"class":335},[68,129265,61937],{"class":82},[68,129267,129268],{"class":82}," fixed",[68,129270,17349],{"class":82},[68,129272,129015],{"class":82},[68,129274,1498],{"class":335},[68,129276,129277],{"class":70,"line":1402},[68,129278,1772],{"class":335},[301,129280,129282],{"id":129281},"_827-背景色半透明","8.2.7 背景色半透明",[58,129284,129286],{"className":126748,"code":129285,"language":126750,"meta":63,"style":63},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[65,129287,129288,129294,129320],{"__ignoreMap":63},[68,129289,129290,129292],{"class":70,"line":71},[68,129291,51812],{"class":51501},[68,129293,15777],{"class":335},[68,129295,129296,129298,129300,129302,129304,129306,129308,129310,129312,129314,129316,129318],{"class":70,"line":92},[68,129297,70812],{"class":82},[68,129299,51638],{"class":335},[68,129301,55311],{"class":82},[68,129303,336],{"class":335},[68,129305,525],{"class":82},[68,129307,12640],{"class":335},[68,129309,525],{"class":82},[68,129311,12640],{"class":335},[68,129313,525],{"class":82},[68,129315,12640],{"class":335},[68,129317,100722],{"class":82},[68,129319,2925],{"class":335},[68,129321,129322],{"class":70,"line":1387},[68,129323,1772],{"class":335},[19,129325,99597],{},[19,129327,129328],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129330,129331],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129333,129334],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129336,129337],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[301,129339,129341],{"id":129340},"_828-总结","8.2.8 总结",[471,129343,129344,129355],{},[474,129345,129346],{},[477,129347,129348,129351,129353],{},[480,129349,129350],{"align":23941},"属性",[480,129352,102896],{"align":23941},[480,129354,486],{"align":23941},[518,129356,129357,129368,129379,129390,129401,129412,129423],{},[477,129358,129359,129362,129365],{},[523,129360,129361],{"align":23941},"background-color",[523,129363,129364],{"align":23941},"背景颜色",[523,129366,129367],{"align":23941},"预定义的颜色值\u002F十六进制\u002FRGB代码",[477,129369,129370,129373,129376],{},[523,129371,129372],{"align":23941},"background-image",[523,129374,129375],{"align":23941},"背景图片",[523,129377,129378],{"align":23941},"url(图片路径)",[477,129380,129381,129384,129387],{},[523,129382,129383],{"align":23941},"background-repeat",[523,129385,129386],{"align":23941},"是否平铺",[523,129388,129389],{"align":23941},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[477,129391,129392,129395,129398],{},[523,129393,129394],{"align":23941},"background-position",[523,129396,129397],{"align":23941},"背景位置",[523,129399,129400],{"align":23941},"length\u002Fposition 分别是x和y坐标",[477,129402,129403,129406,129409],{},[523,129404,129405],{"align":23941},"background-attachment",[523,129407,129408],{"align":23941},"背景附着",[523,129410,129411],{"align":23941},"scroll(背景滚动) \u002Ffixed (背景固定)",[477,129413,129414,129417,129420],{},[523,129415,129416],{"align":23941},"背景简写",[523,129418,129419],{"align":23941},"书写更简单",[523,129421,129422],{"align":23941},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[477,129424,129425,129428,129431],{},[523,129426,129427],{"align":23941},"背景半透明",[523,129429,129430],{"align":23941},"背景颜色半透明",[523,129432,129433],{"align":23941},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129435,129436],{},"颜色渐变：",[48,129438],{"style":50,"src":129439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[48,129441],{"style":50,"src":129442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[301,129444,129446],{"id":129445},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[58,129448,129450],{"className":127495,"code":129449,"language":127497,"meta":63,"style":63},"\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",[65,129451,129452,129467,129486,129505,129524,129543,129562],{"__ignoreMap":63},[68,129453,129454,129456,129458,129460,129462,129465],{"class":70,"line":71},[68,129455,1243],{"class":335},[68,129457,51812],{"class":51501},[68,129459,53687],{"class":74},[68,129461,381],{"class":335},[68,129463,129464],{"class":78},"\"nav\"",[68,129466,51508],{"class":335},[68,129468,129469,129471,129473,129475,129477,129479,129482,129484],{"class":70,"line":92},[68,129470,52345],{"class":335},[68,129472,30],{"class":51501},[68,129474,61258],{"class":74},[68,129476,381],{"class":335},[68,129478,61263],{"class":78},[68,129480,129481],{"class":335},">五彩导航1\u003C\u002F",[68,129483,30],{"class":51501},[68,129485,51508],{"class":335},[68,129487,129488,129490,129492,129494,129496,129498,129501,129503],{"class":70,"line":1387},[68,129489,52345],{"class":335},[68,129491,30],{"class":51501},[68,129493,61258],{"class":74},[68,129495,381],{"class":335},[68,129497,61263],{"class":78},[68,129499,129500],{"class":335},">五彩导航2\u003C\u002F",[68,129502,30],{"class":51501},[68,129504,51508],{"class":335},[68,129506,129507,129509,129511,129513,129515,129517,129520,129522],{"class":70,"line":1402},[68,129508,52345],{"class":335},[68,129510,30],{"class":51501},[68,129512,61258],{"class":74},[68,129514,381],{"class":335},[68,129516,61263],{"class":78},[68,129518,129519],{"class":335},">五彩导航3\u003C\u002F",[68,129521,30],{"class":51501},[68,129523,51508],{"class":335},[68,129525,129526,129528,129530,129532,129534,129536,129539,129541],{"class":70,"line":1408},[68,129527,52345],{"class":335},[68,129529,30],{"class":51501},[68,129531,61258],{"class":74},[68,129533,381],{"class":335},[68,129535,61263],{"class":78},[68,129537,129538],{"class":335},">五彩导航4\u003C\u002F",[68,129540,30],{"class":51501},[68,129542,51508],{"class":335},[68,129544,129545,129547,129549,129551,129553,129555,129558,129560],{"class":70,"line":1422},[68,129546,52345],{"class":335},[68,129548,30],{"class":51501},[68,129550,61258],{"class":74},[68,129552,381],{"class":335},[68,129554,61263],{"class":78},[68,129556,129557],{"class":335},">五彩导航5\u003C\u002F",[68,129559,30],{"class":51501},[68,129561,51508],{"class":335},[68,129563,129564,129566,129568],{"class":70,"line":1428},[68,129565,51986],{"class":335},[68,129567,51812],{"class":51501},[68,129569,51508],{"class":335},[58,129571,129573],{"className":126748,"code":129572,"language":126750,"meta":63,"style":63},".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",[65,129574,129575,129584,129594,129606,129618,129628,129640,129650,129654,129679,129702,129725,129748],{"__ignoreMap":63},[68,129576,129577,129580,129582],{"class":70,"line":71},[68,129578,129579],{"class":74},".nav",[68,129581,1606],{"class":51501},[68,129583,15777],{"class":335},[68,129585,129586,129588,129590,129592],{"class":70,"line":92},[68,129587,128364],{"class":82},[68,129589,51638],{"class":335},[68,129591,72584],{"class":82},[68,129593,1498],{"class":335},[68,129595,129596,129598,129600,129602,129604],{"class":70,"line":1387},[68,129597,70769],{"class":82},[68,129599,51638],{"class":335},[68,129601,1150],{"class":82},[68,129603,51693],{"class":331},[68,129605,1498],{"class":335},[68,129607,129608,129610,129612,129614,129616],{"class":70,"line":1402},[68,129609,70989],{"class":82},[68,129611,51638],{"class":335},[68,129613,1189],{"class":82},[68,129615,51693],{"class":331},[68,129617,1498],{"class":335},[68,129619,129620,129622,129624,129626],{"class":70,"line":1408},[68,129621,70727],{"class":82},[68,129623,51638],{"class":335},[68,129625,51793],{"class":82},[68,129627,1498],{"class":335},[68,129629,129630,129632,129634,129636,129638],{"class":70,"line":1422},[68,129631,127432],{"class":82},[68,129633,51638],{"class":335},[68,129635,1189],{"class":82},[68,129637,51693],{"class":331},[68,129639,1498],{"class":335},[68,129641,129642,129644,129646,129648],{"class":70,"line":1428},[68,129643,71106],{"class":82},[68,129645,51638],{"class":335},[68,129647,61043],{"class":82},[68,129649,1498],{"class":335},[68,129651,129652],{"class":70,"line":1519},[68,129653,1772],{"class":335},[68,129655,129656,129658,129660,129663,129665,129667,129670,129672,129674,129676],{"class":70,"line":1525},[68,129657,129579],{"class":74},[68,129659,1606],{"class":51501},[68,129661,129662],{"class":74},":nth-child",[68,129664,336],{"class":335},[68,129666,551],{"class":82},[68,129668,129669],{"class":335},") { ",[68,129671,129361],{"class":82},[68,129673,51638],{"class":335},[68,129675,128779],{"class":82},[68,129677,129678],{"class":335},"; }\n",[68,129680,129681,129683,129685,129687,129689,129691,129693,129695,129697,129700],{"class":70,"line":1537},[68,129682,129579],{"class":74},[68,129684,1606],{"class":51501},[68,129686,129662],{"class":74},[68,129688,336],{"class":335},[68,129690,412],{"class":82},[68,129692,129669],{"class":335},[68,129694,129361],{"class":82},[68,129696,51638],{"class":335},[68,129698,129699],{"class":82},"#ff0000",[68,129701,129678],{"class":335},[68,129703,129704,129706,129708,129710,129712,129714,129716,129718,129720,129723],{"class":70,"line":1819},[68,129705,129579],{"class":74},[68,129707,1606],{"class":51501},[68,129709,129662],{"class":74},[68,129711,336],{"class":335},[68,129713,406],{"class":82},[68,129715,129669],{"class":335},[68,129717,129361],{"class":82},[68,129719,51638],{"class":335},[68,129721,129722],{"class":82},"#00a4ff",[68,129724,129678],{"class":335},[68,129726,129727,129729,129731,129733,129735,129737,129739,129741,129743,129746],{"class":70,"line":1824},[68,129728,129579],{"class":74},[68,129730,1606],{"class":51501},[68,129732,129662],{"class":74},[68,129734,336],{"class":335},[68,129736,626],{"class":82},[68,129738,129669],{"class":335},[68,129740,129361],{"class":82},[68,129742,51638],{"class":335},[68,129744,129745],{"class":82},"#ff00ff",[68,129747,129678],{"class":335},[68,129749,129750,129752,129754,129756,129758,129760,129762,129764,129766,129769],{"class":70,"line":1830},[68,129751,129579],{"class":74},[68,129753,1606],{"class":51501},[68,129755,129662],{"class":74},[68,129757,336],{"class":335},[68,129759,652],{"class":82},[68,129761,129669],{"class":335},[68,129763,129361],{"class":82},[68,129765,51638],{"class":335},[68,129767,129768],{"class":82},"#00ff00",[68,129770,129678],{"class":335},[14,129772,129774],{"id":129773},"_83-css三大特性","8.3 css三大特性",[301,129776,129778],{"id":129777},"_831-层叠性","8.3.1 层叠性",[19,129780,129781],{},"为了解决样式冲突问题",[19,129783,129784],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129786,129787],{},"   ②样式不冲突，不会层叠",[301,129789,129791],{"id":129790},"_832-继承性","8.3.2 继承性",[19,129793,129794],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129796,129797],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[58,129799,129801],{"className":126748,"code":129800,"language":126750,"meta":63,"style":63},"p {\n  color: #333;\n}\n",[65,129802,129803,129809,129819],{"__ignoreMap":63},[68,129804,129805,129807],{"class":70,"line":71},[68,129806,19],{"class":51501},[68,129808,15777],{"class":335},[68,129810,129811,129813,129815,129817],{"class":70,"line":92},[68,129812,71106],{"class":82},[68,129814,51638],{"class":335},[68,129816,62570],{"class":82},[68,129818,1498],{"class":335},[68,129820,129821],{"class":70,"line":1387},[68,129822,1772],{"class":335},[48,129824],{"style":50,"src":129825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129827,129828],{},"解释：①行高可以跟单位也可以不跟单位",[19,129830,129831],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129833,129834],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129836,129837],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[301,129839,129841],{"id":129840},"_833-优先级","8.3.3 优先级",[23,129843,129844,129847],{},[26,129845,129846],{},"选择器相同，则执行层叠性",[26,129848,129849],{},"选择器不同，则根据选择器权重执行",[471,129851,129852,129862],{},[474,129853,129854],{},[477,129855,129856,129859],{},[480,129857,129858],{"align":23941},"选择器",[480,129860,129861],{"align":23941},"选择器权重",[518,129863,129864,129872,129880,129888,129896,129904],{},[477,129865,129866,129869],{},[523,129867,129868],{"align":23941},"继承 或者*",[523,129870,129871],{"align":23941},"0，0，0，0",[477,129873,129874,129877],{},[523,129875,129876],{"align":23941},"标签选择器",[523,129878,129879],{"align":23941},"0，0，0，1",[477,129881,129882,129885],{},[523,129883,129884],{"align":23941},"类选择器，伪类选择器",[523,129886,129887],{"align":23941},"0，0，1，0",[477,129889,129890,129893],{},[523,129891,129892],{"align":23941},"ID选择器",[523,129894,129895],{"align":23941},"0，1，0，0",[477,129897,129898,129901],{},[523,129899,129900],{"align":23941},"行内样式",[523,129902,129903],{"align":23941},"1，0，0，0",[477,129905,129906,129909],{},[523,129907,129908],{"align":23941},"！important",[523,129910,129911],{"align":23941},"无穷大",[19,129913,129914],{},"! important用法：",[58,129916,129918],{"className":126748,"code":129917,"language":126750,"meta":63,"style":63},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[65,129919,129920,129925,129931,129944,129948,129953,129959,129969],{"__ignoreMap":63},[68,129921,129922],{"class":70,"line":71},[68,129923,129924],{"class":393},"\u002F* !important 拥有最高优先级 *\u002F\n",[68,129926,129927,129929],{"class":70,"line":92},[68,129928,51812],{"class":51501},[68,129930,15777],{"class":335},[68,129932,129933,129935,129937,129939,129942],{"class":70,"line":1387},[68,129934,71106],{"class":82},[68,129936,51638],{"class":335},[68,129938,51846],{"class":82},[68,129940,129941],{"class":331}," !important",[68,129943,1498],{"class":335},[68,129945,129946],{"class":70,"line":1402},[68,129947,1772],{"class":335},[68,129949,129950],{"class":70,"line":1408},[68,129951,129952],{"class":393},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[68,129954,129955,129957],{"class":70,"line":1422},[68,129956,51812],{"class":51501},[68,129958,15777],{"class":335},[68,129960,129961,129963,129965,129967],{"class":70,"line":1428},[68,129962,71106],{"class":82},[68,129964,51638],{"class":335},[68,129966,57622],{"class":82},[68,129968,1498],{"class":335},[68,129970,129971],{"class":70,"line":1519},[68,129972,1772],{"class":335},[19,129974,129975],{},"优先级注意点：",[19,129977,129978],{},"①权重是有4组数字组成,但是不会有进位",[19,129980,129981],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129983,129984],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129986,129987],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129989,129990],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129992,129993],{},"⑥复合选择器",[471,129995,129996,130006],{},[474,129997,129998],{},[477,129999,130000,130003],{},[480,130001,130002],{"align":23941},"div ul li",[480,130004,130005],{"align":23941},"0,0,0,3",[518,130007,130008,130016,130024],{},[477,130009,130010,130013],{},[523,130011,130012],{"align":23941},".nav ul li",[523,130014,130015],{"align":23941},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[477,130017,130018,130021],{},[523,130019,130020],{"align":23941},"a:hover",[523,130022,130023],{"align":23941},"0,0,1,1",[477,130025,130026,130029],{},[523,130027,130028],{"align":23941},".nav a",[523,130030,130023],{"align":23941},[250,130032,130033],{},"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":63,"searchDepth":92,"depth":92,"links":130035},[130036,130044,130055],{"id":128144,"depth":92,"text":128145,"children":130037},[130038,130039,130040,130041,130042,130043],{"id":128157,"depth":1387,"text":128158},{"id":128229,"depth":1387,"text":128230},{"id":128301,"depth":1387,"text":128302},{"id":128332,"depth":1387,"text":128333},{"id":128339,"depth":1387,"text":128340},{"id":128492,"depth":1387,"text":128493},{"id":128800,"depth":92,"text":128801,"children":130045},[130046,130047,130048,130049,130050,130051,130052,130053,130054],{"id":128807,"depth":1387,"text":128808},{"id":128817,"depth":1387,"text":128818},{"id":128913,"depth":1387,"text":128914},{"id":128986,"depth":1387,"text":128987},{"id":129141,"depth":1387,"text":129142},{"id":129229,"depth":1387,"text":129230},{"id":129281,"depth":1387,"text":129282},{"id":129340,"depth":1387,"text":129341},{"id":129445,"depth":1387,"text":129446},{"id":129773,"depth":92,"text":129774,"children":130056},[130057,130058,130059],{"id":129777,"depth":1387,"text":129778},{"id":129790,"depth":1387,"text":129791},{"id":129840,"depth":1387,"text":129841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128136,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130066,"title":130067,"body":130068,"description":257,"extension":258,"meta":131658,"navigation":260,"path":131659,"seo":131660,"stem":131661,"__hash__":131662},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130069,"toc":131637},[130070,130073,130077,130080,130083,130086,130089,130092,130095,130098,130102,130110,130147,130183,130186,130200,130205,130239,130242,130335,130340,130343,130373,130376,130381,130389,130393,130400,130446,130490,130495,130498,130501,130504,130507,130510,130513,130515,130518,130522,130527,130571,130576,130579,130582,130619,130624,130627,130630,130633,130636,130668,130671,130674,130677,130709,130712,130715,130718,130722,130725,130757,130760,130764,130784,130787,130795,130798,130802,130807,130810,130842,130847,130850,130888,130892,130897,130900,130903,130934,130937,130954,130959,131011,131071,131076,131130,131168,131172,131176,131179,131183,131191,131194,131196,131207,131212,131260,131294,131297,131300,131303,131306,131350,131353,131356,131359,131362,131365,131368,131412,131415,131418,131421,131424,131427,131430,131436,131439,131483,131486,131489,131492,131495,131498,131542,131545,131547,131550,131554,131558,131596,131600,131603,131606,131610,131618,131622,131625,131628,131631,131634],[10,130071,130067],{"id":130072},"_9-css盒模型浮动与切图",[14,130074,130076],{"id":130075},"_91-盒子模型","9.1 盒子模型",[19,130078,130079],{},"利用盒子来设计网页",[19,130081,130082],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130084,130085],{},"网页布局设置：",[19,130087,130088],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130090,130091],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130093,130094],{},"③往盒子里装内容",[48,130096],{"style":50,"src":130097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[301,130099,130101],{"id":130100},"_911-边框border","9.1.1 边框（border）",[23,130103,130104,130107],{},[26,130105,130106],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[26,130108,130109],{},"语法",[58,130111,130113],{"className":126748,"code":130112,"language":126750,"meta":63,"style":63},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[65,130114,130115,130120,130126,130143],{"__ignoreMap":63},[68,130116,130117],{"class":70,"line":71},[68,130118,130119],{"class":393},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[68,130121,130122,130124],{"class":70,"line":92},[68,130123,51812],{"class":51501},[68,130125,15777],{"class":335},[68,130127,130128,130130,130132,130134,130136,130138,130141],{"class":70,"line":1387},[68,130129,71097],{"class":82},[68,130131,51638],{"class":335},[68,130133,551],{"class":82},[68,130135,51693],{"class":331},[68,130137,51722],{"class":82},[68,130139,130140],{"class":82}," #ccc",[68,130142,1498],{"class":335},[68,130144,130145],{"class":70,"line":1402},[68,130146,1772],{"class":335},[471,130148,130149,130157],{},[474,130150,130151],{},[477,130152,130153,130155],{},[480,130154,129350],{"align":23941},[480,130156,102896],{"align":23941},[518,130158,130159,130167,130175],{},[477,130160,130161,130164],{},[523,130162,130163],{"align":23941},"border-width",[523,130165,130166],{"align":23941},"定义边框粗细，单位是px",[477,130168,130169,130172],{},[523,130170,130171],{"align":23941},"border-style",[523,130173,130174],{"align":23941},"边框的样式",[477,130176,130177,130180],{},[523,130178,130179],{"align":23941},"border-color",[523,130181,130182],{"align":23941},"边框的颜色",[19,130184,130185],{},"边框样式 border-style 可以设置如下值：",[42,130187,130188,130191,130194,130197],{},[26,130189,130190],{},"none：没有边框即忽略所有边框的宽度（默认值）",[26,130192,130193],{},"solid：边框为单实线(最为常用的)",[26,130195,130196],{},"dashed：边框为虚线",[26,130198,130199],{},"dotted：边框为点线",[23,130201,130202],{"start":1387},[26,130203,130204],{},"边框的合写分写",[58,130206,130207],{"className":126748,"code":130112,"language":126750,"meta":63,"style":63},[65,130208,130209,130213,130219,130235],{"__ignoreMap":63},[68,130210,130211],{"class":70,"line":71},[68,130212,130119],{"class":393},[68,130214,130215,130217],{"class":70,"line":92},[68,130216,51812],{"class":51501},[68,130218,15777],{"class":335},[68,130220,130221,130223,130225,130227,130229,130231,130233],{"class":70,"line":1387},[68,130222,71097],{"class":82},[68,130224,51638],{"class":335},[68,130226,551],{"class":82},[68,130228,51693],{"class":331},[68,130230,51722],{"class":82},[68,130232,130140],{"class":82},[68,130234,1498],{"class":335},[68,130236,130237],{"class":70,"line":1402},[68,130238,1772],{"class":335},[19,130240,130241],{},"边框分开写法：",[58,130243,130245],{"className":126748,"code":130244,"language":126750,"meta":63,"style":63},"\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",[65,130246,130247,130252,130258,130276,130294,130313,130331],{"__ignoreMap":63},[68,130248,130249],{"class":70,"line":71},[68,130250,130251],{"class":393},"\u002F* 边框分开写法 *\u002F\n",[68,130253,130254,130256],{"class":70,"line":92},[68,130255,51812],{"class":51501},[68,130257,15777],{"class":335},[68,130259,130260,130263,130265,130267,130269,130271,130274],{"class":70,"line":1387},[68,130261,130262],{"class":82},"  border-top",[68,130264,51638],{"class":335},[68,130266,551],{"class":82},[68,130268,51693],{"class":331},[68,130270,51722],{"class":82},[68,130272,130273],{"class":82}," #000",[68,130275,1498],{"class":335},[68,130277,130278,130281,130283,130285,130287,130289,130292],{"class":70,"line":1402},[68,130279,130280],{"class":82},"  border-right",[68,130282,51638],{"class":335},[68,130284,412],{"class":82},[68,130286,51693],{"class":331},[68,130288,62442],{"class":82},[68,130290,130291],{"class":82}," #333",[68,130293,1498],{"class":335},[68,130295,130296,130299,130301,130303,130305,130308,130311],{"class":70,"line":1408},[68,130297,130298],{"class":82},"  border-bottom",[68,130300,51638],{"class":335},[68,130302,406],{"class":82},[68,130304,51693],{"class":331},[68,130306,130307],{"class":82}," dotted",[68,130309,130310],{"class":82}," #666",[68,130312,1498],{"class":335},[68,130314,130315,130318,130320,130322,130324,130326,130329],{"class":70,"line":1422},[68,130316,130317],{"class":82},"  border-left",[68,130319,51638],{"class":335},[68,130321,551],{"class":82},[68,130323,51693],{"class":331},[68,130325,51722],{"class":82},[68,130327,130328],{"class":82}," #999",[68,130330,1498],{"class":335},[68,130332,130333],{"class":70,"line":1428},[68,130334,1772],{"class":335},[23,130336,130337],{"start":1402},[26,130338,130339],{},"表格的细线边框",[19,130341,130342],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[58,130344,130346],{"className":126748,"code":130345,"language":126750,"meta":63,"style":63},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[65,130347,130348,130353,130359,130369],{"__ignoreMap":63},[68,130349,130350],{"class":70,"line":71},[68,130351,130352],{"class":393},"\u002F* 表格细线边框合并 *\u002F\n",[68,130354,130355,130357],{"class":70,"line":92},[68,130356,471],{"class":51501},[68,130358,15777],{"class":335},[68,130360,130361,130363,130365,130367],{"class":70,"line":1387},[68,130362,70779],{"class":82},[68,130364,51638],{"class":335},[68,130366,65236],{"class":82},[68,130368,1498],{"class":335},[68,130370,130371],{"class":70,"line":1402},[68,130372,1772],{"class":335},[19,130374,130375],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[23,130377,130378],{"start":1408},[26,130379,130380],{},"解决边框额外增加盒子的实际大小的方法：",[42,130382,130383,130386],{},[26,130384,130385],{},"测量盒子大小的时候,不量边框",[26,130387,130388],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[301,130390,130392],{"id":130391},"_912-内边距","9.1.2 内边距",[23,130394,130395,130398],{},[26,130396,130397],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[26,130399,130109],{},[471,130401,130402,130412],{},[474,130403,130404],{},[477,130405,130406,130409],{},[480,130407,130408],{"align":23941},"值的个数",[480,130410,130411],{"align":23941},"表达意思",[518,130413,130414,130422,130430,130438],{},[477,130415,130416,130419],{},[523,130417,130418],{"align":23941},"padding: 5px;",[523,130420,130421],{"align":23941},"1个值，代表上下左右都有5个元素",[477,130423,130424,130427],{},[523,130425,130426],{"align":23941},"padding: 5px 10px;",[523,130428,130429],{"align":23941},"2个值，代表上下内边距为5像素，左右内边距为10像素",[477,130431,130432,130435],{},[523,130433,130434],{"align":23941},"padding: 5px 10px 20px;",[523,130436,130437],{"align":23941},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[477,130439,130440,130443],{},[523,130441,130442],{"align":23941},"padding: 5px 10px 20px 30px;",[523,130444,130445],{"align":23941},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[471,130447,130448,130456],{},[474,130449,130450],{},[477,130451,130452,130454],{},[480,130453,129350],{"align":23941},[480,130455,102896],{"align":23941},[518,130457,130458,130466,130474,130482],{},[477,130459,130460,130463],{},[523,130461,130462],{"align":23941},"padding-left",[523,130464,130465],{"align":23941},"左内边距",[477,130467,130468,130471],{},[523,130469,130470],{"align":23941},"padding-right",[523,130472,130473],{"align":23941},"右内边距",[477,130475,130476,130479],{},[523,130477,130478],{"align":23941},"padding-top",[523,130480,130481],{"align":23941},"上内边距",[477,130483,130484,130487],{},[523,130485,130486],{"align":23941},"padding-bottom",[523,130488,130489],{"align":23941},"下内边距",[23,130491,130492],{"start":1387},[26,130493,130494],{},"内边距会影响盒子的实际大小",[19,130496,130497],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130499,130500],{},"①内容和边框有了距离，添加了内边距",[19,130502,130503],{},"②padding影响了盒子实际大小",[19,130505,130506],{},"内边距对盒子大小的影响：",[19,130508,130509],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130511,130512],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130514,95421],{},[19,130516,130517],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[301,130519,130521],{"id":130520},"_913-外边距","9.1.3 外边距",[23,130523,130524],{},[26,130525,130526],{},"控制盒子与盒子之间的距离",[471,130528,130529,130537],{},[474,130530,130531],{},[477,130532,130533,130535],{},[480,130534,129350],{"align":23941},[480,130536,102896],{"align":23941},[518,130538,130539,130547,130555,130563],{},[477,130540,130541,130544],{},[523,130542,130543],{"align":23941},"margin-left",[523,130545,130546],{"align":23941},"左外边距",[477,130548,130549,130552],{},[523,130550,130551],{"align":23941},"margin-right",[523,130553,130554],{"align":23941},"右外边距",[477,130556,130557,130560],{},[523,130558,130559],{"align":23941},"margin-top",[523,130561,130562],{"align":23941},"上外边距",[477,130564,130565,130568],{},[523,130566,130567],{"align":23941},"margin-bottom",[523,130569,130570],{"align":23941},"下外边距",[23,130572,130573],{"start":92},[26,130574,130575],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130577,130578],{},"①盒子必须指定了宽度（width）",[19,130580,130581],{},"②盒子左右的外边距都设置为 auto",[58,130583,130585],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[65,130586,130587,130592,130599,130615],{"__ignoreMap":63},[68,130588,130589],{"class":70,"line":71},[68,130590,130591],{"class":393},"\u002F* margin 复合写法（同上） *\u002F\n",[68,130593,130594,130597],{"class":70,"line":92},[68,130595,130596],{"class":74},".box",[68,130598,15777],{"class":335},[68,130600,130601,130603,130605,130607,130609,130612],{"class":70,"line":1387},[68,130602,70671],{"class":82},[68,130604,51638],{"class":335},[68,130606,525],{"class":82},[68,130608,51757],{"class":82},[68,130610,130611],{"class":335},";  ",[68,130613,130614],{"class":393},"\u002F* 块级盒子水平居中 *\u002F\n",[68,130616,130617],{"class":70,"line":1402},[68,130618,1772],{"class":335},[23,130620,130621],{"start":1387},[26,130622,130623],{},"外边距塌陷问题",[19,130625,130626],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[48,130628],{"style":50,"src":130629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130631,130632],{},"解决方案：",[19,130634,130635],{},"①可以为父亲元素定义上边距",[58,130637,130638],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},[65,130639,130640,130644,130650,130664],{"__ignoreMap":63},[68,130641,130642],{"class":70,"line":71},[68,130643,130591],{"class":393},[68,130645,130646,130648],{"class":70,"line":92},[68,130647,130596],{"class":74},[68,130649,15777],{"class":335},[68,130651,130652,130654,130656,130658,130660,130662],{"class":70,"line":1387},[68,130653,70671],{"class":82},[68,130655,51638],{"class":335},[68,130657,525],{"class":82},[68,130659,51757],{"class":82},[68,130661,130611],{"class":335},[68,130663,130614],{"class":393},[68,130665,130666],{"class":70,"line":1402},[68,130667,1772],{"class":335},[19,130669,130670],{},"②可以为父亲元素定义上内边距",[19,130672,130673],{},"③可以为父亲元素添加overflow:hidden",[48,130675],{"style":50,"src":130676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[58,130678,130679],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},[65,130680,130681,130685,130691,130705],{"__ignoreMap":63},[68,130682,130683],{"class":70,"line":71},[68,130684,130591],{"class":393},[68,130686,130687,130689],{"class":70,"line":92},[68,130688,130596],{"class":74},[68,130690,15777],{"class":335},[68,130692,130693,130695,130697,130699,130701,130703],{"class":70,"line":1387},[68,130694,70671],{"class":82},[68,130696,51638],{"class":335},[68,130698,525],{"class":82},[68,130700,51757],{"class":82},[68,130702,130611],{"class":335},[68,130704,130614],{"class":393},[68,130706,130707],{"class":70,"line":1402},[68,130708,1772],{"class":335},[48,130710],{"style":50,"src":130711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130713,130714],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130716,130717],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[301,130719,130721],{"id":130720},"_914-清除内外边距","9.1.4 清除内外边距",[19,130723,130724],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[58,130726,130727],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},[65,130728,130729,130733,130739,130753],{"__ignoreMap":63},[68,130730,130731],{"class":70,"line":71},[68,130732,130591],{"class":393},[68,130734,130735,130737],{"class":70,"line":92},[68,130736,130596],{"class":74},[68,130738,15777],{"class":335},[68,130740,130741,130743,130745,130747,130749,130751],{"class":70,"line":1387},[68,130742,70671],{"class":82},[68,130744,51638],{"class":335},[68,130746,525],{"class":82},[68,130748,51757],{"class":82},[68,130750,130611],{"class":335},[68,130752,130614],{"class":393},[68,130754,130755],{"class":70,"line":1402},[68,130756,1772],{"class":335},[19,130758,130759],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[301,130761,130763],{"id":130762},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[42,130765,130766,130769,130772,130775,130778,130781],{},[26,130767,130768],{},"文件→打开 ：可以打开我们要测量的图片",[26,130770,130771],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[26,130773,130774],{},"右击标尺，把里面的单位改为像素",[26,130776,130777],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[26,130779,130780],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[26,130782,130783],{},"用选区拖动 可以测量大小",[48,130785],{"style":50,"src":130786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[42,130788,130789,130792],{},[26,130790,130791],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[26,130793,130794],{},"吸管取色工具",[48,130796],{"style":50,"src":130797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[301,130799,130801],{"id":130800},"_916-案例","9.1.6 案例",[23,130803,130804],{},[26,130805,130806],{},"小米商品",[48,130808],{"style":50,"src":130809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[58,130811,130812],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},[65,130813,130814,130818,130824,130838],{"__ignoreMap":63},[68,130815,130816],{"class":70,"line":71},[68,130817,130591],{"class":393},[68,130819,130820,130822],{"class":70,"line":92},[68,130821,130596],{"class":74},[68,130823,15777],{"class":335},[68,130825,130826,130828,130830,130832,130834,130836],{"class":70,"line":1387},[68,130827,70671],{"class":82},[68,130829,51638],{"class":335},[68,130831,525],{"class":82},[68,130833,51757],{"class":82},[68,130835,130611],{"class":335},[68,130837,130614],{"class":393},[68,130839,130840],{"class":70,"line":1402},[68,130841,1772],{"class":335},[23,130843,130844],{"start":92},[26,130845,130846],{},"快报模块",[48,130848],{"style":50,"src":130849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[58,130851,130853],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[65,130854,130855,130860,130875,130880],{"__ignoreMap":63},[68,130856,130857],{"class":70,"line":71},[68,130858,130859],{"class":393},"\u003C!-- HTML 代码示例 -->\n",[68,130861,130862,130864,130866,130868,130870,130873],{"class":70,"line":92},[68,130863,1243],{"class":335},[68,130865,51812],{"class":51501},[68,130867,53687],{"class":74},[68,130869,381],{"class":335},[68,130871,130872],{"class":78},"\"example\"",[68,130874,51508],{"class":335},[68,130876,130877],{"class":70,"line":1387},[68,130878,130879],{"class":335},"  示例内容\n",[68,130881,130882,130884,130886],{"class":70,"line":1402},[68,130883,51986],{"class":335},[68,130885,51812],{"class":51501},[68,130887,51508],{"class":335},[301,130889,130891],{"id":130890},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[23,130893,130894],{},[26,130895,130896],{},"圆角边框",[19,130898,130899],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[48,130901],{"style":50,"src":130902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[58,130904,130906],{"className":126748,"code":130905,"language":126750,"meta":63,"style":63},"div {\n  border: 1px solid #ccc;\n}\n",[65,130907,130908,130914,130930],{"__ignoreMap":63},[68,130909,130910,130912],{"class":70,"line":71},[68,130911,51812],{"class":51501},[68,130913,15777],{"class":335},[68,130915,130916,130918,130920,130922,130924,130926,130928],{"class":70,"line":92},[68,130917,71097],{"class":82},[68,130919,51638],{"class":335},[68,130921,551],{"class":82},[68,130923,51693],{"class":331},[68,130925,51722],{"class":82},[68,130927,130140],{"class":82},[68,130929,1498],{"class":335},[68,130931,130932],{"class":70,"line":1387},[68,130933,1772],{"class":335},[19,130935,130936],{},"解释:",[42,130938,130939,130942,130945,130948,130951],{},[26,130940,130941],{},"参数值可以为数值或百分比的形式",[26,130943,130944],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[26,130946,130947],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[26,130949,130950],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[26,130952,130953],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[23,130955,130956],{"start":92},[26,130957,130958],{},"盒子阴影",[58,130960,130962],{"className":126748,"code":130961,"language":126750,"meta":63,"style":63},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[65,130963,130964,130970,131007],{"__ignoreMap":63},[68,130965,130966,130968],{"class":70,"line":71},[68,130967,51812],{"class":51501},[68,130969,15777],{"class":335},[68,130971,130972,130975,130977,130979,130981,130983,130985,130987,130989,130991,130993,130995,130997,130999,131001,131003,131005],{"class":70,"line":92},[68,130973,130974],{"class":82},"  box-shadow",[68,130976,51638],{"class":335},[68,130978,525],{"class":82},[68,130980,14960],{"class":82},[68,130982,51693],{"class":331},[68,130984,2244],{"class":82},[68,130986,51693],{"class":331},[68,130988,78968],{"class":82},[68,130990,336],{"class":335},[68,130992,525],{"class":82},[68,130994,12640],{"class":335},[68,130996,525],{"class":82},[68,130998,12640],{"class":335},[68,131000,525],{"class":82},[68,131002,12640],{"class":335},[68,131004,86411],{"class":82},[68,131006,2925],{"class":335},[68,131008,131009],{"class":70,"line":1387},[68,131010,1772],{"class":335},[471,131012,131013,131021],{},[474,131014,131015],{},[477,131016,131017,131019],{},[480,131018,486],{"align":23941},[480,131020,27693],{"align":23941},[518,131022,131023,131031,131039,131047,131055,131063],{},[477,131024,131025,131028],{},[523,131026,131027],{"align":23941},"h-shadow",[523,131029,131030],{"align":23941},"必需,水平阴影的位置,允许负值",[477,131032,131033,131036],{},[523,131034,131035],{"align":23941},"v-shadow",[523,131037,131038],{"align":23941},"必需,垂直阴影的位置,允许负值",[477,131040,131041,131044],{},[523,131042,131043],{"align":23941},"blur",[523,131045,131046],{"align":23941},"可选,模糊距离,就是影子的虚实",[477,131048,131049,131052],{},[523,131050,131051],{"align":23941},"spread",[523,131053,131054],{"align":23941},"可选,阴影尺寸",[477,131056,131057,131060],{},[523,131058,131059],{"align":23941},"color",[523,131061,131062],{"align":23941},"可选,阴影的颜色",[477,131064,131065,131068],{},[523,131066,131067],{"align":23941},"inset",[523,131069,131070],{"align":23941},"可选,将外部阴影(outset)改为内部阴影",[23,131072,131073],{"start":1387},[26,131074,131075],{},"文字阴影",[58,131077,131079],{"className":126748,"code":131078,"language":126750,"meta":63,"style":63},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[65,131080,131081,131087,131126],{"__ignoreMap":63},[68,131082,131083,131085],{"class":70,"line":71},[68,131084,19],{"class":51501},[68,131086,15777],{"class":335},[68,131088,131089,131092,131094,131096,131098,131100,131102,131104,131106,131108,131110,131112,131114,131116,131118,131120,131122,131124],{"class":70,"line":92},[68,131090,131091],{"class":82},"  text-shadow",[68,131093,51638],{"class":335},[68,131095,551],{"class":82},[68,131097,51693],{"class":331},[68,131099,25322],{"class":82},[68,131101,51693],{"class":331},[68,131103,14960],{"class":82},[68,131105,51693],{"class":331},[68,131107,78968],{"class":82},[68,131109,336],{"class":335},[68,131111,525],{"class":82},[68,131113,12640],{"class":335},[68,131115,525],{"class":82},[68,131117,12640],{"class":335},[68,131119,525],{"class":82},[68,131121,12640],{"class":335},[68,131123,100722],{"class":82},[68,131125,2925],{"class":335},[68,131127,131128],{"class":70,"line":1387},[68,131129,1772],{"class":335},[471,131131,131132,131140],{},[474,131133,131134],{},[477,131135,131136,131138],{},[480,131137,486],{"align":23941},[480,131139,27693],{"align":23941},[518,131141,131142,131148,131155,131162],{},[477,131143,131144,131146],{},[523,131145,131027],{"align":23941},[523,131147,131030],{"align":23941},[477,131149,131150,131152],{},[523,131151,131035],{"align":23941},[523,131153,131154],{"align":23941},"必需,垂直阴影位置,允许负值",[477,131156,131157,131159],{},[523,131158,131043],{"align":23941},[523,131160,131161],{"align":23941},"可选,模糊的距离",[477,131163,131164,131166],{},[523,131165,131059],{"align":23941},[523,131167,131062],{"align":23941},[14,131169,131171],{"id":131170},"_92-浮动","9.2 浮动",[301,131173,131175],{"id":131174},"_921-浮动介绍","9.2.1 浮动介绍",[19,131177,131178],{},"在16.2中详细介绍",[301,131180,131182],{"id":131181},"_922-清除浮动","9.2.2 清除浮动",[23,131184,131185,131188],{},[26,131186,131187],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[26,131189,131190],{},"清除浮动的本质",[19,131192,131193],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131195,9230],{},[42,131197,131198,131201,131204],{},[26,131199,131200],{},"如果父盒子本身有高度，则不需要清除浮动",[26,131202,131203],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[26,131205,131206],{},"父级有了高度，就不会影响下面的标准流了",[23,131208,131209],{"start":1387},[26,131210,131211],{},"清除浮动样式",[58,131213,131215],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[65,131216,131217,131224,131235,131239,131246,131256],{"__ignoreMap":63},[68,131218,131219,131222],{"class":70,"line":71},[68,131220,131221],{"class":74},".left",[68,131223,15777],{"class":335},[68,131225,131226,131229,131231,131233],{"class":70,"line":92},[68,131227,131228],{"class":82},"  float",[68,131230,51638],{"class":335},[68,131232,23941],{"class":82},[68,131234,1498],{"class":335},[68,131236,131237],{"class":70,"line":1387},[68,131238,1772],{"class":335},[68,131240,131241,131244],{"class":70,"line":1402},[68,131242,131243],{"class":74},".right",[68,131245,15777],{"class":335},[68,131247,131248,131250,131252,131254],{"class":70,"line":1408},[68,131249,131228],{"class":82},[68,131251,51638],{"class":335},[68,131253,72723],{"class":82},[68,131255,1498],{"class":335},[68,131257,131258],{"class":70,"line":1422},[68,131259,1772],{"class":335},[471,131261,131262,131270],{},[474,131263,131264],{},[477,131265,131266,131268],{},[480,131267,127212],{"align":23941},[480,131269,27693],{"align":23941},[518,131271,131272,131279,131286],{},[477,131273,131274,131276],{},[523,131275,23941],{"align":23941},[523,131277,131278],{"align":23941},"不允许左侧有浮动元素（清除左侧浮动的影响）",[477,131280,131281,131283],{},[523,131282,72723],{"align":23941},[523,131284,131285],{"align":23941},"不允许右侧有浮动元素（清除右侧浮动的影响）",[477,131287,131288,131291],{},[523,131289,131290],{"align":23941},"both",[523,131292,131293],{"align":23941},"同时清除左右侧浮动的影响",[19,131295,131296],{},"法一",[19,131298,131299],{},"额外标签法也称为隔墙法",[19,131301,131302],{},"使用方式：",[19,131304,131305],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[58,131307,131308],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,131309,131310,131316,131326,131330,131336,131346],{"__ignoreMap":63},[68,131311,131312,131314],{"class":70,"line":71},[68,131313,131221],{"class":74},[68,131315,15777],{"class":335},[68,131317,131318,131320,131322,131324],{"class":70,"line":92},[68,131319,131228],{"class":82},[68,131321,51638],{"class":335},[68,131323,23941],{"class":82},[68,131325,1498],{"class":335},[68,131327,131328],{"class":70,"line":1387},[68,131329,1772],{"class":335},[68,131331,131332,131334],{"class":70,"line":1402},[68,131333,131243],{"class":74},[68,131335,15777],{"class":335},[68,131337,131338,131340,131342,131344],{"class":70,"line":1408},[68,131339,131228],{"class":82},[68,131341,51638],{"class":335},[68,131343,72723],{"class":82},[68,131345,1498],{"class":335},[68,131347,131348],{"class":70,"line":1422},[68,131349,1772],{"class":335},[19,131351,131352],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131354,131355],{},"优点： 通俗易懂，书写方便",[19,131357,131358],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131360,131361],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131363,131364],{},"法二",[19,131366,131367],{},"父级添加overflow属性",[58,131369,131370],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,131371,131372,131378,131388,131392,131398,131408],{"__ignoreMap":63},[68,131373,131374,131376],{"class":70,"line":71},[68,131375,131221],{"class":74},[68,131377,15777],{"class":335},[68,131379,131380,131382,131384,131386],{"class":70,"line":92},[68,131381,131228],{"class":82},[68,131383,51638],{"class":335},[68,131385,23941],{"class":82},[68,131387,1498],{"class":335},[68,131389,131390],{"class":70,"line":1387},[68,131391,1772],{"class":335},[68,131393,131394,131396],{"class":70,"line":1402},[68,131395,131243],{"class":74},[68,131397,15777],{"class":335},[68,131399,131400,131402,131404,131406],{"class":70,"line":1408},[68,131401,131228],{"class":82},[68,131403,51638],{"class":335},[68,131405,72723],{"class":82},[68,131407,1498],{"class":335},[68,131409,131410],{"class":70,"line":1422},[68,131411,1772],{"class":335},[19,131413,131414],{},"overflow: hidden;",[19,131416,131417],{},"优点：代码简洁",[19,131419,131420],{},"缺点：无法显示溢出的部分",[19,131422,131423],{},"注意：是给父元素添加代码",[19,131425,131426],{},"法三",[19,131428,131429],{},"父级添加after伪元素",[19,131431,131432,131435],{},[131433,131434],"after",{}," 方式是额外标签法的升级版",[19,131437,131438],{},"使用的时候复制就可以",[58,131440,131441],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,131442,131443,131449,131459,131463,131469,131479],{"__ignoreMap":63},[68,131444,131445,131447],{"class":70,"line":71},[68,131446,131221],{"class":74},[68,131448,15777],{"class":335},[68,131450,131451,131453,131455,131457],{"class":70,"line":92},[68,131452,131228],{"class":82},[68,131454,51638],{"class":335},[68,131456,23941],{"class":82},[68,131458,1498],{"class":335},[68,131460,131461],{"class":70,"line":1387},[68,131462,1772],{"class":335},[68,131464,131465,131467],{"class":70,"line":1402},[68,131466,131243],{"class":74},[68,131468,15777],{"class":335},[68,131470,131471,131473,131475,131477],{"class":70,"line":1408},[68,131472,131228],{"class":82},[68,131474,51638],{"class":335},[68,131476,72723],{"class":82},[68,131478,1498],{"class":335},[68,131480,131481],{"class":70,"line":1422},[68,131482,1772],{"class":335},[19,131484,131485],{},"优点：没有增加标签，结构更简单",[19,131487,131488],{},"缺点：照顾低版本浏览器",[19,131490,131491],{},"代表网站： 百度、淘宝网、网易等",[19,131493,131494],{},"法四",[19,131496,131497],{},"父级添加双伪元素",[58,131499,131500],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,131501,131502,131508,131518,131522,131528,131538],{"__ignoreMap":63},[68,131503,131504,131506],{"class":70,"line":71},[68,131505,131221],{"class":74},[68,131507,15777],{"class":335},[68,131509,131510,131512,131514,131516],{"class":70,"line":92},[68,131511,131228],{"class":82},[68,131513,51638],{"class":335},[68,131515,23941],{"class":82},[68,131517,1498],{"class":335},[68,131519,131520],{"class":70,"line":1387},[68,131521,1772],{"class":335},[68,131523,131524,131526],{"class":70,"line":1402},[68,131525,131243],{"class":74},[68,131527,15777],{"class":335},[68,131529,131530,131532,131534,131536],{"class":70,"line":1408},[68,131531,131228],{"class":82},[68,131533,51638],{"class":335},[68,131535,72723],{"class":82},[68,131537,1498],{"class":335},[68,131539,131540],{"class":70,"line":1422},[68,131541,1772],{"class":335},[19,131543,131544],{},"优点：代码更简洁",[19,131546,131488],{},[19,131548,131549],{},"代表网站：小米、腾讯等",[14,131551,131553],{"id":131552},"_93-ps切图","9.3 PS切图",[301,131555,131557],{"id":131556},"_931-常见图片格式","9.3.1 常见图片格式",[471,131559,131560,131570],{},[474,131561,131562],{},[477,131563,131564,131567],{},[480,131565,131566],{"align":23941},"jpg图像格式",[480,131568,131569],{"align":23941},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[518,131571,131572,131580,131588],{},[477,131573,131574,131577],{},[523,131575,131576],{"align":23941},"gif图像格式",[523,131578,131579],{"align":23941},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[477,131581,131582,131585],{},[523,131583,131584],{"align":23941},"png图像格式",[523,131586,131587],{"align":23941},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[477,131589,131590,131593],{},[523,131591,131592],{"align":23941},"PSD图像格式",[523,131594,131595],{"align":23941},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[301,131597,131599],{"id":131598},"_932-图层切图","9.3.2 图层切图",[19,131601,131602],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131604,131605],{},"按住shift选中两个图层->图层菜单->合并图层",[301,131607,131609],{"id":131608},"_933-切片切图","9.3.3 切片切图",[42,131611,131612,131615],{},[26,131613,131614],{},"利用切片工具手动划出",[26,131616,131617],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[301,131619,131621],{"id":131620},"_934-切图步骤","9.3.4 切图步骤",[19,131623,131624],{},"用切片工具选中：",[48,131626],{"style":50,"src":131627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131629,131630],{},"文件 -> 导出",[48,131632],{"style":50,"src":131633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[250,131635,131636],{},"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":63,"searchDepth":92,"depth":92,"links":131638},[131639,131648,131652],{"id":130075,"depth":92,"text":130076,"children":131640},[131641,131642,131643,131644,131645,131646,131647],{"id":130100,"depth":1387,"text":130101},{"id":130391,"depth":1387,"text":130392},{"id":130520,"depth":1387,"text":130521},{"id":130720,"depth":1387,"text":130721},{"id":130762,"depth":1387,"text":130763},{"id":130800,"depth":1387,"text":130801},{"id":130890,"depth":1387,"text":130891},{"id":131170,"depth":92,"text":131171,"children":131649},[131650,131651],{"id":131174,"depth":1387,"text":131175},{"id":131181,"depth":1387,"text":131182},{"id":131552,"depth":92,"text":131553,"children":131653},[131654,131655,131656,131657],{"id":131556,"depth":1387,"text":131557},{"id":131598,"depth":1387,"text":131599},{"id":131608,"depth":1387,"text":131609},{"id":131620,"depth":1387,"text":131621},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130067,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131664,"title":131665,"body":131666,"description":257,"extension":258,"meta":132307,"navigation":260,"path":132308,"seo":132309,"stem":132310,"__hash__":132311},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131667,"toc":132295},[131668,131671,131675,131701,131735,131739,131743,131746,131788,131795,131805,131813,131815,131818,131821,131824,131831,131845,131849,131852,131881,131885,131888,131902,131906,131909,131937,131941,131944,131970,131974,131979,132012,132017,132045,132049,132066,132112,132117,132161,132178,132285,132293],[10,131669,131665],{"id":131670},"_10-css规范与学成在线案例",[14,131672,131674],{"id":131673},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[23,131676,131677,131683,131689,131695],{},[26,131678,131679,131682],{},[483,131680,131681],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[26,131684,131685,131688],{},[483,131686,131687],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[26,131690,131691,131694],{},[483,131692,131693],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[26,131696,131697,131700],{},[483,131698,131699],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[58,131702,131703],{"className":126748,"code":130112,"language":126750,"meta":63,"style":63},[65,131704,131705,131709,131715,131731],{"__ignoreMap":63},[68,131706,131707],{"class":70,"line":71},[68,131708,130119],{"class":393},[68,131710,131711,131713],{"class":70,"line":92},[68,131712,51812],{"class":51501},[68,131714,15777],{"class":335},[68,131716,131717,131719,131721,131723,131725,131727,131729],{"class":70,"line":1387},[68,131718,71097],{"class":82},[68,131720,51638],{"class":335},[68,131722,551],{"class":82},[68,131724,51693],{"class":331},[68,131726,51722],{"class":82},[68,131728,130140],{"class":82},[68,131730,1498],{"class":335},[68,131732,131733],{"class":70,"line":1402},[68,131734,1772],{"class":335},[14,131736,131738],{"id":131737},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[301,131740,131742],{"id":131741},"_1021-header头部制作","10.2.1 header头部制作",[48,131744],{"style":50,"src":131745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[42,131747,131748,131755,131762,131768,131775,131782],{},[26,131749,131750,131751,131754],{},"1号是版心盒子 ",[483,131752,131753],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[26,131756,131757,131758,131761],{},"版心盒子 里面包含 2号盒子 ",[483,131759,131760],{},"logo"," 图标",[26,131763,131764,131765,131767],{},"版心盒子 里面包含 3号盒子 ",[483,131766,53914],{}," 导航栏",[26,131769,131770,131771,131774],{},"版心盒子 里面包含 4号盒子 ",[483,131772,131773],{},"search"," 搜索框",[26,131776,131777,131778,131781],{},"版心盒子 里面包含 5号盒子 ",[483,131779,131780],{},"user"," 个人信息",[26,131783,131784,131785],{},"注意，要求里面的 ",[483,131786,131787],{},"4个子盒子 必须都浮动",[23,131789,131790],{},[26,131791,131792],{},[483,131793,131794],{},"导航栏注意点:",[19,131796,131797,131798,131801,131802],{},"实际开发中， ",[483,131799,131800],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[483,131803,131804],{},"用 li 包含链接(li+a)的做法",[42,131806,131807,131810],{},[26,131808,131809],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[26,131811,131812],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131814,9230],{},[19,131816,131817],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131819,131820],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131822,131823],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[23,131825,131826],{"start":92},[26,131827,131828],{},[483,131829,131830],{},"4号盒子search的细节：",[42,131832,131833,131836,131839],{},[26,131834,131835],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[26,131837,131838],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[26,131840,131841,131844],{},[65,131842,131843],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[301,131846,131848],{"id":131847},"_1022-banner制作","10.2.2 banner制作",[48,131850],{"style":50,"src":131851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[42,131853,131854,131861,131867,131874],{},[26,131855,131856,131857,131860],{},"1号盒子是通栏的大盒子 ",[483,131858,131859],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[26,131862,131863,131864,131866],{},"2号盒子是版心 ",[483,131865,1128],{}," ， 要水平居中对齐",[26,131868,131869,131870,131873],{},"3号盒子版心内，左对齐 ",[483,131871,131872],{},"subnav"," 侧导航栏",[26,131875,131876,131877,131880],{},"4号盒子版心内，右对齐 ",[483,131878,131879],{},"course"," 课程",[301,131882,131884],{"id":131883},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[48,131886],{"style":50,"src":131887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[42,131889,131890,131893,131896,131899],{},[26,131891,131892],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[26,131894,131895],{},"1号盒子是标题 H3 左侧浮动",[26,131897,131898],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[26,131900,131901],{},"3号盒子 右浮动 mod 修改",[301,131903,131905],{"id":131904},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[48,131907],{"style":50,"src":131908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[42,131910,131911,131917,131924,131931,131934],{},[26,131912,131913,131914,131916],{},"1号盒子为最大的盒子 ",[483,131915,53915],{}," 版心水平居中对齐",[26,131918,131919,131920,131923],{},"2号盒子为上面部分 ",[483,131921,131922],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[26,131925,131926,131927,131930],{},"3号盒子为底下部分 ",[483,131928,131929],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[26,131932,131933],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[26,131935,131936],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[301,131938,131940],{"id":131939},"_1025-底部模块制作","10.2.5 底部模块制作",[48,131942],{"style":50,"src":131943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[42,131945,131946,131953,131956,131963],{},[26,131947,131948,131949,131952],{},"1号盒子通栏大盒子 底部 ",[483,131950,131951],{},"footer"," 给高度 底色是白色",[26,131954,131955],{},"2号盒子版心水平居中",[26,131957,131958,131959,131962],{},"3号盒子版权 ",[483,131960,131961],{},"copyright"," 左对齐",[26,131964,131965,131966,131969],{},"4号盒子 链接组 ",[483,131967,131968],{},"links"," 右对齐",[301,131971,131973],{"id":131972},"_1026-代码模块","10.2.6 代码模块",[23,131975,131976],{},[26,131977,131978],{},"html部分",[58,131980,131982],{"className":127495,"code":131981,"language":127497,"meta":63,"style":63},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[65,131983,131984],{"__ignoreMap":63},[68,131985,131986,131988,131990,131992,131994,131997,132000,132002,132005,132008,132010],{"class":70,"line":71},[68,131987,1243],{"class":335},[68,131989,30],{"class":51501},[68,131991,61258],{"class":74},[68,131993,381],{"class":335},[68,131995,131996],{"class":78},"\"https:\u002F\u002Fexample.com\"",[68,131998,131999],{"class":74}," target",[68,132001,381],{"class":335},[68,132003,132004],{"class":78},"\"_blank\"",[68,132006,132007],{"class":335},">链接文字\u003C\u002F",[68,132009,30],{"class":51501},[68,132011,51508],{"class":335},[23,132013,132014],{"start":92},[26,132015,132016],{},"css部分",[58,132018,132019],{"className":127495,"code":131981,"language":127497,"meta":63,"style":63},[65,132020,132021],{"__ignoreMap":63},[68,132022,132023,132025,132027,132029,132031,132033,132035,132037,132039,132041,132043],{"class":70,"line":71},[68,132024,1243],{"class":335},[68,132026,30],{"class":51501},[68,132028,61258],{"class":74},[68,132030,381],{"class":335},[68,132032,131996],{"class":78},[68,132034,131999],{"class":74},[68,132036,381],{"class":335},[68,132038,132004],{"class":78},[68,132040,132007],{"class":335},[68,132042,30],{"class":51501},[68,132044,51508],{"class":335},[301,132046,132048],{"id":132047},"_1027-收获","10.2.7 收获",[23,132050,132051,132054,132057,132060,132063],{},[26,132052,132053],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[26,132055,132056],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[26,132058,132059],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[26,132061,132062],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[26,132064,132065],{},"遗忘代码",[58,132067,132069],{"className":126748,"code":132068,"language":126750,"meta":63,"style":63},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[65,132070,132071,132093,132098,132108],{"__ignoreMap":63},[68,132072,132073,132075,132077,132079,132081,132083,132085,132087,132089,132091],{"class":70,"line":71},[68,132074,51812],{"class":51501},[68,132076,12640],{"class":335},[68,132078,19],{"class":51501},[68,132080,12640],{"class":335},[68,132082,10],{"class":51501},[68,132084,12640],{"class":335},[68,132086,42],{"class":51501},[68,132088,12640],{"class":335},[68,132090,26],{"class":51501},[68,132092,15777],{"class":335},[68,132094,132095],{"class":70,"line":92},[68,132096,132097],{"class":393},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[68,132099,132100,132102,132104,132106],{"class":70,"line":1387},[68,132101,128364],{"class":82},[68,132103,51638],{"class":335},[68,132105,61070],{"class":82},[68,132107,1498],{"class":335},[68,132109,132110],{"class":70,"line":1402},[68,132111,1772],{"class":335},[23,132113,132114],{"start":1422},[26,132115,132116],{},"html引css的程序",[58,132118,132119],{"className":126748,"code":132068,"language":126750,"meta":63,"style":63},[65,132120,132121,132143,132147,132157],{"__ignoreMap":63},[68,132122,132123,132125,132127,132129,132131,132133,132135,132137,132139,132141],{"class":70,"line":71},[68,132124,51812],{"class":51501},[68,132126,12640],{"class":335},[68,132128,19],{"class":51501},[68,132130,12640],{"class":335},[68,132132,10],{"class":51501},[68,132134,12640],{"class":335},[68,132136,42],{"class":51501},[68,132138,12640],{"class":335},[68,132140,26],{"class":51501},[68,132142,15777],{"class":335},[68,132144,132145],{"class":70,"line":92},[68,132146,132097],{"class":393},[68,132148,132149,132151,132153,132155],{"class":70,"line":1387},[68,132150,128364],{"class":82},[68,132152,51638],{"class":335},[68,132154,61070],{"class":82},[68,132156,1498],{"class":335},[68,132158,132159],{"class":70,"line":1402},[68,132160,1772],{"class":335},[23,132162,132163,132166,132169,132172,132175],{"start":1428},[26,132164,132165],{},"浮动的盒子不会有外边距合并问题",[26,132167,132168],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[26,132170,132171],{},"ctrl+g快速定位行；shift+alt多个光标",[26,132173,132174],{},"学习上方各个模块的选择器起名方法，以后就这样用",[26,132176,132177],{},"在写选择器时尽量写全一些，例如",[58,132179,132181],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},"\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",[65,132182,132183,132188,132204,132209,132224,132229,132244,132249,132264,132269],{"__ignoreMap":63},[68,132184,132185],{"class":70,"line":71},[68,132186,132187],{"class":393},"\u002F* 静态定位（默认） *\u002F\n",[68,132189,132190,132193,132195,132197,132199,132202],{"class":70,"line":92},[68,132191,132192],{"class":74},".static",[68,132194,80008],{"class":335},[68,132196,129108],{"class":82},[68,132198,51638],{"class":335},[68,132200,132201],{"class":82},"static",[68,132203,129678],{"class":335},[68,132205,132206],{"class":70,"line":1387},[68,132207,132208],{"class":393},"\u002F* 相对定位 *\u002F\n",[68,132210,132211,132214,132216,132218,132220,132222],{"class":70,"line":1402},[68,132212,132213],{"class":74},".relative",[68,132215,80008],{"class":335},[68,132217,129108],{"class":82},[68,132219,51638],{"class":335},[68,132221,54965],{"class":82},[68,132223,129678],{"class":335},[68,132225,132226],{"class":70,"line":1408},[68,132227,132228],{"class":393},"\u002F* 绝对定位 *\u002F\n",[68,132230,132231,132234,132236,132238,132240,132242],{"class":70,"line":1422},[68,132232,132233],{"class":74},".absolute",[68,132235,80008],{"class":335},[68,132237,129108],{"class":82},[68,132239,51638],{"class":335},[68,132241,55032],{"class":82},[68,132243,129678],{"class":335},[68,132245,132246],{"class":70,"line":1428},[68,132247,132248],{"class":393},"\u002F* 固定定位 *\u002F\n",[68,132250,132251,132254,132256,132258,132260,132262],{"class":70,"line":1519},[68,132252,132253],{"class":74},".fixed",[68,132255,80008],{"class":335},[68,132257,129108],{"class":82},[68,132259,51638],{"class":335},[68,132261,86434],{"class":82},[68,132263,129678],{"class":335},[68,132265,132266],{"class":70,"line":1525},[68,132267,132268],{"class":393},"\u002F* 粘性定位 *\u002F\n",[68,132270,132271,132274,132276,132278,132280,132283],{"class":70,"line":1537},[68,132272,132273],{"class":74},".sticky",[68,132275,80008],{"class":335},[68,132277,129108],{"class":82},[68,132279,51638],{"class":335},[68,132281,132282],{"class":82},"sticky",[68,132284,129678],{"class":335},[23,132286,132287,132290],{"start":1824},[26,132288,132289],{},"一定要用好注释",[26,132291,132292],{},"浮动的盒子不会有外边距合并的问题",[250,132294,131636],{},{"title":63,"searchDepth":92,"depth":92,"links":132296},[132297,132298],{"id":131673,"depth":92,"text":131674},{"id":131737,"depth":92,"text":131738,"children":132299},[132300,132301,132302,132303,132304,132305,132306],{"id":131741,"depth":1387,"text":131742},{"id":131847,"depth":1387,"text":131848},{"id":131883,"depth":1387,"text":131884},{"id":131904,"depth":1387,"text":131905},{"id":131939,"depth":1387,"text":131940},{"id":131972,"depth":1387,"text":131973},{"id":132047,"depth":1387,"text":132048},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131665,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132313,"title":132314,"body":132315,"description":257,"extension":258,"meta":133801,"navigation":260,"path":133802,"seo":133803,"stem":133804,"__hash__":133805},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132316,"toc":133793},[132317,132320,132324,132328,132339,132343,132360,132404,132437,132440,132457,132460,132463,132507,132511,132515,132518,132521,132525,132528,132539,132602,132643,132646,132661,132715,132723,132726,132737,132791,132817,132820,132833,132887,132919,132973,132996,133050,133053,133056,133063,133117,133138,133192,133195,133198,133283,133291,133348,133371,133375,133378,133396,133400,133419,133473,133511,133515,133518,133521,133543,133547,133555,133558,133563,133574,133577,133581,133595,133639,133642,133646,133649,133654,133680,133685,133762,133765,133769,133772,133775,133778,133781,133784,133787,133790],[10,132318,132314],{"id":132319},"_11-传统布局与定位体系",[14,132321,132323],{"id":132322},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[301,132325,132327],{"id":132326},"_1111-普通流标准流","11.1.1 普通流（标准流）",[42,132329,132330,132333,132336],{},[26,132331,132332],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[26,132334,132335],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[26,132337,132338],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[301,132340,132342],{"id":132341},"_1112-浮动","11.1.2 浮动",[42,132344,132345,132348,132351,132354,132357],{},[26,132346,132347],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[26,132349,132350],{},"浮动可以改变元素标签默认的排列方式",[26,132352,132353],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[26,132355,132356],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[26,132358,132359],{},"在使用行内块转换时盒子之间是有空隙的",[58,132361,132362],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,132363,132364,132370,132380,132384,132390,132400],{"__ignoreMap":63},[68,132365,132366,132368],{"class":70,"line":71},[68,132367,131221],{"class":74},[68,132369,15777],{"class":335},[68,132371,132372,132374,132376,132378],{"class":70,"line":92},[68,132373,131228],{"class":82},[68,132375,51638],{"class":335},[68,132377,23941],{"class":82},[68,132379,1498],{"class":335},[68,132381,132382],{"class":70,"line":1387},[68,132383,1772],{"class":335},[68,132385,132386,132388],{"class":70,"line":1402},[68,132387,131243],{"class":74},[68,132389,15777],{"class":335},[68,132391,132392,132394,132396,132398],{"class":70,"line":1408},[68,132393,131228],{"class":82},[68,132395,51638],{"class":335},[68,132397,72723],{"class":82},[68,132399,1498],{"class":335},[68,132401,132402],{"class":70,"line":1422},[68,132403,1772],{"class":335},[471,132405,132406,132414],{},[474,132407,132408],{},[477,132409,132410,132412],{},[480,132411,127212],{"align":23941},[480,132413,27693],{"align":23941},[518,132415,132416,132423,132430],{},[477,132417,132418,132420],{},[523,132419,54938],{"align":23941},[523,132421,132422],{"align":23941},"元素不浮动（默认值）",[477,132424,132425,132427],{},[523,132426,23941],{"align":23941},[523,132428,132429],{"align":23941},"元素向左浮动",[477,132431,132432,132434],{},[523,132433,72723],{"align":23941},[523,132435,132436],{"align":23941},"元素向右浮动",[19,132438,132439],{},"浮动重点：",[42,132441,132442,132445,132448,132451,132454],{},[26,132443,132444],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[26,132446,132447],{},"浮动的元素会一行内显示并且元素顶部对齐",[26,132449,132450],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[26,132452,132453],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[26,132455,132456],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132458,132459],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132461,132462],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[58,132464,132465],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,132466,132467,132473,132483,132487,132493,132503],{"__ignoreMap":63},[68,132468,132469,132471],{"class":70,"line":71},[68,132470,131221],{"class":74},[68,132472,15777],{"class":335},[68,132474,132475,132477,132479,132481],{"class":70,"line":92},[68,132476,131228],{"class":82},[68,132478,51638],{"class":335},[68,132480,23941],{"class":82},[68,132482,1498],{"class":335},[68,132484,132485],{"class":70,"line":1387},[68,132486,1772],{"class":335},[68,132488,132489,132491],{"class":70,"line":1402},[68,132490,131243],{"class":74},[68,132492,15777],{"class":335},[68,132494,132495,132497,132499,132501],{"class":70,"line":1408},[68,132496,131228],{"class":82},[68,132498,51638],{"class":335},[68,132500,72723],{"class":82},[68,132502,1498],{"class":335},[68,132504,132505],{"class":70,"line":1422},[68,132506,1772],{"class":335},[301,132508,132510],{"id":132509},"_1113-定位","11.1.3 定位",[22203,132512,132514],{"id":132513},"_11131-使用场景","11.1.3.1 使用场景",[19,132516,132517],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132519,132520],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22203,132522,132524],{"id":132523},"_11132-定位组成","11.1.3.2 定位组成",[19,132526,132527],{},"定位 = 定位模式 + 边偏移",[23,132529,132530],{},[26,132531,132532,132535,132536],{},[483,132533,132534],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[483,132537,132538],{},"定位模式",[58,132540,132542],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[65,132543,132544,132550,132564,132581,132598],{"__ignoreMap":63},[68,132545,132546,132548],{"class":70,"line":71},[68,132547,130596],{"class":74},[68,132549,15777],{"class":335},[68,132551,132552,132555,132557,132559,132561],{"class":70,"line":92},[68,132553,132554],{"class":82},"  position",[68,132556,51638],{"class":335},[68,132558,54965],{"class":82},[68,132560,130611],{"class":335},[68,132562,132563],{"class":393},"\u002F* 定位模式 *\u002F\n",[68,132565,132566,132569,132571,132573,132575,132578],{"class":70,"line":1387},[68,132567,132568],{"class":82},"  top",[68,132570,51638],{"class":335},[68,132572,779],{"class":82},[68,132574,51693],{"class":331},[68,132576,132577],{"class":335},";           ",[68,132579,132580],{"class":393},"\u002F* 边偏移：上 *\u002F\n",[68,132582,132583,132586,132588,132590,132592,132595],{"class":70,"line":1402},[68,132584,132585],{"class":82},"  left",[68,132587,51638],{"class":335},[68,132589,1033],{"class":82},[68,132591,51693],{"class":331},[68,132593,132594],{"class":335},";          ",[68,132596,132597],{"class":393},"\u002F* 边偏移：左 *\u002F\n",[68,132599,132600],{"class":70,"line":1408},[68,132601,1772],{"class":335},[471,132603,132604,132613],{},[474,132605,132606],{},[477,132607,132608,132610],{},[480,132609,486],{"align":23941},[480,132611,132612],{"align":23941},"语义",[518,132614,132615,132622,132629,132636],{},[477,132616,132617,132619],{},[523,132618,132201],{"align":23941},[523,132620,132621],{"align":23941},"静态定位",[477,132623,132624,132626],{},[523,132625,54965],{"align":23941},[523,132627,132628],{"align":23941},"相对定位",[477,132630,132631,132633],{},[523,132632,55032],{"align":23941},[523,132634,132635],{"align":23941},"绝对定位",[477,132637,132638,132640],{},[523,132639,86434],{"align":23941},[523,132641,132642],{"align":23941},"固定定位",[19,132644,132645],{},"（1）静态定位：",[42,132647,132648,132659],{},[26,132649,132650,132651,132654,132655,132658],{},"静态定位是元素的 ",[483,132652,132653],{},"默认定位方式"," ， ",[483,132656,132657],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[26,132660,5387],{},[58,132662,132663],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,132664,132665,132671,132683,132697,132711],{"__ignoreMap":63},[68,132666,132667,132669],{"class":70,"line":71},[68,132668,130596],{"class":74},[68,132670,15777],{"class":335},[68,132672,132673,132675,132677,132679,132681],{"class":70,"line":92},[68,132674,132554],{"class":82},[68,132676,51638],{"class":335},[68,132678,54965],{"class":82},[68,132680,130611],{"class":335},[68,132682,132563],{"class":393},[68,132684,132685,132687,132689,132691,132693,132695],{"class":70,"line":1387},[68,132686,132568],{"class":82},[68,132688,51638],{"class":335},[68,132690,779],{"class":82},[68,132692,51693],{"class":331},[68,132694,132577],{"class":335},[68,132696,132580],{"class":393},[68,132698,132699,132701,132703,132705,132707,132709],{"class":70,"line":1402},[68,132700,132585],{"class":82},[68,132702,51638],{"class":335},[68,132704,1033],{"class":82},[68,132706,51693],{"class":331},[68,132708,132594],{"class":335},[68,132710,132597],{"class":393},[68,132712,132713],{"class":70,"line":1408},[68,132714,1772],{"class":335},[42,132716,132717,132720],{},[26,132718,132719],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[26,132721,132722],{},"静态定位在布局时我们几乎不用的",[19,132724,132725],{},"（2）相对定位",[42,132727,132728,132735],{},[26,132729,132730,132731,132734],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[483,132732,132733],{},"原来的位置"," 来说的（自恋型）",[26,132736,5387],{},[58,132738,132739],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,132740,132741,132747,132759,132773,132787],{"__ignoreMap":63},[68,132742,132743,132745],{"class":70,"line":71},[68,132744,130596],{"class":74},[68,132746,15777],{"class":335},[68,132748,132749,132751,132753,132755,132757],{"class":70,"line":92},[68,132750,132554],{"class":82},[68,132752,51638],{"class":335},[68,132754,54965],{"class":82},[68,132756,130611],{"class":335},[68,132758,132563],{"class":393},[68,132760,132761,132763,132765,132767,132769,132771],{"class":70,"line":1387},[68,132762,132568],{"class":82},[68,132764,51638],{"class":335},[68,132766,779],{"class":82},[68,132768,51693],{"class":331},[68,132770,132577],{"class":335},[68,132772,132580],{"class":393},[68,132774,132775,132777,132779,132781,132783,132785],{"class":70,"line":1402},[68,132776,132585],{"class":82},[68,132778,51638],{"class":335},[68,132780,1033],{"class":82},[68,132782,51693],{"class":331},[68,132784,132594],{"class":335},[68,132786,132597],{"class":393},[68,132788,132789],{"class":70,"line":1408},[68,132790,1772],{"class":335},[42,132792,132793],{},[26,132794,132795,132796,132798,132799,132801,132802,132805,132806,132809,132810,132812,132813,132816],{},"相对定位的特点：",[53917,132797],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53917,132800],{},"  ② ",[483,132803,132804],{},"原来"," 在标准流的 ",[483,132807,132808],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53917,132811],{},"  ③因此， ",[483,132814,132815],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132818,132819],{},"（3）绝对定位",[42,132821,132822,132831],{},[26,132823,132824,132826,132827,132830],{},[483,132825,132635],{}," 是元素在移动位置的时候，是相对于它 ",[483,132828,132829],{},"祖先元素"," 来说的（拼爹型）",[26,132832,5387],{},[58,132834,132835],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,132836,132837,132843,132855,132869,132883],{"__ignoreMap":63},[68,132838,132839,132841],{"class":70,"line":71},[68,132840,130596],{"class":74},[68,132842,15777],{"class":335},[68,132844,132845,132847,132849,132851,132853],{"class":70,"line":92},[68,132846,132554],{"class":82},[68,132848,51638],{"class":335},[68,132850,54965],{"class":82},[68,132852,130611],{"class":335},[68,132854,132563],{"class":393},[68,132856,132857,132859,132861,132863,132865,132867],{"class":70,"line":1387},[68,132858,132568],{"class":82},[68,132860,51638],{"class":335},[68,132862,779],{"class":82},[68,132864,51693],{"class":331},[68,132866,132577],{"class":335},[68,132868,132580],{"class":393},[68,132870,132871,132873,132875,132877,132879,132881],{"class":70,"line":1402},[68,132872,132585],{"class":82},[68,132874,51638],{"class":335},[68,132876,1033],{"class":82},[68,132878,51693],{"class":331},[68,132880,132594],{"class":335},[68,132882,132597],{"class":393},[68,132884,132885],{"class":70,"line":1408},[68,132886,1772],{"class":335},[42,132888,132889,132904,132913,132916],{},[26,132890,132891,132892,132894,132895,132897,132898,132900,132901,132903],{},"绝对定位的特点：",[53917,132893],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53917,132896],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53917,132899],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53917,132902],{},"  (4)固定定位",[26,132905,132906,132908,132909,132912],{},[483,132907,132642],{}," 是元素 ",[483,132910,132911],{},"固定于浏览器可视区的位置"," 。（认死理型）",[26,132914,132915],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[26,132917,132918],{},"语法:",[58,132920,132921],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,132922,132923,132929,132941,132955,132969],{"__ignoreMap":63},[68,132924,132925,132927],{"class":70,"line":71},[68,132926,130596],{"class":74},[68,132928,15777],{"class":335},[68,132930,132931,132933,132935,132937,132939],{"class":70,"line":92},[68,132932,132554],{"class":82},[68,132934,51638],{"class":335},[68,132936,54965],{"class":82},[68,132938,130611],{"class":335},[68,132940,132563],{"class":393},[68,132942,132943,132945,132947,132949,132951,132953],{"class":70,"line":1387},[68,132944,132568],{"class":82},[68,132946,51638],{"class":335},[68,132948,779],{"class":82},[68,132950,51693],{"class":331},[68,132952,132577],{"class":335},[68,132954,132580],{"class":393},[68,132956,132957,132959,132961,132963,132965,132967],{"class":70,"line":1402},[68,132958,132585],{"class":82},[68,132960,51638],{"class":335},[68,132962,1033],{"class":82},[68,132964,51693],{"class":331},[68,132966,132594],{"class":335},[68,132968,132597],{"class":393},[68,132970,132971],{"class":70,"line":1408},[68,132972,1772],{"class":335},[42,132974,132975,132984],{},[26,132976,132977,132978,132980,132981,132983],{},"特点:",[53917,132979],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53917,132982],{},"  ②固定定位不再占有原先的位置,完全脱标",[26,132985,132986,132987,132989,132990,132992,132993,132995],{},"固定在版心位置的方法:",[53917,132988],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53917,132991],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53917,132994],{},"  实例：",[58,132997,132998],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,132999,133000,133006,133018,133032,133046],{"__ignoreMap":63},[68,133001,133002,133004],{"class":70,"line":71},[68,133003,130596],{"class":74},[68,133005,15777],{"class":335},[68,133007,133008,133010,133012,133014,133016],{"class":70,"line":92},[68,133009,132554],{"class":82},[68,133011,51638],{"class":335},[68,133013,54965],{"class":82},[68,133015,130611],{"class":335},[68,133017,132563],{"class":393},[68,133019,133020,133022,133024,133026,133028,133030],{"class":70,"line":1387},[68,133021,132568],{"class":82},[68,133023,51638],{"class":335},[68,133025,779],{"class":82},[68,133027,51693],{"class":331},[68,133029,132577],{"class":335},[68,133031,132580],{"class":393},[68,133033,133034,133036,133038,133040,133042,133044],{"class":70,"line":1402},[68,133035,132585],{"class":82},[68,133037,51638],{"class":335},[68,133039,1033],{"class":82},[68,133041,51693],{"class":331},[68,133043,132594],{"class":335},[68,133045,132597],{"class":393},[68,133047,133048],{"class":70,"line":1408},[68,133049,1772],{"class":335},[48,133051],{"style":50,"src":133052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133054,133055],{},"(5)粘性定位",[42,133057,133058,133061],{},[26,133059,133060],{},"粘性定位可以被认为是相对定位和固定定位的混合",[26,133062,5387],{},[58,133064,133065],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,133066,133067,133073,133085,133099,133113],{"__ignoreMap":63},[68,133068,133069,133071],{"class":70,"line":71},[68,133070,130596],{"class":74},[68,133072,15777],{"class":335},[68,133074,133075,133077,133079,133081,133083],{"class":70,"line":92},[68,133076,132554],{"class":82},[68,133078,51638],{"class":335},[68,133080,54965],{"class":82},[68,133082,130611],{"class":335},[68,133084,132563],{"class":393},[68,133086,133087,133089,133091,133093,133095,133097],{"class":70,"line":1387},[68,133088,132568],{"class":82},[68,133090,51638],{"class":335},[68,133092,779],{"class":82},[68,133094,51693],{"class":331},[68,133096,132577],{"class":335},[68,133098,132580],{"class":393},[68,133100,133101,133103,133105,133107,133109,133111],{"class":70,"line":1402},[68,133102,132585],{"class":82},[68,133104,51638],{"class":335},[68,133106,1033],{"class":82},[68,133108,51693],{"class":331},[68,133110,132594],{"class":335},[68,133112,132597],{"class":393},[68,133114,133115],{"class":70,"line":1408},[68,133116,1772],{"class":335},[42,133118,133119],{},[26,133120,133121,133122,133124,133125,133127,133128,133130,133131,133134,133135,133137],{},"粘性定位的特点：",[53917,133123],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53917,133126],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53917,133129],{},"  ③必须添加 top 、left、right、bottom ",[483,133132,133133],{},"其中一个"," 才有效",[53917,133136],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[58,133139,133140],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,133141,133142,133148,133160,133174,133188],{"__ignoreMap":63},[68,133143,133144,133146],{"class":70,"line":71},[68,133145,130596],{"class":74},[68,133147,15777],{"class":335},[68,133149,133150,133152,133154,133156,133158],{"class":70,"line":92},[68,133151,132554],{"class":82},[68,133153,51638],{"class":335},[68,133155,54965],{"class":82},[68,133157,130611],{"class":335},[68,133159,132563],{"class":393},[68,133161,133162,133164,133166,133168,133170,133172],{"class":70,"line":1387},[68,133163,132568],{"class":82},[68,133165,51638],{"class":335},[68,133167,779],{"class":82},[68,133169,51693],{"class":331},[68,133171,132577],{"class":335},[68,133173,132580],{"class":393},[68,133175,133176,133178,133180,133182,133184,133186],{"class":70,"line":1402},[68,133177,132585],{"class":82},[68,133179,51638],{"class":335},[68,133181,1033],{"class":82},[68,133183,51693],{"class":331},[68,133185,132594],{"class":335},[68,133187,132597],{"class":393},[68,133189,133190],{"class":70,"line":1408},[68,133191,1772],{"class":335},[48,133193],{"style":50,"src":133194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133196,133197],{},"(6)总结",[471,133199,133200,133215],{},[474,133201,133202],{},[477,133203,133204,133206,133209,133212],{},[480,133205,132538],{"align":23941},[480,133207,133208],{"align":23941},"是否脱标",[480,133210,133211],{"align":23941},"移动位置",[480,133213,133214],{"align":23941},"是否常用",[518,133216,133217,133230,133244,133258,133271],{},[477,133218,133219,133222,133224,133227],{},[523,133220,133221],{"align":23941},"Static 静态定位",[523,133223,104878],{"align":23941},[523,133225,133226],{"align":23941},"不能使用边偏移",[523,133228,133229],{"align":23941},"很少",[477,133231,133232,133235,133238,133241],{},[523,133233,133234],{"align":23941},"Relative 相对定位",[523,133236,133237],{"align":23941},"否(占有位置)",[523,133239,133240],{"align":23941},"相对于自身位置移动",[523,133242,133243],{"align":23941},"基本单独使用",[477,133245,133246,133249,133252,133255],{},[523,133247,133248],{"align":23941},"Absolute 绝对定位",[523,133250,133251],{"align":23941},"是(不占有位置)",[523,133253,133254],{"align":23941},"带有定位的父级",[523,133256,133257],{"align":23941},"要和定位父级元素搭配使用",[477,133259,133260,133263,133265,133268],{},[523,133261,133262],{"align":23941},"Fixed 固定定位",[523,133264,133251],{"align":23941},[523,133266,133267],{"align":23941},"浏览器可视区",[523,133269,133270],{"align":23941},"单独使用,不需要父级",[477,133272,133273,133276,133278,133280],{},[523,133274,133275],{"align":23941},"Sticky 粘性定位",[523,133277,133237],{"align":23941},[523,133279,133267],{"align":23941},[523,133281,133282],{"align":23941},"当前阶段少",[23,133284,133285],{"start":92},[26,133286,133287,133290],{},[483,133288,133289],{},"边偏移"," 则决定了该元素的最终位置",[471,133292,133293,133304],{},[474,133294,133295],{},[477,133296,133297,133300,133302],{},[480,133298,133299],{"align":23941},"边偏移属性",[480,133301,27696],{"align":23941},[480,133303,27693],{"align":23941},[518,133305,133306,133317,133328,133338],{},[477,133307,133308,133311,133314],{},[523,133309,133310],{"align":23941},"top",[523,133312,133313],{"align":23941},"top: 80px;",[523,133315,133316],{"align":23941},"顶端偏移量，定义元素相对于父元素上边线的距离",[477,133318,133319,133322,133325],{},[523,133320,133321],{"align":23941},"bottom",[523,133323,133324],{"align":23941},"bottom: 80px ;",[523,133326,133327],{"align":23941},"底部偏移量，定义元素相对于其父元素下边线的距离",[477,133329,133330,133332,133335],{},[523,133331,23941],{"align":23941},[523,133333,133334],{"align":23941},"left: 80px ;",[523,133336,133337],{"align":23941},"左侧偏移量，定义元素相对于其父元素左边线的距离",[477,133339,133340,133342,133345],{},[523,133341,72723],{"align":23941},[523,133343,133344],{"align":23941},"right: 80px ;",[523,133346,133347],{"align":23941},"右侧偏移量，定义元素相对于其父元素右边线的距离",[42,133349,133350],{},[26,133351,9230,133352,133354,133355,133357,133358,133360,133361,133364,133365,133367,133368,133370],{},[53917,133353],{},"  ① ",[483,133356,133289],{}," 需要和 ",[483,133359,132538],{}," 联合使用， ",[483,133362,133363],{},"单独使用无效"," ；",[53917,133366],{},"  ②top和bottom不要同时使用",[53917,133369],{},"  ③left和right不要同时使用",[22203,133372,133374],{"id":133373},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133376,133377],{},"子级是绝对定位的话，父级要用相对定位",[42,133379,133380,133383,133386,133389],{},[26,133381,133382],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[26,133384,133385],{},"父盒子需要加定位限制子盒子在父盒子内显示",[26,133387,133388],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[26,133390,133391,133392,133395],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[483,133393,133394],{},"子绝父绝"," 也会遇到",[22203,133397,133399],{"id":133398},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[42,133401,133402,133417],{},[26,133403,133404,133405,133408,133409,133412,133413,133416],{},"在使用 ",[483,133406,133407],{},"定位"," 布局时，可能会 ",[483,133410,133411],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[483,133414,133415],{},"z-index"," 来控制盒子的前后次序 (z轴)",[26,133418,5387],{},[58,133420,133421],{"className":126748,"code":132541,"language":126750,"meta":63,"style":63},[65,133422,133423,133429,133441,133455,133469],{"__ignoreMap":63},[68,133424,133425,133427],{"class":70,"line":71},[68,133426,130596],{"class":74},[68,133428,15777],{"class":335},[68,133430,133431,133433,133435,133437,133439],{"class":70,"line":92},[68,133432,132554],{"class":82},[68,133434,51638],{"class":335},[68,133436,54965],{"class":82},[68,133438,130611],{"class":335},[68,133440,132563],{"class":393},[68,133442,133443,133445,133447,133449,133451,133453],{"class":70,"line":1387},[68,133444,132568],{"class":82},[68,133446,51638],{"class":335},[68,133448,779],{"class":82},[68,133450,51693],{"class":331},[68,133452,132577],{"class":335},[68,133454,132580],{"class":393},[68,133456,133457,133459,133461,133463,133465,133467],{"class":70,"line":1402},[68,133458,132585],{"class":82},[68,133460,51638],{"class":335},[68,133462,1033],{"class":82},[68,133464,51693],{"class":331},[68,133466,132594],{"class":335},[68,133468,132597],{"class":393},[68,133470,133471],{"class":70,"line":1408},[68,133472,1772],{"class":335},[42,133474,133475],{},[26,133476,133477,133478,133354,133480,133482,133483,127911,133486,82740,133489,133491,133492,133494,133495,133498,133499,133364,133502,133504,133505,133508,133510],{},"z-index的特性",[53917,133479],{},[483,133481,127212],{}," ： ",[483,133484,133485],{},"正整数",[483,133487,133488],{},"负整数",[483,133490,525],{}," ，默认值是 0，数值越大，盒子越靠上；",[53917,133493],{},"  ②如果 ",[483,133496,133497],{},"属性值相同"," ，则按照书写顺序， ",[483,133500,133501],{},"后来居上",[53917,133503],{},"  ③数字后面 ",[483,133506,133507],{},"不能加单位",[53917,133509],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22203,133512,133514],{"id":133513},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133516,133517],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133519,133520],{},"方法:",[42,133522,133523,133533],{},[26,133524,133525,133526,133529,133530],{},"left: 50%; 让 ",[483,133527,133528],{},"盒子的左侧"," 移动到 ",[483,133531,133532],{},"父级元素的水平中心位置",[26,133534,133535,133536,133539,133540],{},"margin-left: -100px; 让盒子 ",[483,133537,133538],{},"向左"," 移动 ",[483,133541,133542],{},"自身宽度的一半",[22203,133544,133546],{"id":133545},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[23,133548,133549,133552],{},[26,133550,133551],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[26,133553,133554],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133556,133557],{},"也就是说绝对定位和固定定位和浮动类似",[23,133559,133560],{"start":1387},[26,133561,133562],{},"display 是显示模式， 可以改变显示模式有以下方式:",[42,133564,133565,133568,133571],{},[26,133566,133567],{},"可以用inline-block 转换为行内块",[26,133569,133570],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[26,133572,133573],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133575,133576],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22203,133578,133580],{"id":133579},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[23,133582,133583,133586,133589,133592],{},[26,133584,133585],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[26,133587,133588],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[26,133590,133591],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[26,133593,133594],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[58,133596,133597],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,133598,133599,133605,133615,133619,133625,133635],{"__ignoreMap":63},[68,133600,133601,133603],{"class":70,"line":71},[68,133602,131221],{"class":74},[68,133604,15777],{"class":335},[68,133606,133607,133609,133611,133613],{"class":70,"line":92},[68,133608,131228],{"class":82},[68,133610,51638],{"class":335},[68,133612,23941],{"class":82},[68,133614,1498],{"class":335},[68,133616,133617],{"class":70,"line":1387},[68,133618,1772],{"class":335},[68,133620,133621,133623],{"class":70,"line":1402},[68,133622,131243],{"class":74},[68,133624,15777],{"class":335},[68,133626,133627,133629,133631,133633],{"class":70,"line":1408},[68,133628,131228],{"class":82},[68,133630,51638],{"class":335},[68,133632,72723],{"class":82},[68,133634,1498],{"class":335},[68,133636,133637],{"class":70,"line":1422},[68,133638,1772],{"class":335},[48,133640],{"style":50,"src":133641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22203,133643,133645],{"id":133644},"_11138-轮播图","11.1.3.8 轮播图",[48,133647],{"style":50,"src":133648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[23,133650,133651],{},[26,133652,133653],{},"制作顺序:",[42,133655,133656,133659,133662,133671],{},[26,133657,133658],{},"大盒子我们类名为： tb-promo 淘宝广告",[26,133660,133661],{},"里面先放一张图片",[26,133663,133664,133665,133667,133668,133670],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53917,133666],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53917,133669],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[26,133672,133673,133674,133676,133677,133679],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53917,133675],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53917,133678],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[23,133681,133682],{"start":92},[26,133683,133684],{},"代码模块",[58,133686,133688],{"className":126748,"code":133687,"language":126750,"meta":63,"style":63},"\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",[65,133689,133690,133695,133702,133712,133722,133732,133736,133741,133748,133758],{"__ignoreMap":63},[68,133691,133692],{"class":70,"line":71},[68,133693,133694],{"class":393},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[68,133696,133697,133700],{"class":70,"line":92},[68,133698,133699],{"class":74},".son",[68,133701,15777],{"class":335},[68,133703,133704,133706,133708,133710],{"class":70,"line":1387},[68,133705,132554],{"class":82},[68,133707,51638],{"class":335},[68,133709,55032],{"class":82},[68,133711,1498],{"class":335},[68,133713,133714,133716,133718,133720],{"class":70,"line":1402},[68,133715,132568],{"class":82},[68,133717,51638],{"class":335},[68,133719,525],{"class":82},[68,133721,1498],{"class":335},[68,133723,133724,133726,133728,133730],{"class":70,"line":1408},[68,133725,132585],{"class":82},[68,133727,51638],{"class":335},[68,133729,525],{"class":82},[68,133731,1498],{"class":335},[68,133733,133734],{"class":70,"line":1422},[68,133735,1772],{"class":335},[68,133737,133738],{"class":70,"line":1428},[68,133739,133740],{"class":393},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[68,133742,133743,133746],{"class":70,"line":1519},[68,133744,133745],{"class":74},".father",[68,133747,15777],{"class":335},[68,133749,133750,133752,133754,133756],{"class":70,"line":1525},[68,133751,132554],{"class":82},[68,133753,51638],{"class":335},[68,133755,54965],{"class":82},[68,133757,1498],{"class":335},[68,133759,133760],{"class":70,"line":1537},[68,133761,1772],{"class":335},[19,133763,133764],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[301,133766,133768],{"id":133767},"_1114-定位数值的移动","11.1.4 定位数值的移动",[48,133770],{"style":50,"src":133771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133773,133774],{},"✨ 黄金口诀：",[19,133776,133777],{},"\"TOP正下负上，LEFT正右负左\"",[19,133779,133780],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133782,133783],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133785,133786],{},"✨ 简单记：",[19,133788,133789],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[250,133791,133792],{},"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":63,"searchDepth":92,"depth":92,"links":133794},[133795],{"id":132322,"depth":92,"text":132323,"children":133796},[133797,133798,133799,133800],{"id":132326,"depth":1387,"text":132327},{"id":132341,"depth":1387,"text":132342},{"id":132509,"depth":1387,"text":132510},{"id":133767,"depth":1387,"text":133768},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132314,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133807,"title":133808,"body":133809,"description":257,"extension":258,"meta":135232,"navigation":260,"path":135233,"seo":135234,"stem":135235,"__hash__":135236},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133810,"toc":135211},[133811,133814,133818,133826,133830,133835,133843,133855,133859,133864,133872,133883,133887,133892,133933,133941,133945,133948,133951,133954,134048,134051,134145,134148,134242,134245,134248,134283,134286,134289,134319,134322,134325,134328,134331,134334,134337,134340,134410,134413,134417,134421,134462,134466,134472,134475,134478,134482,134485,134488,134491,134572,134575,134578,134582,134586,134589,134592,134595,134598,134601,134607,134616,134620,134639,134643,134653,134656,134659,134662,134665,134668,134671,134674,134677,134686,134690,134699,134702,134707,134760,134765,134931,134934,134937,134942,134945,134948,134951,134954,134959,135107,135110,135113,135118,135121,135126,135160,135163,135166,135170,135173,135180,135183,135186,135189,135192,135195,135198,135201,135205,135208],[10,133812,133808],{"id":133813},"_12-显示隐藏与图形资源",[14,133815,133817],{"id":133816},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[42,133819,133820,133823],{},[26,133821,133822],{},"目的:让一个元素在页面中消失或者显示出来",[26,133824,133825],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[301,133827,133829],{"id":133828},"_1211-display-显示","12.1.1 display 显示",[23,133831,133832],{},[26,133833,133834],{},"display 设置或检索对象是否及如何显示",[42,133836,133837,133840],{},[26,133838,133839],{},"display: none;隐藏对象",[26,133841,133842],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[23,133844,133845,133852],{"start":92},[26,133846,133847,133848,133851],{},"特点： display 隐藏元素后， ",[483,133849,133850],{},"不再占"," 有原来的位置",[26,133853,133854],{},"在js中使用非常的广泛",[301,133856,133858],{"id":133857},"_1212-visibility可见性","12.1.2 visibility可见性",[23,133860,133861],{},[26,133862,133863],{},"visibility 属性用于指定一个元素应可见还是隐藏",[42,133865,133866,133869],{},[26,133867,133868],{},"visibility： visible；元素可见",[26,133870,133871],{},"visibility：hidden；元素隐藏",[23,133873,133874,133877,133880],{"start":92},[26,133875,133876],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[26,133878,133879],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[26,133881,133882],{},"隐藏后继续占有原有位置",[301,133884,133886],{"id":133885},"_1213-overflow溢出","12.1.3 overflow溢出",[42,133888,133889],{},[26,133890,133891],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[471,133893,133894,133902],{},[474,133895,133896],{},[477,133897,133898,133900],{},[480,133899,127212],{"align":23941},[480,133901,27693],{"align":23941},[518,133903,133904,133912,133919,133926],{},[477,133905,133906,133909],{},[523,133907,133908],{"align":23941},"visible",[523,133910,133911],{"align":23941},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[477,133913,133914,133916],{},[523,133915,61915],{"align":23941},[523,133917,133918],{"align":23941},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[477,133920,133921,133923],{},[523,133922,129168],{"align":23941},[523,133924,133925],{"align":23941},"不管超出内容否，总是显示滚动条",[477,133927,133928,133930],{},[523,133929,72864],{"align":23941},[523,133931,133932],{"align":23941},"超出自动显示滚动条，不超出不显示滚动条",[42,133934,133935,133938],{},[26,133936,133937],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[26,133939,133940],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[301,133942,133944],{"id":133943},"_1214-案例收获","12.1.4 案例收获",[48,133946],{"style":50,"src":133947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133949,133950],{},"问题：没做出来动态效果，使用hover没实现",[19,133952,133953],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[58,133955,133956],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,133957,133958,133962,133976,133980,133994,133998,134012,134016,134030,134034],{"__ignoreMap":63},[68,133959,133960],{"class":70,"line":71},[68,133961,132187],{"class":393},[68,133963,133964,133966,133968,133970,133972,133974],{"class":70,"line":92},[68,133965,132192],{"class":74},[68,133967,80008],{"class":335},[68,133969,129108],{"class":82},[68,133971,51638],{"class":335},[68,133973,132201],{"class":82},[68,133975,129678],{"class":335},[68,133977,133978],{"class":70,"line":1387},[68,133979,132208],{"class":393},[68,133981,133982,133984,133986,133988,133990,133992],{"class":70,"line":1402},[68,133983,132213],{"class":74},[68,133985,80008],{"class":335},[68,133987,129108],{"class":82},[68,133989,51638],{"class":335},[68,133991,54965],{"class":82},[68,133993,129678],{"class":335},[68,133995,133996],{"class":70,"line":1408},[68,133997,132228],{"class":393},[68,133999,134000,134002,134004,134006,134008,134010],{"class":70,"line":1422},[68,134001,132233],{"class":74},[68,134003,80008],{"class":335},[68,134005,129108],{"class":82},[68,134007,51638],{"class":335},[68,134009,55032],{"class":82},[68,134011,129678],{"class":335},[68,134013,134014],{"class":70,"line":1428},[68,134015,132248],{"class":393},[68,134017,134018,134020,134022,134024,134026,134028],{"class":70,"line":1519},[68,134019,132253],{"class":74},[68,134021,80008],{"class":335},[68,134023,129108],{"class":82},[68,134025,51638],{"class":335},[68,134027,86434],{"class":82},[68,134029,129678],{"class":335},[68,134031,134032],{"class":70,"line":1525},[68,134033,132268],{"class":393},[68,134035,134036,134038,134040,134042,134044,134046],{"class":70,"line":1537},[68,134037,132273],{"class":74},[68,134039,80008],{"class":335},[68,134041,129108],{"class":82},[68,134043,51638],{"class":335},[68,134045,132282],{"class":82},[68,134047,129678],{"class":335},[19,134049,134050],{},"完整代码：",[58,134052,134053],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,134054,134055,134059,134073,134077,134091,134095,134109,134113,134127,134131],{"__ignoreMap":63},[68,134056,134057],{"class":70,"line":71},[68,134058,132187],{"class":393},[68,134060,134061,134063,134065,134067,134069,134071],{"class":70,"line":92},[68,134062,132192],{"class":74},[68,134064,80008],{"class":335},[68,134066,129108],{"class":82},[68,134068,51638],{"class":335},[68,134070,132201],{"class":82},[68,134072,129678],{"class":335},[68,134074,134075],{"class":70,"line":1387},[68,134076,132208],{"class":393},[68,134078,134079,134081,134083,134085,134087,134089],{"class":70,"line":1402},[68,134080,132213],{"class":74},[68,134082,80008],{"class":335},[68,134084,129108],{"class":82},[68,134086,51638],{"class":335},[68,134088,54965],{"class":82},[68,134090,129678],{"class":335},[68,134092,134093],{"class":70,"line":1408},[68,134094,132228],{"class":393},[68,134096,134097,134099,134101,134103,134105,134107],{"class":70,"line":1422},[68,134098,132233],{"class":74},[68,134100,80008],{"class":335},[68,134102,129108],{"class":82},[68,134104,51638],{"class":335},[68,134106,55032],{"class":82},[68,134108,129678],{"class":335},[68,134110,134111],{"class":70,"line":1428},[68,134112,132248],{"class":393},[68,134114,134115,134117,134119,134121,134123,134125],{"class":70,"line":1519},[68,134116,132253],{"class":74},[68,134118,80008],{"class":335},[68,134120,129108],{"class":82},[68,134122,51638],{"class":335},[68,134124,86434],{"class":82},[68,134126,129678],{"class":335},[68,134128,134129],{"class":70,"line":1525},[68,134130,132268],{"class":393},[68,134132,134133,134135,134137,134139,134141,134143],{"class":70,"line":1537},[68,134134,132273],{"class":74},[68,134136,80008],{"class":335},[68,134138,129108],{"class":82},[68,134140,51638],{"class":335},[68,134142,132282],{"class":82},[68,134144,129678],{"class":335},[19,134146,134147],{},"分布思路重点详解：",[58,134149,134150],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,134151,134152,134156,134170,134174,134188,134192,134206,134210,134224,134228],{"__ignoreMap":63},[68,134153,134154],{"class":70,"line":71},[68,134155,132187],{"class":393},[68,134157,134158,134160,134162,134164,134166,134168],{"class":70,"line":92},[68,134159,132192],{"class":74},[68,134161,80008],{"class":335},[68,134163,129108],{"class":82},[68,134165,51638],{"class":335},[68,134167,132201],{"class":82},[68,134169,129678],{"class":335},[68,134171,134172],{"class":70,"line":1387},[68,134173,132208],{"class":393},[68,134175,134176,134178,134180,134182,134184,134186],{"class":70,"line":1402},[68,134177,132213],{"class":74},[68,134179,80008],{"class":335},[68,134181,129108],{"class":82},[68,134183,51638],{"class":335},[68,134185,54965],{"class":82},[68,134187,129678],{"class":335},[68,134189,134190],{"class":70,"line":1408},[68,134191,132228],{"class":393},[68,134193,134194,134196,134198,134200,134202,134204],{"class":70,"line":1422},[68,134195,132233],{"class":74},[68,134197,80008],{"class":335},[68,134199,129108],{"class":82},[68,134201,51638],{"class":335},[68,134203,55032],{"class":82},[68,134205,129678],{"class":335},[68,134207,134208],{"class":70,"line":1428},[68,134209,132248],{"class":393},[68,134211,134212,134214,134216,134218,134220,134222],{"class":70,"line":1519},[68,134213,132253],{"class":74},[68,134215,80008],{"class":335},[68,134217,129108],{"class":82},[68,134219,51638],{"class":335},[68,134221,86434],{"class":82},[68,134223,129678],{"class":335},[68,134225,134226],{"class":70,"line":1525},[68,134227,132268],{"class":393},[68,134229,134230,134232,134234,134236,134238,134240],{"class":70,"line":1537},[68,134231,132273],{"class":74},[68,134233,80008],{"class":335},[68,134235,129108],{"class":82},[68,134237,51638],{"class":335},[68,134239,132282],{"class":82},[68,134241,129678],{"class":335},[48,134243],{"style":50,"src":134244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134246,134247],{},"图片太大，盒子太小，此时需要修改图片的大小",[58,134249,134251],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[65,134252,134253],{"__ignoreMap":63},[68,134254,134255,134257,134259,134261,134263,134266,134268,134270,134273,134276,134278,134281],{"class":70,"line":71},[68,134256,1243],{"class":335},[68,134258,48],{"class":51501},[68,134260,55440],{"class":74},[68,134262,381],{"class":335},[68,134264,134265],{"class":78},"\"images\u002Fpic.jpg\"",[68,134267,55448],{"class":74},[68,134269,381],{"class":335},[68,134271,134272],{"class":78},"\"描述文字\"",[68,134274,134275],{"class":74}," title",[68,134277,381],{"class":335},[68,134279,134280],{"class":78},"\"悬停提示\"",[68,134282,51508],{"class":335},[48,134284],{"style":50,"src":134285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134287,134288],{},"制造遮罩层",[58,134290,134291],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,134292,134293],{"__ignoreMap":63},[68,134294,134295,134297,134299,134301,134303,134305,134307,134309,134311,134313,134315,134317],{"class":70,"line":71},[68,134296,1243],{"class":335},[68,134298,48],{"class":51501},[68,134300,55440],{"class":74},[68,134302,381],{"class":335},[68,134304,134265],{"class":78},[68,134306,55448],{"class":74},[68,134308,381],{"class":335},[68,134310,134272],{"class":78},[68,134312,134275],{"class":74},[68,134314,381],{"class":335},[68,134316,134280],{"class":78},[68,134318,51508],{"class":335},[19,134320,134321],{},"此时是这样的为标准流",[48,134323],{"style":50,"src":134324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134326,134327],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134329,134330],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134332,134333],{},"让他在中间，用center(background-position)",[19,134335,134336],{},"将需要变的尽可能放到一个盒子中",[19,134338,134339],{},"放大盒子上内部盒子发生变化",[58,134341,134343],{"className":126748,"code":134342,"language":126750,"meta":63,"style":63},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[65,134344,134345,134351,134361,134365,134372,134382,134394,134406],{"__ignoreMap":63},[68,134346,134347,134349],{"class":70,"line":71},[68,134348,127815],{"class":74},[68,134350,15777],{"class":335},[68,134352,134353,134355,134357,134359],{"class":70,"line":92},[68,134354,132554],{"class":82},[68,134356,51638],{"class":335},[68,134358,54965],{"class":82},[68,134360,1498],{"class":335},[68,134362,134363],{"class":70,"line":1387},[68,134364,1772],{"class":335},[68,134366,134367,134370],{"class":70,"line":1402},[68,134368,134369],{"class":74},".child",[68,134371,15777],{"class":335},[68,134373,134374,134376,134378,134380],{"class":70,"line":1408},[68,134375,132554],{"class":82},[68,134377,51638],{"class":335},[68,134379,55032],{"class":82},[68,134381,1498],{"class":335},[68,134383,134384,134386,134388,134390,134392],{"class":70,"line":1422},[68,134385,132568],{"class":82},[68,134387,51638],{"class":335},[68,134389,989],{"class":82},[68,134391,661],{"class":331},[68,134393,1498],{"class":335},[68,134395,134396,134398,134400,134402,134404],{"class":70,"line":1428},[68,134397,132585],{"class":82},[68,134399,51638],{"class":335},[68,134401,989],{"class":82},[68,134403,661],{"class":331},[68,134405,1498],{"class":335},[68,134407,134408],{"class":70,"line":1519},[68,134409,1772],{"class":335},[19,134411,134412],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134414,134416],{"id":134415},"_122-精灵图","12.2 精灵图",[301,134418,134420],{"id":134419},"_1221-理解","12.2.1 理解",[23,134422,134423,134441],{},[26,134424,134425,134426,132654,134429,134432,134433,134436,134437,134440],{},"目的： ",[483,134427,134428],{},"为了有效地减少服务器接收和发送请求的次数",[483,134430,134431],{},"提高"," 页面的 ",[483,134434,134435],{},"加载速度"," ，出现了 ",[483,134438,134439],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[26,134442,134443,134444,134446,134447,134449,134450,134452,134453,134455,134456,134458,134459,134461],{},"使用精灵图核心：",[53917,134445],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53917,134448],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53917,134451],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53917,134454],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53917,134457],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53917,134460],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[301,134463,134465],{"id":134464},"_1222-扒图","12.2.2 扒图",[58,134467,134470],{"className":134468,"code":134469,"language":5393},[5391],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[65,134471,134469],{"__ignoreMap":63},[48,134473],{"style":50,"src":134474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[48,134476],{"style":50,"src":134477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[301,134479,134481],{"id":134480},"_1223-精灵图的实现","12.2.3 精灵图的实现",[48,134483],{"style":50,"src":134484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134486,134487],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[48,134489],{"style":50,"src":134490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[58,134492,134494],{"className":126748,"code":134493,"language":126750,"meta":63,"style":63},"\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",[65,134495,134496,134501,134508,134520,134532,134551,134568],{"__ignoreMap":63},[68,134497,134498],{"class":70,"line":71},[68,134499,134500],{"class":393},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[68,134502,134503,134506],{"class":70,"line":92},[68,134504,134505],{"class":74},".icon",[68,134507,15777],{"class":335},[68,134509,134510,134512,134514,134516,134518],{"class":70,"line":1387},[68,134511,70769],{"class":82},[68,134513,51638],{"class":335},[68,134515,1033],{"class":82},[68,134517,51693],{"class":331},[68,134519,1498],{"class":335},[68,134521,134522,134524,134526,134528,134530],{"class":70,"line":1402},[68,134523,70989],{"class":82},[68,134525,51638],{"class":335},[68,134527,1033],{"class":82},[68,134529,51693],{"class":331},[68,134531,1498],{"class":335},[68,134533,134534,134536,134538,134540,134542,134545,134547,134549],{"class":70,"line":1408},[68,134535,70812],{"class":82},[68,134537,51638],{"class":335},[68,134539,61927],{"class":82},[68,134541,336],{"class":335},[68,134543,134544],{"class":5421},"sprites.png",[68,134546,13919],{"class":335},[68,134548,61937],{"class":82},[68,134550,1498],{"class":335},[68,134552,134553,134555,134557,134559,134561,134564,134566],{"class":70,"line":1422},[68,134554,129008],{"class":82},[68,134556,51638],{"class":335},[68,134558,51964],{"class":82},[68,134560,51693],{"class":331},[68,134562,134563],{"class":82}," -20",[68,134565,51693],{"class":331},[68,134567,1498],{"class":335},[68,134569,134570],{"class":70,"line":1428},[68,134571,1772],{"class":335},[48,134573],{"style":50,"src":134574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134576,134577],{},"在前端中坐标轴的正方向是右和下",[14,134579,134581],{"id":134580},"_123-字体图标","12.3 字体图标",[301,134583,134585],{"id":134584},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134587,134588],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134590,134591],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134593,134594],{},"1.图片文件还是比较大的。",[19,134596,134597],{},"2.图片本身放大和缩小会失真。",[19,134599,134600],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134602,134603,134604,25944],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[483,134605,134606],{},"字体图标 iconfont",[19,134608,134609,134612,134613,28588],{},[483,134610,134611],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[483,134614,134615],{},"展示的是图标，本质属于字体",[301,134617,134619],{"id":134618},"_1232-字体图标的优点","12.3.2 字体图标的优点",[42,134621,134622,134627,134630,134633,134636],{},[26,134623,134624,134626],{},[483,134625,26080],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[26,134628,134629],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[26,134631,134632],{},"兼容性：几乎支持所有的浏览器，请放心使用",[26,134634,134635],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[26,134637,134638],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[301,134640,134642],{"id":134641},"_1233-字体库下载网站","12.3.3 字体库下载网站",[42,134644,134645],{},[26,134646,134647,134648],{},"icomoon字体库：",[30,134649,134652],{"href":134650,"rel":134651},"http:\u002F\u002Ficomoon.io\u002F",[34],"http:\u002F\u002Ficomoon.io",[19,134654,134655],{},"进去之后点icomoon app",[48,134657],{"style":50,"src":134658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134660,134661],{},"可以对其编辑：",[48,134663],{"style":50,"src":134664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134666,134667],{},"生成字体：",[48,134669],{"style":50,"src":134670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134672,134673],{},"下载：",[48,134675],{"style":50,"src":134676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[42,134678,134679],{},[26,134680,134681,134682],{},"阿里iconfont字体库： ",[30,134683,134684],{"href":134684,"rel":134685},"http:\u002F\u002Fwww.iconfont.cn\u002F",[34],[301,134687,134689],{"id":134688},"_1234-字体图标的引入","12.3.4 字体图标的引入",[23,134691,134692],{},[26,134693,134694,134695,134698],{},"把下载包里面的 ",[483,134696,134697],{},"fonts"," 文件夹放入页面根目录下",[48,134700],{"style":50,"src":134701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[23,134703,134704],{"start":92},[26,134705,134706],{},"字体文件格式",[471,134708,134709,134718],{},[474,134710,134711],{},[477,134712,134713,134716],{},[480,134714,134715],{"align":23941},"格式",[480,134717,23945],{"align":23941},[518,134719,134720,134730,134740,134750],{},[477,134721,134722,134727],{},[523,134723,134724],{"align":23941},[483,134725,134726],{},".ttf",[523,134728,134729],{"align":23941},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[477,134731,134732,134737],{},[523,134733,134734],{"align":23941},[483,134735,134736],{},".woff",[523,134738,134739],{"align":23941},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[477,134741,134742,134747],{},[523,134743,134744],{"align":23941},[483,134745,134746],{},".eot",[523,134748,134749],{"align":23941},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[477,134751,134752,134757],{},[523,134753,134754],{"align":23941},[483,134755,134756],{},"svg",[523,134758,134759],{"align":23941},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[23,134761,134762],{"start":1387},[26,134763,134764],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[58,134766,134768],{"className":126748,"code":134767,"language":126750,"meta":63,"style":63},"\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",[65,134769,134770,134775,134782,134794,134810,134835,134856,134876,134896,134900,134906,134916,134927],{"__ignoreMap":63},[68,134771,134772],{"class":70,"line":71},[68,134773,134774],{"class":393},"\u002F* 引入字体图标 *\u002F\n",[68,134776,134777,134780],{"class":70,"line":92},[68,134778,134779],{"class":331},"@font-face",[68,134781,15777],{"class":335},[68,134783,134784,134787,134789,134792],{"class":70,"line":1387},[68,134785,134786],{"class":82},"  font-family",[68,134788,51638],{"class":335},[68,134790,134791],{"class":78},"'icomoon'",[68,134793,1498],{"class":335},[68,134795,134796,134799,134801,134803,134805,134808],{"class":70,"line":1402},[68,134797,134798],{"class":82},"  src",[68,134800,51638],{"class":335},[68,134802,61927],{"class":82},[68,134804,336],{"class":335},[68,134806,134807],{"class":78},"'fonts\u002Ficomoon.eot'",[68,134809,2925],{"class":335},[68,134811,134812,134814,134816,134818,134820,134823,134825,134828,134830,134833],{"class":70,"line":1408},[68,134813,134798],{"class":82},[68,134815,51638],{"class":335},[68,134817,61927],{"class":82},[68,134819,336],{"class":335},[68,134821,134822],{"class":78},"'fonts\u002Ficomoon.eot?#iefix'",[68,134824,13919],{"class":335},[68,134826,134827],{"class":82},"format",[68,134829,336],{"class":335},[68,134831,134832],{"class":78},"'embedded-opentype'",[68,134834,38248],{"class":335},[68,134836,134837,134840,134842,134845,134847,134849,134851,134854],{"class":70,"line":1422},[68,134838,134839],{"class":82},"       url",[68,134841,336],{"class":335},[68,134843,134844],{"class":78},"'fonts\u002Ficomoon.woff'",[68,134846,13919],{"class":335},[68,134848,134827],{"class":82},[68,134850,336],{"class":335},[68,134852,134853],{"class":78},"'woff'",[68,134855,38248],{"class":335},[68,134857,134858,134860,134862,134865,134867,134869,134871,134874],{"class":70,"line":1428},[68,134859,134839],{"class":82},[68,134861,336],{"class":335},[68,134863,134864],{"class":78},"'fonts\u002Ficomoon.ttf'",[68,134866,13919],{"class":335},[68,134868,134827],{"class":82},[68,134870,336],{"class":335},[68,134872,134873],{"class":78},"'truetype'",[68,134875,38248],{"class":335},[68,134877,134878,134880,134882,134885,134887,134889,134891,134894],{"class":70,"line":1519},[68,134879,134839],{"class":82},[68,134881,336],{"class":335},[68,134883,134884],{"class":78},"'fonts\u002Ficomoon.svg#icomoon'",[68,134886,13919],{"class":335},[68,134888,134827],{"class":82},[68,134890,336],{"class":335},[68,134892,134893],{"class":78},"'svg'",[68,134895,2925],{"class":335},[68,134897,134898],{"class":70,"line":1525},[68,134899,1772],{"class":335},[68,134901,134902,134904],{"class":70,"line":1537},[68,134903,134505],{"class":74},[68,134905,15777],{"class":335},[68,134907,134908,134910,134912,134914],{"class":70,"line":1819},[68,134909,134786],{"class":82},[68,134911,51638],{"class":335},[68,134913,134791],{"class":78},[68,134915,1498],{"class":335},[68,134917,134918,134921,134923,134925],{"class":70,"line":1824},[68,134919,134920],{"class":82},"  font-style",[68,134922,51638],{"class":335},[68,134924,64042],{"class":82},[68,134926,1498],{"class":335},[68,134928,134929],{"class":70,"line":1830},[68,134930,1772],{"class":335},[19,134932,134933],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[48,134935],{"style":50,"src":134936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[23,134938,134939],{"start":1402},[26,134940,134941],{},"添加字体",[48,134943],{"style":50,"src":134944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134946,134947],{},"复制：",[48,134949],{"style":50,"src":134950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134952,134953],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[23,134955,134956],{"start":1408},[26,134957,134958],{},"代码展示：",[58,134960,134961],{"className":126748,"code":134767,"language":126750,"meta":63,"style":63},[65,134962,134963,134967,134973,134983,134997,135019,135037,135055,135073,135077,135083,135093,135103],{"__ignoreMap":63},[68,134964,134965],{"class":70,"line":71},[68,134966,134774],{"class":393},[68,134968,134969,134971],{"class":70,"line":92},[68,134970,134779],{"class":331},[68,134972,15777],{"class":335},[68,134974,134975,134977,134979,134981],{"class":70,"line":1387},[68,134976,134786],{"class":82},[68,134978,51638],{"class":335},[68,134980,134791],{"class":78},[68,134982,1498],{"class":335},[68,134984,134985,134987,134989,134991,134993,134995],{"class":70,"line":1402},[68,134986,134798],{"class":82},[68,134988,51638],{"class":335},[68,134990,61927],{"class":82},[68,134992,336],{"class":335},[68,134994,134807],{"class":78},[68,134996,2925],{"class":335},[68,134998,134999,135001,135003,135005,135007,135009,135011,135013,135015,135017],{"class":70,"line":1408},[68,135000,134798],{"class":82},[68,135002,51638],{"class":335},[68,135004,61927],{"class":82},[68,135006,336],{"class":335},[68,135008,134822],{"class":78},[68,135010,13919],{"class":335},[68,135012,134827],{"class":82},[68,135014,336],{"class":335},[68,135016,134832],{"class":78},[68,135018,38248],{"class":335},[68,135020,135021,135023,135025,135027,135029,135031,135033,135035],{"class":70,"line":1422},[68,135022,134839],{"class":82},[68,135024,336],{"class":335},[68,135026,134844],{"class":78},[68,135028,13919],{"class":335},[68,135030,134827],{"class":82},[68,135032,336],{"class":335},[68,135034,134853],{"class":78},[68,135036,38248],{"class":335},[68,135038,135039,135041,135043,135045,135047,135049,135051,135053],{"class":70,"line":1428},[68,135040,134839],{"class":82},[68,135042,336],{"class":335},[68,135044,134864],{"class":78},[68,135046,13919],{"class":335},[68,135048,134827],{"class":82},[68,135050,336],{"class":335},[68,135052,134873],{"class":78},[68,135054,38248],{"class":335},[68,135056,135057,135059,135061,135063,135065,135067,135069,135071],{"class":70,"line":1519},[68,135058,134839],{"class":82},[68,135060,336],{"class":335},[68,135062,134884],{"class":78},[68,135064,13919],{"class":335},[68,135066,134827],{"class":82},[68,135068,336],{"class":335},[68,135070,134893],{"class":78},[68,135072,2925],{"class":335},[68,135074,135075],{"class":70,"line":1525},[68,135076,1772],{"class":335},[68,135078,135079,135081],{"class":70,"line":1537},[68,135080,134505],{"class":74},[68,135082,15777],{"class":335},[68,135084,135085,135087,135089,135091],{"class":70,"line":1819},[68,135086,134786],{"class":82},[68,135088,51638],{"class":335},[68,135090,134791],{"class":78},[68,135092,1498],{"class":335},[68,135094,135095,135097,135099,135101],{"class":70,"line":1824},[68,135096,134920],{"class":82},[68,135098,51638],{"class":335},[68,135100,64042],{"class":82},[68,135102,1498],{"class":335},[68,135104,135105],{"class":70,"line":1830},[68,135106,1772],{"class":335},[48,135108],{"style":50,"src":135109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135111,135112],{},"更加细节展示：",[23,135114,135115],{},[26,135116,135117],{},"html 标签内添加小图标",[48,135119],{"style":50,"src":135120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[23,135122,135123],{"start":92},[26,135124,135125],{},"给标签定义字体",[58,135127,135128],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,135129,135130,135134,135148,135152],{"__ignoreMap":63},[68,135131,135132],{"class":70,"line":71},[68,135133,130859],{"class":393},[68,135135,135136,135138,135140,135142,135144,135146],{"class":70,"line":92},[68,135137,1243],{"class":335},[68,135139,51812],{"class":51501},[68,135141,53687],{"class":74},[68,135143,381],{"class":335},[68,135145,130872],{"class":78},[68,135147,51508],{"class":335},[68,135149,135150],{"class":70,"line":1387},[68,135151,130879],{"class":335},[68,135153,135154,135156,135158],{"class":70,"line":1402},[68,135155,51986],{"class":335},[68,135157,51812],{"class":51501},[68,135159,51508],{"class":335},[19,135161,135162],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[48,135164],{"style":50,"src":135165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[301,135167,135169],{"id":135168},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135171,135172],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135174,135175,135176,135179],{},"把压缩包里面的 ",[483,135177,135178],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135181,135182],{},"打开网站，点下方：",[48,135184],{"style":50,"src":135185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[48,135187],{"style":50,"src":135188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[48,135190],{"style":50,"src":135191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135193,135194],{},"点yes重新加载",[19,135196,135197],{},"然后重复之前的操作就可以实现了",[19,135199,135200],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[301,135202,135204],{"id":135203},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[48,135206],{"style":50,"src":135207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[250,135209,135210],{},"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":63,"searchDepth":92,"depth":92,"links":135212},[135213,135219,135224],{"id":133816,"depth":92,"text":133817,"children":135214},[135215,135216,135217,135218],{"id":133828,"depth":1387,"text":133829},{"id":133857,"depth":1387,"text":133858},{"id":133885,"depth":1387,"text":133886},{"id":133943,"depth":1387,"text":133944},{"id":134415,"depth":92,"text":134416,"children":135220},[135221,135222,135223],{"id":134419,"depth":1387,"text":134420},{"id":134464,"depth":1387,"text":134465},{"id":134480,"depth":1387,"text":134481},{"id":134580,"depth":92,"text":134581,"children":135225},[135226,135227,135228,135229,135230,135231],{"id":134584,"depth":1387,"text":134585},{"id":134618,"depth":1387,"text":134619},{"id":134641,"depth":1387,"text":134642},{"id":134688,"depth":1387,"text":134689},{"id":135168,"depth":1387,"text":135169},{"id":135203,"depth":1387,"text":135204},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133808,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135238,"title":135239,"body":135240,"description":257,"extension":258,"meta":136467,"navigation":260,"path":136468,"seo":136469,"stem":136470,"__hash__":136471},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135241,"toc":136448},[135242,135245,135249,135252,135266,135334,135364,135367,135371,135375,135477,135524,135528,135531,135534,135568,135571,135574,135577,135580,135583,135586,135589,135591,135594,135597,135600,135603,135606,135609,135612,135640,135643,135647,135650,135657,135660,135663,135689,135692,135696,135699,135702,135709,135713,135716,135718,135750,135753,135756,135768,135774,135777,135780,135783,135785,135789,135792,135795,135798,135843,135847,135849,135852,135859,135901,135904,135908,135913,135927,135931,135934,135937,135940,135943,135946,135980,135983,135986,136040,136043,136046,136049,136052,136104,136107,136110,136159,136163,136165,136168,136171,136174,136177,136180,136238,136241,136247,136250,136253,136285,136288,136292,136296,136299,136331,136335,136338,136382,136386,136389,136392,136395,136398,136401,136404,136407,136409,136412,136414,136417,136420,136423,136426,136431,136434,136436,136439,136442,136445],[10,135243,135239],{"id":135244},"_13-界面样式与布局技巧",[14,135246,135248],{"id":135247},"_131-css三角","13.1 css三角",[19,135250,135251],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[42,135253,135254,135257,135260,135263],{},[26,135255,135256],{},"用css 边框可以模拟三角效果",[26,135258,135259],{},"宽度高度为0",[26,135261,135262],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[26,135264,135265],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[58,135267,135269],{"className":126748,"code":135268,"language":126750,"meta":63,"style":63},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[65,135270,135271,135276,135283,135293,135303,135319,135330],{"__ignoreMap":63},[68,135272,135273],{"class":70,"line":71},[68,135274,135275],{"class":393},"\u002F* CSS 实现三角形 *\u002F\n",[68,135277,135278,135281],{"class":70,"line":92},[68,135279,135280],{"class":74},".triangle",[68,135282,15777],{"class":335},[68,135284,135285,135287,135289,135291],{"class":70,"line":1387},[68,135286,70769],{"class":82},[68,135288,51638],{"class":335},[68,135290,525],{"class":82},[68,135292,1498],{"class":335},[68,135294,135295,135297,135299,135301],{"class":70,"line":1402},[68,135296,70989],{"class":82},[68,135298,51638],{"class":335},[68,135300,525],{"class":82},[68,135302,1498],{"class":335},[68,135304,135305,135307,135309,135311,135313,135315,135317],{"class":70,"line":1408},[68,135306,71097],{"class":82},[68,135308,51638],{"class":335},[68,135310,779],{"class":82},[68,135312,51693],{"class":331},[68,135314,51722],{"class":82},[68,135316,64192],{"class":82},[68,135318,1498],{"class":335},[68,135320,135321,135324,135326,135328],{"class":70,"line":1422},[68,135322,135323],{"class":82},"  border-bottom-color",[68,135325,51638],{"class":335},[68,135327,62570],{"class":82},[68,135329,1498],{"class":335},[68,135331,135332],{"class":70,"line":1428},[68,135333,1772],{"class":335},[58,135335,135336],{"className":126748,"code":130905,"language":126750,"meta":63,"style":63},[65,135337,135338,135344,135360],{"__ignoreMap":63},[68,135339,135340,135342],{"class":70,"line":71},[68,135341,51812],{"class":51501},[68,135343,15777],{"class":335},[68,135345,135346,135348,135350,135352,135354,135356,135358],{"class":70,"line":92},[68,135347,71097],{"class":82},[68,135349,51638],{"class":335},[68,135351,551],{"class":82},[68,135353,51693],{"class":331},[68,135355,51722],{"class":82},[68,135357,130140],{"class":82},[68,135359,1498],{"class":335},[68,135361,135362],{"class":70,"line":1387},[68,135363,1772],{"class":335},[48,135365],{"style":50,"src":135366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135368,135370],{"id":135369},"_132-css用户界面样式","13.2 css用户界面样式",[301,135372,135374],{"id":135373},"_1321-鼠标样式","13.2.1 鼠标样式",[58,135376,135378],{"className":126748,"code":135377,"language":126750,"meta":63,"style":63},"\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",[65,135379,135380,135385,135404,135422,135441,135458],{"__ignoreMap":63},[68,135381,135382],{"class":70,"line":71},[68,135383,135384],{"class":393},"\u002F* 鼠标样式 *\u002F\n",[68,135386,135387,135389,135391,135394,135396,135398,135401],{"class":70,"line":92},[68,135388,51812],{"class":51501},[68,135390,80008],{"class":335},[68,135392,135393],{"class":82},"cursor",[68,135395,51638],{"class":335},[68,135397,62231],{"class":82},[68,135399,135400],{"class":335},"; }   ",[68,135402,135403],{"class":393},"\u002F* 手型 *\u002F\n",[68,135405,135406,135408,135410,135412,135414,135417,135419],{"class":70,"line":1387},[68,135407,51812],{"class":51501},[68,135409,80008],{"class":335},[68,135411,135393],{"class":82},[68,135413,51638],{"class":335},[68,135415,135416],{"class":82},"default",[68,135418,135400],{"class":335},[68,135420,135421],{"class":393},"\u002F* 默认 *\u002F\n",[68,135423,135424,135426,135428,135430,135432,135435,135438],{"class":70,"line":1402},[68,135425,51812],{"class":51501},[68,135427,80008],{"class":335},[68,135429,135393],{"class":82},[68,135431,51638],{"class":335},[68,135433,135434],{"class":82},"move",[68,135436,135437],{"class":335},"; }      ",[68,135439,135440],{"class":393},"\u002F* 移动 *\u002F\n",[68,135442,135443,135445,135447,135449,135451,135453,135455],{"class":70,"line":1408},[68,135444,51812],{"class":51501},[68,135446,80008],{"class":335},[68,135448,135393],{"class":82},[68,135450,51638],{"class":335},[68,135452,5393],{"class":82},[68,135454,135437],{"class":335},[68,135456,135457],{"class":393},"\u002F* 文本 *\u002F\n",[68,135459,135460,135462,135464,135466,135468,135471,135474],{"class":70,"line":1422},[68,135461,51812],{"class":51501},[68,135463,80008],{"class":335},[68,135465,135393],{"class":82},[68,135467,51638],{"class":335},[68,135469,135470],{"class":82},"not-allowed",[68,135472,135473],{"class":335},"; } ",[68,135475,135476],{"class":393},"\u002F* 禁止 *\u002F\n",[471,135478,135479,135487],{},[474,135480,135481],{},[477,135482,135483,135485],{},[480,135484,127212],{"align":23941},[480,135486,27693],{"align":23941},[518,135488,135489,135496,135503,135510,135517],{},[477,135490,135491,135493],{},[523,135492,135416],{"align":23941},[523,135494,135495],{"align":23941},"小白 默认",[477,135497,135498,135500],{},[523,135499,62231],{"align":23941},[523,135501,135502],{"align":23941},"小手",[477,135504,135505,135507],{},[523,135506,135434],{"align":23941},[523,135508,135509],{"align":23941},"移动",[477,135511,135512,135514],{},[523,135513,5393],{"align":23941},[523,135515,135516],{"align":23941},"文本",[477,135518,135519,135521],{},[523,135520,135470],{"align":23941},[523,135522,135523],{"align":23941},"禁止",[301,135525,135527],{"id":135526},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135529,135530],{},"去除表单轮廓线",[19,135532,135533],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[58,135535,135536],{"className":126748,"code":130112,"language":126750,"meta":63,"style":63},[65,135537,135538,135542,135548,135564],{"__ignoreMap":63},[68,135539,135540],{"class":70,"line":71},[68,135541,130119],{"class":393},[68,135543,135544,135546],{"class":70,"line":92},[68,135545,51812],{"class":51501},[68,135547,15777],{"class":335},[68,135549,135550,135552,135554,135556,135558,135560,135562],{"class":70,"line":1387},[68,135551,71097],{"class":82},[68,135553,51638],{"class":335},[68,135555,551],{"class":82},[68,135557,51693],{"class":331},[68,135559,51722],{"class":82},[68,135561,130140],{"class":82},[68,135563,1498],{"class":335},[68,135565,135566],{"class":70,"line":1402},[68,135567,1772],{"class":335},[19,135569,135570],{},"文本域：",[48,135572],{"style":50,"src":135573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135575,135576],{},"此时会有一个空白区域",[48,135578],{"style":50,"src":135579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135581,135582],{},"写在同一行就不会出现这个问题",[48,135584],{"style":50,"src":135585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135587,135588],{},"文本域是行内块元素，一定记住！！！",[19,135590,98434],{},[48,135592],{"style":50,"src":135593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135595,135596],{},"文本域尽量放在一行",[19,135598,135599],{},"知识回顾：cols是列，rols是行",[48,135601],{"style":50,"src":135602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135604,135605],{},"它可以进行拖动，显然这是我们不愿意看到的",[48,135607],{"style":50,"src":135608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135610,135611],{},"使用resize进行解决",[58,135613,135615],{"className":126748,"code":135614,"language":126750,"meta":63,"style":63},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[65,135616,135617,135623,135636],{"__ignoreMap":63},[68,135618,135619,135621],{"class":70,"line":71},[68,135620,54022],{"class":51501},[68,135622,15777],{"class":335},[68,135624,135625,135627,135629,135631,135633],{"class":70,"line":92},[68,135626,70999],{"class":82},[68,135628,51638],{"class":335},[68,135630,54938],{"class":82},[68,135632,130611],{"class":335},[68,135634,135635],{"class":393},"\u002F* 取消表单轮廓线 *\u002F\n",[68,135637,135638],{"class":70,"line":1387},[68,135639,1772],{"class":335},[19,135641,135642],{},"此时就无法通过右下方实现拖动了",[301,135644,135646],{"id":135645},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135648,135649],{},"实现一个盒子中的文字和图片对齐",[19,135651,135652,135653,135656],{},"用于设置一个元素的 ",[483,135654,135655],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135658,135659],{},"图片和文字默认是基线对齐",[48,135661],{"style":50,"src":135662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[58,135664,135665],{"className":126748,"code":135614,"language":126750,"meta":63,"style":63},[65,135666,135667,135673,135685],{"__ignoreMap":63},[68,135668,135669,135671],{"class":70,"line":71},[68,135670,54022],{"class":51501},[68,135672,15777],{"class":335},[68,135674,135675,135677,135679,135681,135683],{"class":70,"line":92},[68,135676,70999],{"class":82},[68,135678,51638],{"class":335},[68,135680,54938],{"class":82},[68,135682,130611],{"class":335},[68,135684,135635],{"class":393},[68,135686,135687],{"class":70,"line":1387},[68,135688,1772],{"class":335},[48,135690],{"style":50,"src":135691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22203,135693,135695],{"id":135694},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135697,135698],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[48,135700],{"style":50,"src":135701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135703,135704,135705,135708],{},"此时可以给图片、表单这些行内块元素的 ",[483,135706,135707],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22203,135710,135712],{"id":135711},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135714,135715],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135717,14838],{},[58,135719,135721],{"className":126748,"code":135720,"language":126750,"meta":63,"style":63},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[65,135722,135723,135728,135734,135746],{"__ignoreMap":63},[68,135724,135725],{"class":70,"line":71},[68,135726,135727],{"class":393},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[68,135729,135730,135732],{"class":70,"line":92},[68,135731,48],{"class":51501},[68,135733,15777],{"class":335},[68,135735,135736,135739,135741,135744],{"class":70,"line":1387},[68,135737,135738],{"class":82},"  vertical-align",[68,135740,51638],{"class":335},[68,135742,135743],{"class":82},"middle",[68,135745,1498],{"class":335},[68,135747,135748],{"class":70,"line":1402},[68,135749,1772],{"class":335},[48,135751],{"style":50,"src":135752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135754,135755],{},"主要解决方法有两种：",[23,135757,135758],{},[26,135759,135760,135763,135764,135767],{},[483,135761,135762],{},"给图片"," 添加 ",[483,135765,135766],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135769,135770,135771],{},"2.把图片转换为块级元素 ",[483,135772,135773],{},"display: block",[19,135775,135776],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135778,135779],{},"img {",[19,135781,135782],{},"vertical-align:middle;",[19,135784,1279],{},[301,135786,135788],{"id":135787},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135790,135791],{},"效果：",[48,135793],{"style":50,"src":135794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135796,135797],{},"单行文本溢出显示省略号--必须满足三个条件：",[58,135799,135801],{"className":126748,"code":135800,"language":126750,"meta":63,"style":63},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[65,135802,135803,135808,135814,135824,135829,135839],{"__ignoreMap":63},[68,135804,135805],{"class":70,"line":71},[68,135806,135807],{"class":393},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[68,135809,135810,135812],{"class":70,"line":92},[68,135811,48],{"class":51501},[68,135813,15777],{"class":335},[68,135815,135816,135818,135820,135822],{"class":70,"line":1387},[68,135817,135738],{"class":82},[68,135819,51638],{"class":335},[68,135821,135743],{"class":82},[68,135823,1498],{"class":335},[68,135825,135826],{"class":70,"line":1402},[68,135827,135828],{"class":393},"  \u002F* 或 *\u002F\n",[68,135830,135831,135833,135835,135837],{"class":70,"line":1408},[68,135832,128364],{"class":82},[68,135834,51638],{"class":335},[68,135836,61070],{"class":82},[68,135838,1498],{"class":335},[68,135840,135841],{"class":70,"line":1422},[68,135842,1772],{"class":335},[301,135844,135846],{"id":135845},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135848,135791],{},[48,135850],{"style":50,"src":135851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135853,135854,135855,135858],{},"多行文本溢出显示省略号， ",[483,135856,135857],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[58,135860,135861],{"className":126748,"code":135800,"language":126750,"meta":63,"style":63},[65,135862,135863,135867,135873,135883,135887,135897],{"__ignoreMap":63},[68,135864,135865],{"class":70,"line":71},[68,135866,135807],{"class":393},[68,135868,135869,135871],{"class":70,"line":92},[68,135870,48],{"class":51501},[68,135872,15777],{"class":335},[68,135874,135875,135877,135879,135881],{"class":70,"line":1387},[68,135876,135738],{"class":82},[68,135878,51638],{"class":335},[68,135880,135743],{"class":82},[68,135882,1498],{"class":335},[68,135884,135885],{"class":70,"line":1402},[68,135886,135828],{"class":393},[68,135888,135889,135891,135893,135895],{"class":70,"line":1408},[68,135890,128364],{"class":82},[68,135892,51638],{"class":335},[68,135894,61070],{"class":82},[68,135896,1498],{"class":335},[68,135898,135899],{"class":70,"line":1422},[68,135900,1772],{"class":335},[19,135902,135903],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135905,135907],{"id":135906},"_133-常见布局技巧","13.3 常见布局技巧",[19,135909,135910],{},[483,135911,135912],{},"巧妙利用一个技术更快更好的布局：",[23,135914,135915,135918,135921,135924],{},[26,135916,135917],{},"margin负值的运用",[26,135919,135920],{},"文字围绕浮动元素",[26,135922,135923],{},"行内块的巧妙运用",[26,135925,135926],{},"CSS三角强化",[301,135928,135930],{"id":135929},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135932,135933],{},"应用场景：",[48,135935],{"style":50,"src":135936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[48,135938],{"style":50,"src":135939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135941,135942],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135944,135945],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[58,135947,135948],{"className":126748,"code":130112,"language":126750,"meta":63,"style":63},[65,135949,135950,135954,135960,135976],{"__ignoreMap":63},[68,135951,135952],{"class":70,"line":71},[68,135953,130119],{"class":393},[68,135955,135956,135958],{"class":70,"line":92},[68,135957,51812],{"class":51501},[68,135959,15777],{"class":335},[68,135961,135962,135964,135966,135968,135970,135972,135974],{"class":70,"line":1387},[68,135963,71097],{"class":82},[68,135965,51638],{"class":335},[68,135967,551],{"class":82},[68,135969,51693],{"class":331},[68,135971,51722],{"class":82},[68,135973,130140],{"class":82},[68,135975,1498],{"class":335},[68,135977,135978],{"class":70,"line":1402},[68,135979,1772],{"class":335},[48,135981],{"style":50,"src":135982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135984,135985],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[58,135987,135989],{"className":126748,"code":135988,"language":126750,"meta":63,"style":63},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[65,135990,135991,135996,136002,136012,136024,136036],{"__ignoreMap":63},[68,135992,135993],{"class":70,"line":71},[68,135994,135995],{"class":393},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[68,135997,135998,136000],{"class":70,"line":92},[68,135999,130596],{"class":74},[68,136001,15777],{"class":335},[68,136003,136004,136006,136008,136010],{"class":70,"line":1387},[68,136005,132554],{"class":82},[68,136007,51638],{"class":335},[68,136009,54965],{"class":82},[68,136011,1498],{"class":335},[68,136013,136014,136016,136018,136020,136022],{"class":70,"line":1402},[68,136015,132568],{"class":82},[68,136017,51638],{"class":335},[68,136019,779],{"class":82},[68,136021,51693],{"class":331},[68,136023,1498],{"class":335},[68,136025,136026,136028,136030,136032,136034],{"class":70,"line":1408},[68,136027,132585],{"class":82},[68,136029,51638],{"class":335},[68,136031,1033],{"class":82},[68,136033,51693],{"class":331},[68,136035,1498],{"class":335},[68,136037,136038],{"class":70,"line":1422},[68,136039,1772],{"class":335},[19,136041,136042],{},"加上上述代码会发现：",[48,136044],{"style":50,"src":136045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136047,136048],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136050,136051],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[58,136053,136054],{"className":126748,"code":135988,"language":126750,"meta":63,"style":63},[65,136055,136056,136060,136066,136076,136088,136100],{"__ignoreMap":63},[68,136057,136058],{"class":70,"line":71},[68,136059,135995],{"class":393},[68,136061,136062,136064],{"class":70,"line":92},[68,136063,130596],{"class":74},[68,136065,15777],{"class":335},[68,136067,136068,136070,136072,136074],{"class":70,"line":1387},[68,136069,132554],{"class":82},[68,136071,51638],{"class":335},[68,136073,54965],{"class":82},[68,136075,1498],{"class":335},[68,136077,136078,136080,136082,136084,136086],{"class":70,"line":1402},[68,136079,132568],{"class":82},[68,136081,51638],{"class":335},[68,136083,779],{"class":82},[68,136085,51693],{"class":331},[68,136087,1498],{"class":335},[68,136089,136090,136092,136094,136096,136098],{"class":70,"line":1408},[68,136091,132585],{"class":82},[68,136093,51638],{"class":335},[68,136095,1033],{"class":82},[68,136097,51693],{"class":331},[68,136099,1498],{"class":335},[68,136101,136102],{"class":70,"line":1422},[68,136103,1772],{"class":335},[19,136105,136106],{},"解决方式2：",[19,136108,136109],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[58,136111,136113],{"className":126748,"code":136112,"language":126750,"meta":63,"style":63},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[65,136114,136115,136121,136131,136143,136155],{"__ignoreMap":63},[68,136116,136117,136119],{"class":70,"line":71},[68,136118,51812],{"class":51501},[68,136120,15777],{"class":335},[68,136122,136123,136125,136127,136129],{"class":70,"line":92},[68,136124,132554],{"class":82},[68,136126,51638],{"class":335},[68,136128,54965],{"class":82},[68,136130,1498],{"class":335},[68,136132,136133,136135,136137,136139,136141],{"class":70,"line":1387},[68,136134,132568],{"class":82},[68,136136,51638],{"class":335},[68,136138,779],{"class":82},[68,136140,51693],{"class":331},[68,136142,1498],{"class":335},[68,136144,136145,136147,136149,136151,136153],{"class":70,"line":1402},[68,136146,132585],{"class":82},[68,136148,51638],{"class":335},[68,136150,1033],{"class":82},[68,136152,51693],{"class":331},[68,136154,1498],{"class":335},[68,136156,136157],{"class":70,"line":1408},[68,136158,1772],{"class":335},[301,136160,136162],{"id":136161},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136164,135933],{},[48,136166],{"style":50,"src":136167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136169,136170],{},"实现结构图：",[48,136172],{"style":50,"src":136173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136175,136176],{},"巧妙运用浮动元素不会压住文字的特性",[19,136178,136179],{},"代码显示：",[58,136181,136183],{"className":126748,"code":136182,"language":126750,"meta":63,"style":63},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[65,136184,136185,136191,136201,136205,136210,136214,136220,136234],{"__ignoreMap":63},[68,136186,136187,136189],{"class":70,"line":71},[68,136188,130596],{"class":74},[68,136190,15777],{"class":335},[68,136192,136193,136195,136197,136199],{"class":70,"line":92},[68,136194,131228],{"class":82},[68,136196,51638],{"class":335},[68,136198,23941],{"class":82},[68,136200,1498],{"class":335},[68,136202,136203],{"class":70,"line":1387},[68,136204,1772],{"class":335},[68,136206,136207],{"class":70,"line":1402},[68,136208,136209],{"class":335},"```Css\n",[68,136211,136212],{"class":70,"line":1408},[68,136213,130591],{"class":393},[68,136215,136216,136218],{"class":70,"line":1422},[68,136217,130596],{"class":74},[68,136219,15777],{"class":335},[68,136221,136222,136224,136226,136228,136230,136232],{"class":70,"line":1428},[68,136223,70671],{"class":82},[68,136225,51638],{"class":335},[68,136227,525],{"class":82},[68,136229,51757],{"class":82},[68,136231,130611],{"class":335},[68,136233,130614],{"class":393},[68,136235,136236],{"class":70,"line":1519},[68,136237,1772],{"class":335},[19,136239,136240],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[58,136242,136245],{"className":136243,"code":136244,"language":5393},[5391],"\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",[65,136246,136244],{"__ignoreMap":63},[48,136248],{"style":50,"src":136249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136251,136252],{},"最终展示结果：",[58,136254,136255],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},[65,136256,136257,136261,136267,136281],{"__ignoreMap":63},[68,136258,136259],{"class":70,"line":71},[68,136260,130591],{"class":393},[68,136262,136263,136265],{"class":70,"line":92},[68,136264,130596],{"class":74},[68,136266,15777],{"class":335},[68,136268,136269,136271,136273,136275,136277,136279],{"class":70,"line":1387},[68,136270,70671],{"class":82},[68,136272,51638],{"class":335},[68,136274,525],{"class":82},[68,136276,51757],{"class":82},[68,136278,130611],{"class":335},[68,136280,130614],{"class":393},[68,136282,136283],{"class":70,"line":1402},[68,136284,1772],{"class":335},[48,136286],{"style":50,"src":136287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136289,136291],{"id":136290},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[301,136293,136295],{"id":136294},"_1341-原理","13.4.1 原理",[48,136297],{"style":50,"src":136298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[58,136300,136301],{"className":126748,"code":130584,"language":126750,"meta":63,"style":63},[65,136302,136303,136307,136313,136327],{"__ignoreMap":63},[68,136304,136305],{"class":70,"line":71},[68,136306,130591],{"class":393},[68,136308,136309,136311],{"class":70,"line":92},[68,136310,130596],{"class":74},[68,136312,15777],{"class":335},[68,136314,136315,136317,136319,136321,136323,136325],{"class":70,"line":1387},[68,136316,70671],{"class":82},[68,136318,51638],{"class":335},[68,136320,525],{"class":82},[68,136322,51757],{"class":82},[68,136324,130611],{"class":335},[68,136326,130614],{"class":393},[68,136328,136329],{"class":70,"line":1402},[68,136330,1772],{"class":335},[301,136332,136334],{"id":136333},"_1342-实例","13.4.2 实例",[48,136336],{"style":50,"src":136337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[58,136339,136340],{"className":126748,"code":131214,"language":126750,"meta":63,"style":63},[65,136341,136342,136348,136358,136362,136368,136378],{"__ignoreMap":63},[68,136343,136344,136346],{"class":70,"line":71},[68,136345,131221],{"class":74},[68,136347,15777],{"class":335},[68,136349,136350,136352,136354,136356],{"class":70,"line":92},[68,136351,131228],{"class":82},[68,136353,51638],{"class":335},[68,136355,23941],{"class":82},[68,136357,1498],{"class":335},[68,136359,136360],{"class":70,"line":1387},[68,136361,1772],{"class":335},[68,136363,136364,136366],{"class":70,"line":1402},[68,136365,131243],{"class":74},[68,136367,15777],{"class":335},[68,136369,136370,136372,136374,136376],{"class":70,"line":1408},[68,136371,131228],{"class":82},[68,136373,51638],{"class":335},[68,136375,72723],{"class":82},[68,136377,1498],{"class":335},[68,136379,136380],{"class":70,"line":1422},[68,136381,1772],{"class":335},[14,136383,136385],{"id":136384},"_135-css的初始化","13.5 css的初始化",[19,136387,136388],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136390,136391],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136393,136394],{},"每个网页都必须首先进行 CSS初始化。",[19,136396,136397],{},"这里我们以 京东CSS初始化代码为例。",[19,136399,136400],{},"在网页右键查看网页源代码",[19,136402,136403],{},"找到css的link引入语句",[19,136405,136406],{},"然后ctrl+f 输入body",[19,136408,77427],{},[48,136410],{"style":50,"src":136411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136413,77450],{},[48,136415],{"style":50,"src":136416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136418,136419],{},"③打开了网页上传压缩的代码",[48,136421],{"style":50,"src":136422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136424,136425],{},"④从body前可以查看这个网页的初始化代码",[19,136427,136428],{},[483,136429,136430],{},"Unicode编码字体：",[19,136432,136433],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136435,83408],{},[19,136437,136438],{},"黑体 \\9ED1\\4F53",[19,136440,136441],{},"宋体 \\5B8B\\4F53",[19,136443,136444],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[250,136446,136447],{},"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":63,"searchDepth":92,"depth":92,"links":136449},[136450,136451,136458,136462,136466],{"id":135247,"depth":92,"text":135248},{"id":135369,"depth":92,"text":135370,"children":136452},[136453,136454,136455,136456,136457],{"id":135373,"depth":1387,"text":135374},{"id":135526,"depth":1387,"text":135527},{"id":135645,"depth":1387,"text":135646},{"id":135787,"depth":1387,"text":135788},{"id":135845,"depth":1387,"text":135846},{"id":135906,"depth":92,"text":135907,"children":136459},[136460,136461],{"id":135929,"depth":1387,"text":135930},{"id":136161,"depth":1387,"text":136162},{"id":136290,"depth":92,"text":136291,"children":136463},[136464,136465],{"id":136294,"depth":1387,"text":136295},{"id":136333,"depth":1387,"text":136334},{"id":136384,"depth":92,"text":136385},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135239,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136473,"title":136474,"body":136475,"description":257,"extension":258,"meta":138161,"navigation":260,"path":138162,"seo":138163,"stem":138164,"__hash__":138165},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136476,"toc":138150},[136477,136480,136484,136488,136491,136498,136501,136504,136542,136545,136547,136561,136565,136574,136578,136583,136586,136589,136592,136627,136632,136635,136665,136668,136673,136676,136679,136709,136712,136766,136769,136773,136778,136790,136793,136797,136827,136830,136835,136838,136868,136871,136875,136892,136896,136900,136903,136936,136939,136943,136946,136949,136952,136955,136958,137069,137072,137075,137078,137180,137183,137187,137191,137195,137198,137238,137241,137243,137259,137263,137266,137271,137352,137355,137358,137484,137489,137492,137500,137503,137508,137593,137596,137600,137603,137606,137610,137630,137635,137719,137722,137727,137730,137733,137811,137814,137817,137820,137823,137826,137831,137834,137837,137909,137912,137917,137920,138017,138020,138026,138029,138032,138035,138038,138041,138044,138047,138050,138054,138059,138062,138095,138100,138103,138144,138147],[10,136478,136474],{"id":136479},"_14-html5与css3新特性",[14,136481,136483],{"id":136482},"_141-html5的新特性","14.1 HTML5的新特性",[301,136485,136487],{"id":136486},"_1411-基本标签","14.1.1 基本标签",[19,136489,136490],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136492,136493,136494,136497],{},"这些新特性都有兼容性问题，基本是 ",[483,136495,136496],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136499,136500],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136502,136503],{},"现在使用的是新特性：",[42,136505,136506,136512,136518,136524,136530,136536],{},[26,136507,136508,136511],{},[65,136509,136510],{},"\u003Cheader>"," 头部标签",[26,136513,136514,136517],{},[65,136515,136516],{},"\u003Cnav>"," 导航标签",[26,136519,136520,136523],{},[65,136521,136522],{},"\u003Carticle>"," 内容标签",[26,136525,136526,136529],{},[65,136527,136528],{},"\u003Csection>"," 定义文档某个区域",[26,136531,136532,136535],{},[65,136533,136534],{},"\u003Caside>"," 侧边栏标签",[26,136537,136538,136541],{},[65,136539,136540],{},"\u003Cfooter>"," 尾部标签",[48,136543],{"style":50,"src":136544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136546,365],{},[42,136548,136549,136552,136555,136558],{},[26,136550,136551],{},"这种语义化标准主要是针对搜索引擎的",[26,136553,136554],{},"这些标签页面中可以经常使用",[26,136556,136557],{},"在IE9中，需要把这些元素转换为块级元素",[26,136559,136560],{},"移动端更喜欢使用这些标签",[301,136562,136564],{"id":136563},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136566,136567,136568,136570,136571,136573],{},"音频 ",[483,136569,28378],{}," 和视频 ",[483,136572,28387],{}," 两个标签",[22203,136575,136577],{"id":136576},"_14121-视频标签-video","14.1.2.1 视频标签- video",[23,136579,136580],{},[26,136581,136582],{},"支持格式：",[48,136584],{"style":50,"src":136585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136587,136588],{},"尽量使用MP4，兼容性好",[19,136590,136591],{},"用MP4就可以",[58,136593,136595],{"className":127495,"code":136594,"language":127497,"meta":63,"style":63},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[65,136596,136597],{"__ignoreMap":63},[68,136598,136599,136601,136603,136605,136607,136610,136612,136615,136618,136621,136623,136625],{"class":70,"line":71},[68,136600,1243],{"class":335},[68,136602,28387],{"class":51501},[68,136604,55440],{"class":74},[68,136606,381],{"class":335},[68,136608,136609],{"class":78},"\"movie.mp4\"",[68,136611,92624],{"class":74},[68,136613,136614],{"class":74}," autoplay",[68,136616,136617],{"class":74}," muted",[68,136619,136620],{"class":74}," loop",[68,136622,55515],{"class":335},[68,136624,28387],{"class":51501},[68,136626,51508],{"class":335},[23,136628,136629],{"start":92},[26,136630,136631],{},"兼容写法",[19,136633,136634],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[58,136636,136637],{"className":127495,"code":136594,"language":127497,"meta":63,"style":63},[65,136638,136639],{"__ignoreMap":63},[68,136640,136641,136643,136645,136647,136649,136651,136653,136655,136657,136659,136661,136663],{"class":70,"line":71},[68,136642,1243],{"class":335},[68,136644,28387],{"class":51501},[68,136646,55440],{"class":74},[68,136648,381],{"class":335},[68,136650,136609],{"class":78},[68,136652,92624],{"class":74},[68,136654,136614],{"class":74},[68,136656,136617],{"class":74},[68,136658,136620],{"class":74},[68,136660,55515],{"class":335},[68,136662,28387],{"class":51501},[68,136664,51508],{"class":335},[19,136666,136667],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[23,136669,136670],{"start":1387},[26,136671,136672],{},"video常用属性",[48,136674],{"style":50,"src":136675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136677,136678],{},"poster属性后面是跟的等待加载图片的地址",[58,136680,136681],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,136682,136683],{"__ignoreMap":63},[68,136684,136685,136687,136689,136691,136693,136695,136697,136699,136701,136703,136705,136707],{"class":70,"line":71},[68,136686,1243],{"class":335},[68,136688,48],{"class":51501},[68,136690,55440],{"class":74},[68,136692,381],{"class":335},[68,136694,134265],{"class":78},[68,136696,55448],{"class":74},[68,136698,381],{"class":335},[68,136700,134272],{"class":78},[68,136702,134275],{"class":74},[68,136704,381],{"class":335},[68,136706,134280],{"class":78},[68,136708,51508],{"class":335},[19,136710,136711],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[58,136713,136715],{"className":126748,"code":136714,"language":126750,"meta":63,"style":63},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[65,136716,136717,136722,136728,136752,136757,136762],{"__ignoreMap":63},[68,136718,136719],{"class":70,"line":71},[68,136720,136721],{"class":393},"\u002F* 2D 位移 *\u002F\n",[68,136723,136724,136726],{"class":70,"line":92},[68,136725,51812],{"class":51501},[68,136727,15777],{"class":335},[68,136729,136730,136733,136735,136738,136740,136742,136744,136746,136748,136750],{"class":70,"line":1387},[68,136731,136732],{"class":82},"  transform",[68,136734,51638],{"class":335},[68,136736,136737],{"class":82},"translate",[68,136739,336],{"class":335},[68,136741,644],{"class":82},[68,136743,51693],{"class":331},[68,136745,12640],{"class":335},[68,136747,989],{"class":82},[68,136749,51693],{"class":331},[68,136751,2925],{"class":335},[68,136753,136754],{"class":70,"line":1402},[68,136755,136756],{"class":393},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[68,136758,136759],{"class":70,"line":1408},[68,136760,136761],{"class":393},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[68,136763,136764],{"class":70,"line":1422},[68,136765,1772],{"class":335},[19,136767,136768],{},"muted:自动静音属性",[22203,136770,136772],{"id":136771},"_14122-音频标签audio","14.1.2.2 音频标签audio",[23,136774,136775],{},[26,136776,136777],{},"基本使用",[19,136779,136780,136781,136786,136787],{},"当前 ",[483,136782,136783],{},[65,136784,136785],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[483,136788,136789],{},"mp3格式",[48,136791],{"style":50,"src":136792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[23,136794,136795],{"start":92},[26,136796,136631],{},[58,136798,136799],{"className":127495,"code":136594,"language":127497,"meta":63,"style":63},[65,136800,136801],{"__ignoreMap":63},[68,136802,136803,136805,136807,136809,136811,136813,136815,136817,136819,136821,136823,136825],{"class":70,"line":71},[68,136804,1243],{"class":335},[68,136806,28387],{"class":51501},[68,136808,55440],{"class":74},[68,136810,381],{"class":335},[68,136812,136609],{"class":78},[68,136814,92624],{"class":74},[68,136816,136614],{"class":74},[68,136818,136617],{"class":74},[68,136820,136620],{"class":74},[68,136822,55515],{"class":335},[68,136824,28387],{"class":51501},[68,136826,51508],{"class":335},[19,136828,136829],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[23,136831,136832],{"start":1387},[26,136833,136834],{},"常用属性",[48,136836],{"style":50,"src":136837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[58,136839,136840],{"className":127495,"code":136594,"language":127497,"meta":63,"style":63},[65,136841,136842],{"__ignoreMap":63},[68,136843,136844,136846,136848,136850,136852,136854,136856,136858,136860,136862,136864,136866],{"class":70,"line":71},[68,136845,1243],{"class":335},[68,136847,28387],{"class":51501},[68,136849,55440],{"class":74},[68,136851,381],{"class":335},[68,136853,136609],{"class":78},[68,136855,92624],{"class":74},[68,136857,136614],{"class":74},[68,136859,136617],{"class":74},[68,136861,136620],{"class":74},[68,136863,55515],{"class":335},[68,136865,28387],{"class":51501},[68,136867,51508],{"class":335},[19,136869,136870],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22203,136872,136874],{"id":136873},"_14123-总结","14.1.2.3 总结",[42,136876,136877,136880,136883,136886,136889],{},[26,136878,136879],{},"音频标签和视频标签使用方式基本一致",[26,136881,136882],{},"浏览器支持情况不同",[26,136884,136885],{},"谷歌浏览器把音频和视频自动播放禁止了",[26,136887,136888],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[26,136890,136891],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[301,136893,136895],{"id":136894},"_1413-表单元素","14.1.3 表单元素",[22203,136897,136899],{"id":136898},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[48,136901],{"style":50,"src":136902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[58,136904,136906],{"className":127495,"code":136905,"language":127497,"meta":63,"style":63},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[65,136907,136908],{"__ignoreMap":63},[68,136909,136910,136912,136914,136916,136918,136920,136922,136924,136927,136929,136931,136934],{"class":70,"line":71},[68,136911,1243],{"class":335},[68,136913,54022],{"class":51501},[68,136915,54025],{"class":74},[68,136917,381],{"class":335},[68,136919,62900],{"class":78},[68,136921,15125],{"class":74},[68,136923,381],{"class":335},[68,136925,136926],{"class":78},"\"username\"",[68,136928,61221],{"class":74},[68,136930,381],{"class":335},[68,136932,136933],{"class":78},"\"请输入用户名\"",[68,136935,51508],{"class":335},[48,136937],{"style":50,"src":136938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22203,136940,136942],{"id":136941},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[48,136944],{"style":50,"src":136945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136947,136948],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136950,136951],{},"快捷操作：",[48,136953],{"style":50,"src":136954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136956,136957],{},"例子1：",[58,136959,136961],{"className":127495,"code":136960,"language":127497,"meta":63,"style":63},"\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",[65,136962,136963,136986,137013,137042,137061],{"__ignoreMap":63},[68,136964,136965,136967,136969,136971,136973,136976,136979,136981,136984],{"class":70,"line":71},[68,136966,1243],{"class":335},[68,136968,66826],{"class":51501},[68,136970,66829],{"class":74},[68,136972,381],{"class":335},[68,136974,136975],{"class":78},"\"\u002Fsubmit\"",[68,136977,136978],{"class":74}," method",[68,136980,381],{"class":335},[68,136982,136983],{"class":78},"\"post\"",[68,136985,51508],{"class":335},[68,136987,136988,136990,136992,136994,136996,136998,137000,137002,137004,137006,137008,137011],{"class":70,"line":92},[68,136989,52345],{"class":335},[68,136991,54022],{"class":51501},[68,136993,54025],{"class":74},[68,136995,381],{"class":335},[68,136997,62900],{"class":78},[68,136999,15125],{"class":74},[68,137001,381],{"class":335},[68,137003,136926],{"class":78},[68,137005,61221],{"class":74},[68,137007,381],{"class":335},[68,137009,137010],{"class":78},"\"用户名\"",[68,137012,51508],{"class":335},[68,137014,137015,137017,137019,137021,137023,137026,137028,137030,137033,137035,137037,137040],{"class":70,"line":1387},[68,137016,52345],{"class":335},[68,137018,54022],{"class":51501},[68,137020,54025],{"class":74},[68,137022,381],{"class":335},[68,137024,137025],{"class":78},"\"password\"",[68,137027,15125],{"class":74},[68,137029,381],{"class":335},[68,137031,137032],{"class":78},"\"pwd\"",[68,137034,61221],{"class":74},[68,137036,381],{"class":335},[68,137038,137039],{"class":78},"\"密码\"",[68,137041,51508],{"class":335},[68,137043,137044,137046,137048,137050,137052,137054,137057,137059],{"class":70,"line":1402},[68,137045,52345],{"class":335},[68,137047,54088],{"class":51501},[68,137049,54025],{"class":74},[68,137051,381],{"class":335},[68,137053,66849],{"class":78},[68,137055,137056],{"class":335},">提交\u003C\u002F",[68,137058,54088],{"class":51501},[68,137060,51508],{"class":335},[68,137062,137063,137065,137067],{"class":70,"line":1408},[68,137064,51986],{"class":335},[68,137066,66826],{"class":51501},[68,137068,51508],{"class":335},[48,137070],{"style":50,"src":137071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137073,137074],{},"value是表单域的内容",[19,137076,137077],{},"例子2：",[58,137079,137080],{"className":127495,"code":136960,"language":127497,"meta":63,"style":63},[65,137081,137082,137102,137128,137154,137172],{"__ignoreMap":63},[68,137083,137084,137086,137088,137090,137092,137094,137096,137098,137100],{"class":70,"line":71},[68,137085,1243],{"class":335},[68,137087,66826],{"class":51501},[68,137089,66829],{"class":74},[68,137091,381],{"class":335},[68,137093,136975],{"class":78},[68,137095,136978],{"class":74},[68,137097,381],{"class":335},[68,137099,136983],{"class":78},[68,137101,51508],{"class":335},[68,137103,137104,137106,137108,137110,137112,137114,137116,137118,137120,137122,137124,137126],{"class":70,"line":92},[68,137105,52345],{"class":335},[68,137107,54022],{"class":51501},[68,137109,54025],{"class":74},[68,137111,381],{"class":335},[68,137113,62900],{"class":78},[68,137115,15125],{"class":74},[68,137117,381],{"class":335},[68,137119,136926],{"class":78},[68,137121,61221],{"class":74},[68,137123,381],{"class":335},[68,137125,137010],{"class":78},[68,137127,51508],{"class":335},[68,137129,137130,137132,137134,137136,137138,137140,137142,137144,137146,137148,137150,137152],{"class":70,"line":1387},[68,137131,52345],{"class":335},[68,137133,54022],{"class":51501},[68,137135,54025],{"class":74},[68,137137,381],{"class":335},[68,137139,137025],{"class":78},[68,137141,15125],{"class":74},[68,137143,381],{"class":335},[68,137145,137032],{"class":78},[68,137147,61221],{"class":74},[68,137149,381],{"class":335},[68,137151,137039],{"class":78},[68,137153,51508],{"class":335},[68,137155,137156,137158,137160,137162,137164,137166,137168,137170],{"class":70,"line":1402},[68,137157,52345],{"class":335},[68,137159,54088],{"class":51501},[68,137161,54025],{"class":74},[68,137163,381],{"class":335},[68,137165,66849],{"class":78},[68,137167,137056],{"class":335},[68,137169,54088],{"class":51501},[68,137171,51508],{"class":335},[68,137173,137174,137176,137178],{"class":70,"line":1408},[68,137175,51986],{"class":335},[68,137177,66826],{"class":51501},[68,137179,51508],{"class":335},[48,137181],{"style":50,"src":137182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137184,137186],{"id":137185},"_142-css新特性","14.2 CSS新特性",[301,137188,137190],{"id":137189},"_1421-新增选择器","14.2.1 新增选择器",[22203,137192,137194],{"id":137193},"_14211-属性选择器","14.2.1.1 属性选择器",[48,137196],{"style":50,"src":137197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[58,137199,137201],{"className":126748,"code":137200,"language":126750,"meta":63,"style":63},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[65,137202,137203,137218,137234],{"__ignoreMap":63},[68,137204,137205,137207,137209,137211,137213,137215],{"class":70,"line":71},[68,137206,54022],{"class":51501},[68,137208,1223],{"class":335},[68,137210,103307],{"class":74},[68,137212,381],{"class":331},[68,137214,62900],{"class":78},[68,137216,137217],{"class":335},"] {\n",[68,137219,137220,137222,137224,137226,137228,137230,137232],{"class":70,"line":92},[68,137221,71097],{"class":82},[68,137223,51638],{"class":335},[68,137225,551],{"class":82},[68,137227,51693],{"class":331},[68,137229,51722],{"class":82},[68,137231,130328],{"class":82},[68,137233,1498],{"class":335},[68,137235,137236],{"class":70,"line":1387},[68,137237,1772],{"class":335},[48,137239],{"style":50,"src":137240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137242,365],{},[42,137244,137245,137248,137251,137254],{},[26,137246,137247],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[26,137249,137250],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[26,137252,137253],{},"属性选择器也可以选择出来自定义的属性",[26,137255,137256,137258],{},[483,137257,9230],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22203,137260,137262],{"id":137261},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[48,137264],{"style":50,"src":137265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[23,137267,137268],{},[26,137269,137270],{},"fist-child",[58,137272,137274],{"className":126748,"code":137273,"language":126750,"meta":63,"style":63},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[65,137275,137276,137281,137296,137316,137334],{"__ignoreMap":63},[68,137277,137278],{"class":70,"line":71},[68,137279,137280],{"class":393},"\u002F* 属性选择器 *\u002F\n",[68,137282,137283,137285,137287,137289,137291,137293],{"class":70,"line":92},[68,137284,54022],{"class":51501},[68,137286,1223],{"class":335},[68,137288,103307],{"class":74},[68,137290,381],{"class":331},[68,137292,62900],{"class":78},[68,137294,137295],{"class":335},"] { }\n",[68,137297,137298,137300,137302,137304,137307,137310,137313],{"class":70,"line":1387},[68,137299,54022],{"class":51501},[68,137301,1223],{"class":335},[68,137303,14899],{"class":74},[68,137305,137306],{"class":331},"^=",[68,137308,137309],{"class":78},"\"icon\"",[68,137311,137312],{"class":335},"] { }  ",[68,137314,137315],{"class":393},"\u002F* 以 icon 开头 *\u002F\n",[68,137317,137318,137320,137322,137324,137327,137329,137331],{"class":70,"line":1402},[68,137319,54022],{"class":51501},[68,137321,1223],{"class":335},[68,137323,14899],{"class":74},[68,137325,137326],{"class":331},"$=",[68,137328,137309],{"class":78},[68,137330,137312],{"class":335},[68,137332,137333],{"class":393},"\u002F* 以 icon 结尾 *\u002F\n",[68,137335,137336,137338,137340,137342,137345,137347,137349],{"class":70,"line":1408},[68,137337,54022],{"class":51501},[68,137339,1223],{"class":335},[68,137341,14899],{"class":74},[68,137343,137344],{"class":331},"*=",[68,137346,137309],{"class":78},[68,137348,137312],{"class":335},[68,137350,137351],{"class":393},"\u002F* 包含 icon *\u002F\n",[19,137353,137354],{},"ul的第一个儿子文本为红色",[19,137356,137357],{},"一定要在冒号前加空格，不然就是选中所有的了",[58,137359,137361],{"className":126748,"code":137360,"language":126750,"meta":63,"style":63},".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",[65,137362,137363,137369,137379,137383,137387,137392,137405,137418,137434,137451,137468],{"__ignoreMap":63},[68,137364,137365,137367],{"class":70,"line":71},[68,137366,127039],{"class":74},[68,137368,15777],{"class":335},[68,137370,137371,137373,137375,137377],{"class":70,"line":92},[68,137372,71106],{"class":82},[68,137374,51638],{"class":335},[68,137376,57622],{"class":82},[68,137378,1498],{"class":335},[68,137380,137381],{"class":70,"line":1387},[68,137382,1772],{"class":335},[68,137384,137385],{"class":70,"line":1402},[68,137386,136209],{"class":335},[68,137388,137389],{"class":70,"line":1408},[68,137390,137391],{"class":393},"\u002F* 结构伪类选择器 *\u002F\n",[68,137393,137394,137396,137399,137402],{"class":70,"line":1422},[68,137395,26],{"class":51501},[68,137397,137398],{"class":74},":first-child",[68,137400,137401],{"class":335}," { }           ",[68,137403,137404],{"class":393},"\u002F* 第一个 *\u002F\n",[68,137406,137407,137409,137412,137415],{"class":70,"line":1428},[68,137408,26],{"class":51501},[68,137410,137411],{"class":74},":last-child",[68,137413,137414],{"class":335}," { }            ",[68,137416,137417],{"class":393},"\u002F* 最后一个 *\u002F\n",[68,137419,137420,137422,137424,137426,137428,137431],{"class":70,"line":1519},[68,137421,26],{"class":51501},[68,137423,129662],{"class":74},[68,137425,336],{"class":335},[68,137427,412],{"class":82},[68,137429,137430],{"class":335},") { }          ",[68,137432,137433],{"class":393},"\u002F* 第2个 *\u002F\n",[68,137435,137436,137438,137440,137442,137445,137448],{"class":70,"line":1525},[68,137437,26],{"class":51501},[68,137439,129662],{"class":74},[68,137441,336],{"class":335},[68,137443,137444],{"class":82},"2n",[68,137446,137447],{"class":335},") { }         ",[68,137449,137450],{"class":393},"\u002F* 偶数 *\u002F\n",[68,137452,137453,137455,137457,137459,137462,137465],{"class":70,"line":1537},[68,137454,26],{"class":51501},[68,137456,129662],{"class":74},[68,137458,336],{"class":335},[68,137460,137461],{"class":82},"2n+1",[68,137463,137464],{"class":335},") { }       ",[68,137466,137467],{"class":393},"\u002F* 奇数 *\u002F\n",[68,137469,137470,137472,137474,137476,137479,137481],{"class":70,"line":1819},[68,137471,26],{"class":51501},[68,137473,129662],{"class":74},[68,137475,336],{"class":335},[68,137477,137478],{"class":82},"-n+3",[68,137480,137464],{"class":335},[68,137482,137483],{"class":393},"\u002F* 前3个 *\u002F\n",[51812,137485,137488],{"className":137486},[137487],"example","\n  示例内容\n",[19,137490,137491],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[42,137493,137494],{},[26,137495,137496,137499],{},[65,137497,137498],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137501,137502],{},"也就是说它选择的是熊大",[23,137504,137505],{"start":1422},[26,137506,137507],{},"权重",[58,137509,137511],{"className":126748,"code":137510,"language":126750,"meta":63,"style":63},"\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",[65,137512,137513,137517,137527,137537,137551,137565,137579],{"__ignoreMap":63},[68,137514,137515],{"class":70,"line":71},[68,137516,137391],{"class":393},[68,137518,137519,137521,137523,137525],{"class":70,"line":92},[68,137520,26],{"class":51501},[68,137522,137398],{"class":74},[68,137524,137401],{"class":335},[68,137526,137404],{"class":393},[68,137528,137529,137531,137533,137535],{"class":70,"line":1387},[68,137530,26],{"class":51501},[68,137532,137411],{"class":74},[68,137534,137414],{"class":335},[68,137536,137417],{"class":393},[68,137538,137539,137541,137543,137545,137547,137549],{"class":70,"line":1402},[68,137540,26],{"class":51501},[68,137542,129662],{"class":74},[68,137544,336],{"class":335},[68,137546,412],{"class":82},[68,137548,137430],{"class":335},[68,137550,137433],{"class":393},[68,137552,137553,137555,137557,137559,137561,137563],{"class":70,"line":1408},[68,137554,26],{"class":51501},[68,137556,129662],{"class":74},[68,137558,336],{"class":335},[68,137560,137444],{"class":82},[68,137562,137447],{"class":335},[68,137564,137450],{"class":393},[68,137566,137567,137569,137571,137573,137575,137577],{"class":70,"line":1422},[68,137568,26],{"class":51501},[68,137570,129662],{"class":74},[68,137572,336],{"class":335},[68,137574,137461],{"class":82},[68,137576,137464],{"class":335},[68,137578,137467],{"class":393},[68,137580,137581,137583,137585,137587,137589,137591],{"class":70,"line":1428},[68,137582,26],{"class":51501},[68,137584,129662],{"class":74},[68,137586,336],{"class":335},[68,137588,137478],{"class":82},[68,137590,137464],{"class":335},[68,137592,137483],{"class":393},[19,137594,137595],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22203,137597,137599],{"id":137598},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137601,137602],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[48,137604],{"style":50,"src":137605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[23,137607,137608],{},[26,137609,365],{},[42,137611,137612,137615,137618,137621,137624,137627],{},[26,137613,137614],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[26,137616,137617],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[26,137619,137620],{},"语法： element::before {}",[26,137622,137623],{},"before 和 after 必须有 content 属性",[26,137625,137626],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[26,137628,137629],{},"伪元素选择器和标签选择器一样，权重为 1",[23,137631,137632],{"start":92},[26,137633,137634],{},"实例",[58,137636,137637],{"className":126748,"code":137510,"language":126750,"meta":63,"style":63},[65,137638,137639,137643,137653,137663,137677,137691,137705],{"__ignoreMap":63},[68,137640,137641],{"class":70,"line":71},[68,137642,137391],{"class":393},[68,137644,137645,137647,137649,137651],{"class":70,"line":92},[68,137646,26],{"class":51501},[68,137648,137398],{"class":74},[68,137650,137401],{"class":335},[68,137652,137404],{"class":393},[68,137654,137655,137657,137659,137661],{"class":70,"line":1387},[68,137656,26],{"class":51501},[68,137658,137411],{"class":74},[68,137660,137414],{"class":335},[68,137662,137417],{"class":393},[68,137664,137665,137667,137669,137671,137673,137675],{"class":70,"line":1402},[68,137666,26],{"class":51501},[68,137668,129662],{"class":74},[68,137670,336],{"class":335},[68,137672,412],{"class":82},[68,137674,137430],{"class":335},[68,137676,137433],{"class":393},[68,137678,137679,137681,137683,137685,137687,137689],{"class":70,"line":1408},[68,137680,26],{"class":51501},[68,137682,129662],{"class":74},[68,137684,336],{"class":335},[68,137686,137444],{"class":82},[68,137688,137447],{"class":335},[68,137690,137450],{"class":393},[68,137692,137693,137695,137697,137699,137701,137703],{"class":70,"line":1422},[68,137694,26],{"class":51501},[68,137696,129662],{"class":74},[68,137698,336],{"class":335},[68,137700,137461],{"class":82},[68,137702,137464],{"class":335},[68,137704,137467],{"class":393},[68,137706,137707,137709,137711,137713,137715,137717],{"class":70,"line":1428},[68,137708,26],{"class":51501},[68,137710,129662],{"class":74},[68,137712,336],{"class":335},[68,137714,137478],{"class":82},[68,137716,137464],{"class":335},[68,137718,137483],{"class":393},[48,137720],{"style":50,"src":137721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[23,137723,137724],{"start":1387},[26,137725,137726],{},"使用场景1",[48,137728],{"style":50,"src":137729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137731,137732],{},"不需要再加盒子来整红色那部分了",[58,137734,137736],{"className":126748,"code":137735,"language":126750,"meta":63,"style":63},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[65,137737,137738,137743,137752,137763,137773,137777,137786,137797,137807],{"__ignoreMap":63},[68,137739,137740],{"class":70,"line":71},[68,137741,137742],{"class":393},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[68,137744,137745,137747,137750],{"class":70,"line":92},[68,137746,51812],{"class":51501},[68,137748,137749],{"class":74},"::before",[68,137751,15777],{"class":335},[68,137753,137754,137757,137759,137761],{"class":70,"line":1387},[68,137755,137756],{"class":82},"  content",[68,137758,51638],{"class":335},[68,137760,7857],{"class":78},[68,137762,1498],{"class":335},[68,137764,137765,137767,137769,137771],{"class":70,"line":1402},[68,137766,128364],{"class":82},[68,137768,51638],{"class":335},[68,137770,61070],{"class":82},[68,137772,1498],{"class":335},[68,137774,137775],{"class":70,"line":1408},[68,137776,1772],{"class":335},[68,137778,137779,137781,137784],{"class":70,"line":1422},[68,137780,51812],{"class":51501},[68,137782,137783],{"class":74},"::after",[68,137785,15777],{"class":335},[68,137787,137788,137790,137792,137795],{"class":70,"line":1428},[68,137789,137756],{"class":82},[68,137791,51638],{"class":335},[68,137793,137794],{"class":78},"\"→\"",[68,137796,1498],{"class":335},[68,137798,137799,137801,137803,137805],{"class":70,"line":1519},[68,137800,71106],{"class":82},[68,137802,51638],{"class":335},[68,137804,62271],{"class":82},[68,137806,1498],{"class":335},[68,137808,137809],{"class":70,"line":1525},[68,137810,1772],{"class":335},[48,137812],{"style":50,"src":137813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137815,137816],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[48,137818],{"style":50,"src":137819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137821,137822],{},"但是在引用时需要先转义一下",[19,137824,137825],{},"content='\\e930'",[23,137827,137828],{"start":1402},[26,137829,137830],{},"使用场景2",[19,137832,137833],{},"仿土豆效果",[19,137835,137836],{},"通过使用伪元素选择器可以减少body中盒子的数量",[58,137838,137839],{"className":126748,"code":137735,"language":126750,"meta":63,"style":63},[65,137840,137841,137845,137853,137863,137873,137877,137885,137895,137905],{"__ignoreMap":63},[68,137842,137843],{"class":70,"line":71},[68,137844,137742],{"class":393},[68,137846,137847,137849,137851],{"class":70,"line":92},[68,137848,51812],{"class":51501},[68,137850,137749],{"class":74},[68,137852,15777],{"class":335},[68,137854,137855,137857,137859,137861],{"class":70,"line":1387},[68,137856,137756],{"class":82},[68,137858,51638],{"class":335},[68,137860,7857],{"class":78},[68,137862,1498],{"class":335},[68,137864,137865,137867,137869,137871],{"class":70,"line":1402},[68,137866,128364],{"class":82},[68,137868,51638],{"class":335},[68,137870,61070],{"class":82},[68,137872,1498],{"class":335},[68,137874,137875],{"class":70,"line":1408},[68,137876,1772],{"class":335},[68,137878,137879,137881,137883],{"class":70,"line":1422},[68,137880,51812],{"class":51501},[68,137882,137783],{"class":74},[68,137884,15777],{"class":335},[68,137886,137887,137889,137891,137893],{"class":70,"line":1428},[68,137888,137756],{"class":82},[68,137890,51638],{"class":335},[68,137892,137794],{"class":78},[68,137894,1498],{"class":335},[68,137896,137897,137899,137901,137903],{"class":70,"line":1519},[68,137898,71106],{"class":82},[68,137900,51638],{"class":335},[68,137902,62271],{"class":82},[68,137904,1498],{"class":335},[68,137906,137907],{"class":70,"line":1525},[68,137908,1772],{"class":335},[48,137910],{"style":50,"src":137911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[23,137913,137914],{"start":1408},[26,137915,137916],{},"使用场景3",[19,137918,137919],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[58,137921,137923],{"className":126748,"code":137922,"language":126750,"meta":63,"style":63},".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",[65,137924,137925,137931,137941,137945,137949,137953,137961,137971,137981,137985,137993,138003,138013],{"__ignoreMap":63},[68,137926,137927,137929],{"class":70,"line":71},[68,137928,130596],{"class":74},[68,137930,15777],{"class":335},[68,137932,137933,137935,137937,137939],{"class":70,"line":92},[68,137934,131228],{"class":82},[68,137936,51638],{"class":335},[68,137938,23941],{"class":82},[68,137940,1498],{"class":335},[68,137942,137943],{"class":70,"line":1387},[68,137944,1772],{"class":335},[68,137946,137947],{"class":70,"line":1402},[68,137948,136209],{"class":335},[68,137950,137951],{"class":70,"line":1408},[68,137952,137742],{"class":393},[68,137954,137955,137957,137959],{"class":70,"line":1422},[68,137956,51812],{"class":51501},[68,137958,137749],{"class":74},[68,137960,15777],{"class":335},[68,137962,137963,137965,137967,137969],{"class":70,"line":1428},[68,137964,137756],{"class":82},[68,137966,51638],{"class":335},[68,137968,7857],{"class":78},[68,137970,1498],{"class":335},[68,137972,137973,137975,137977,137979],{"class":70,"line":1519},[68,137974,128364],{"class":82},[68,137976,51638],{"class":335},[68,137978,61070],{"class":82},[68,137980,1498],{"class":335},[68,137982,137983],{"class":70,"line":1525},[68,137984,1772],{"class":335},[68,137986,137987,137989,137991],{"class":70,"line":1537},[68,137988,51812],{"class":51501},[68,137990,137783],{"class":74},[68,137992,15777],{"class":335},[68,137994,137995,137997,137999,138001],{"class":70,"line":1819},[68,137996,137756],{"class":82},[68,137998,51638],{"class":335},[68,138000,137794],{"class":78},[68,138002,1498],{"class":335},[68,138004,138005,138007,138009,138011],{"class":70,"line":1824},[68,138006,71106],{"class":82},[68,138008,51638],{"class":335},[68,138010,62271],{"class":82},[68,138012,1498],{"class":335},[68,138014,138015],{"class":70,"line":1830},[68,138016,1772],{"class":335},[19,138018,138019],{},"div {\nmargin: 0 auto;\n}",[58,138021,138024],{"className":138022,"code":138023,"language":5393},[5391],"\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",[65,138025,138023],{"__ignoreMap":63},[19,138027,138028],{},"如果想让多个元素都发生变化",[19,138030,138031],{},"不能如下操作：",[19,138033,138034],{},"transition: width 2s ease 0.5s;",[19,138036,138037],{},"transition: height 2s ease 0.5s;不对！！！",[19,138039,138040],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138042,138043],{},"使用如下：加逗号隔开",[19,138045,138046],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138048,138049],{},"transition all 2s ease;",[301,138051,138053],{"id":138052},"_1426-过渡练习","14.2.6 过渡练习",[23,138055,138056],{},[26,138057,138058],{},"进度条",[48,138060],{"style":50,"src":138061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[58,138063,138065],{"className":126748,"code":138064,"language":126750,"meta":63,"style":63},"div {\n  transition: all 0.3s ease;\n}\n",[65,138066,138067,138073,138091],{"__ignoreMap":63},[68,138068,138069,138071],{"class":70,"line":71},[68,138070,51812],{"class":51501},[68,138072,15777],{"class":335},[68,138074,138075,138078,138080,138082,138085,138087,138089],{"class":70,"line":92},[68,138076,138077],{"class":82},"  transition",[68,138079,51638],{"class":335},[68,138081,28325],{"class":82},[68,138083,138084],{"class":82}," 0.3",[68,138086,1028],{"class":331},[68,138088,78881],{"class":82},[68,138090,1498],{"class":335},[68,138092,138093],{"class":70,"line":1387},[68,138094,1772],{"class":335},[23,138096,138097],{"start":92},[26,138098,138099],{},"小米logo",[19,138101,138102],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[58,138104,138106],{"className":126748,"code":138105,"language":126750,"meta":63,"style":63},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[65,138107,138108,138113,138119,138135,138140],{"__ignoreMap":63},[68,138109,138110],{"class":70,"line":71},[68,138111,138112],{"class":393},"\u002F* CSS3 过渡 *\u002F\n",[68,138114,138115,138117],{"class":70,"line":92},[68,138116,51812],{"class":51501},[68,138118,15777],{"class":335},[68,138120,138121,138123,138125,138127,138129,138131,138133],{"class":70,"line":1387},[68,138122,138077],{"class":82},[68,138124,51638],{"class":335},[68,138126,28325],{"class":82},[68,138128,138084],{"class":82},[68,138130,1028],{"class":331},[68,138132,78881],{"class":82},[68,138134,1498],{"class":335},[68,138136,138137],{"class":70,"line":1402},[68,138138,138139],{"class":393},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[68,138141,138142],{"class":70,"line":1408},[68,138143,1772],{"class":335},[19,138145,138146],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[250,138148,138149],{},"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":63,"searchDepth":92,"depth":92,"links":138151},[138152,138157],{"id":136482,"depth":92,"text":136483,"children":138153},[138154,138155,138156],{"id":136486,"depth":1387,"text":136487},{"id":136563,"depth":1387,"text":136564},{"id":136894,"depth":1387,"text":136895},{"id":137185,"depth":92,"text":137186,"children":138158},[138159,138160],{"id":137189,"depth":1387,"text":137190},{"id":138052,"depth":1387,"text":138053},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136474,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138167,"title":138168,"body":138169,"description":257,"extension":258,"meta":139913,"navigation":260,"path":139914,"seo":139915,"stem":139916,"__hash__":139917},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138170,"toc":139894},[138171,138174,138178,138181,138187,138193,138197,138199,138202,138205,138208,138211,138214,138217,138220,138224,138228,138231,138234,138237,138241,138244,138247,138252,138255,138258,138261,138265,138268,138277,138280,138283,138287,138290,138293,138298,138305,138319,138327,138334,138339,138342,138345,138348,138355,138359,138365,138371,138374,138377,138382,138388,138390,138398,138403,138406,138412,138414,138419,138424,138427,138429,138434,138437,138442,138447,138481,138485,138489,138492,138496,138499,138585,138588,138625,138628,138664,138668,138673,138686,138740,138742,138770,138772,138800,138806,138820,138822,138866,138868,138912,138915,138922,138933,138935,138962,138964,138990,138997,139013,139015,139109,139111,139205,139212,139215,139220,139226,139300,139303,139305,139341,139343,139379,139382,139389,139408,139411,139414,139416,139441,139443,139467,139470,139473,139503,139507,139510,139573,139575,139641,139643,139707,139710,139742,139744,139770,139772,139798,139801,139832,139834,139860,139862,139888,139891],[10,138172,138168],{"id":138173},"_15-品优购项目上篇-搭建与公共模块",[14,138175,138177],{"id":138176},"_151-项目规划","15.1 项目规划",[48,138179],{"style":50,"src":138180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138182,138183,138186],{},[483,138184,138185],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138188,138189,138192],{},[483,138190,138191],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138194,138196],{"id":138195},"_152-项目介绍","15.2 项目介绍",[19,138198,138185],{},[48,138200],{"style":50,"src":138201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138203,138204],{},"主页：",[48,138206],{"style":50,"src":138207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138209,138210],{},"列表页：",[48,138212],{"style":50,"src":138213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138215,138216],{},"注册页：",[48,138218],{"style":50,"src":138219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138221,138223],{"id":138222},"_153-项目搭建工作","15.3 项目搭建工作",[301,138225,138227],{"id":138226},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[48,138229],{"style":50,"src":138230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138232,138233],{},"经常更换的图片要放到upload文件夹中",[19,138235,138236],{},"不经常换的放到images文件夹中",[301,138238,138240],{"id":138239},"_1532-创建文件如下","15.3.2 创建文件如下",[48,138242],{"style":50,"src":138243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[48,138245],{"style":50,"src":138246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138248,138249],{},[483,138250,138251],{},"初始化样式：",[19,138253,138254],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138256,138257],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138259,138260],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[301,138262,138264],{"id":138263},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138266,138267],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138269,138270,138271,138276],{},"这里最典型的应用就是 ",[483,138272,138273],{},[65,138274,138275],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[48,138278],{"style":50,"src":138279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138281,138282],{},"通过link方法来引入",[301,138284,138286],{"id":138285},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[48,138288],{"style":50,"src":138289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138291,138292],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[23,138294,138295],{},[26,138296,138297],{},"制作favicon图标",[19,138299,138300,138301,138304],{},"①把品优购图标切成 ",[65,138302,138303],{},"png"," 图片",[19,138306,138307,138308,138310,138311,138314,138315],{},"②把 ",[65,138309,138303],{}," 图片转换为 ",[65,138312,138313],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[30,138316,138317],{"href":138317,"rel":138318},"http:\u002F\u002Fwww.bitbug.net\u002F",[34],[23,138320,138321,138324],{"start":92},[26,138322,138323],{},"favicon图标放到网站根目录下",[26,138325,138326],{},"HTML页面引入favicon",[19,138328,138329,138330,138333],{},"在html 页面里面的 ",[65,138331,138332],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138335,138336],{},[65,138337,138338],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138340,138341],{},"复制这行代码或者在生成这个的网站进行复制",[48,138343],{"style":50,"src":138344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138346,138347],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138349,138350,138351],{},"例如:",[30,138352,138353],{"href":138353,"rel":138354},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[34],[301,138356,138358],{"id":138357},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138360,138361,138364],{},[483,138362,138363],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138366,138367,138370],{},[483,138368,138369],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138372,138373],{},"页面必须有三个标签用来符合 SEO 优化",[48,138375],{"style":50,"src":138376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[23,138378,138379],{},[26,138380,138381],{},"title网站标题",[19,138383,138384,138387],{},[483,138385,138386],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138389,68991],{},[42,138391,138392,138395],{},[26,138393,138394],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[26,138396,138397],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[23,138399,138400],{"start":92},[26,138401,138402],{},"description网站描述",[19,138404,138405],{},"简要说明我们网站主要是做什么的",[19,138407,138408,138411],{},[483,138409,138410],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138413,68991],{},[19,138415,138416],{},[65,138417,138418],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[23,138420,138421],{"start":1387},[26,138422,138423],{},"keywords关键词",[19,138425,138426],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138428,68991],{},[19,138430,138431],{},[65,138432,138433],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138435,138436],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138438,138439],{},[483,138440,138441],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[23,138443,138444],{"start":1402},[26,138445,138446],{},"代码总结",[58,138448,138449],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,138450,138451,138455,138469,138473],{"__ignoreMap":63},[68,138452,138453],{"class":70,"line":71},[68,138454,130859],{"class":393},[68,138456,138457,138459,138461,138463,138465,138467],{"class":70,"line":92},[68,138458,1243],{"class":335},[68,138460,51812],{"class":51501},[68,138462,53687],{"class":74},[68,138464,381],{"class":335},[68,138466,130872],{"class":78},[68,138468,51508],{"class":335},[68,138470,138471],{"class":70,"line":1387},[68,138472,130879],{"class":335},[68,138474,138475,138477,138479],{"class":70,"line":1402},[68,138476,51986],{"class":335},[68,138478,51812],{"class":51501},[68,138480,51508],{"class":335},[14,138482,138484],{"id":138483},"_154-项目公共部分制作","15.4 项目公共部分制作",[301,138486,138488],{"id":138487},"_1541-常用模块类命名","15.4.1 常用模块类命名",[48,138490],{"style":50,"src":138491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[301,138493,138495],{"id":138494},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138497,138498],{},"布局思路：",[42,138500,138501,138504,138507,138529,138562],{},[26,138502,138503],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[26,138505,138506],{},"里面包含版心的盒子",[26,138508,138509,138510],{},"版心盒子里面包含 1 号左侧盒子左浮动",[42,138511,138512,138520,138526],{},[26,138513,138514,138515,21705,138517,138519],{},"1 号盒子 里面包含一个",[65,138516,42],{},[65,138518,42],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[26,138521,138522,138523,138525],{},"里面的内容是水平排列，所以需要给",[65,138524,26],{},"设置浮动",[26,138527,138528],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[26,138530,138531,138532],{},"版心盒子里面包含 2 号右侧盒子右浮动",[42,138533,138534,138548,138553],{},[26,138535,138536,138537,21705,138539,138541,138542,138544,138545,138547],{},"2 号盒子 里面包含一个",[65,138538,42],{},[65,138540,42],{},"包裹",[65,138543,26],{},"，中间的",[65,138546,1254],{},"可以用样式去设置，也可以用字符 |",[26,138549,138550,138551,138525],{},"里面内容水平排列，给",[65,138552,26],{},[26,138554,138555,138556,138558,138559,138561],{},"找到里面所有偶数的 ",[65,138557,26],{}," 设置样式（偶数的 ",[65,138560,26],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[26,138563,138564,138565],{},"需要用到字体图标",[42,138566,138567,138573,138576,138579,138582],{},[26,138568,138569,138570],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[65,138571,138572],{},"arrow-icon",[26,138574,138575],{},"先要引入字体图片的资源",[26,138577,138578],{},"在样式里面利用 font-face 来进行声明",[26,138580,138581],{},"在伪元素的 content属性设置 图标的编码",[26,138583,138584],{},"给伪元素设置font-family属性",[19,138586,138587],{},"结构实例代码：",[58,138589,138591],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},"div::before {\n  content: \"\";\n  display: block;\n}\n",[65,138592,138593,138601,138611,138621],{"__ignoreMap":63},[68,138594,138595,138597,138599],{"class":70,"line":71},[68,138596,51812],{"class":51501},[68,138598,137749],{"class":74},[68,138600,15777],{"class":335},[68,138602,138603,138605,138607,138609],{"class":70,"line":92},[68,138604,137756],{"class":82},[68,138606,51638],{"class":335},[68,138608,7857],{"class":78},[68,138610,1498],{"class":335},[68,138612,138613,138615,138617,138619],{"class":70,"line":1387},[68,138614,128364],{"class":82},[68,138616,51638],{"class":335},[68,138618,61070],{"class":82},[68,138620,1498],{"class":335},[68,138622,138623],{"class":70,"line":1402},[68,138624,1772],{"class":335},[19,138626,138627],{},"样式实例代码：",[58,138629,138630],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,138631,138632,138640,138650,138660],{"__ignoreMap":63},[68,138633,138634,138636,138638],{"class":70,"line":71},[68,138635,51812],{"class":51501},[68,138637,137749],{"class":74},[68,138639,15777],{"class":335},[68,138641,138642,138644,138646,138648],{"class":70,"line":92},[68,138643,137756],{"class":82},[68,138645,51638],{"class":335},[68,138647,7857],{"class":78},[68,138649,1498],{"class":335},[68,138651,138652,138654,138656,138658],{"class":70,"line":1387},[68,138653,128364],{"class":82},[68,138655,51638],{"class":335},[68,138657,61070],{"class":82},[68,138659,1498],{"class":335},[68,138661,138662],{"class":70,"line":1402},[68,138663,1772],{"class":335},[301,138665,138667],{"id":138666},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[42,138669,138670],{},[26,138671,138672],{},"header 盒子必须要有高度",[19,138674,138675,138676,138678,138679],{},"1 号盒子是 ",[65,138677,131760],{}," 标志定位，在正常开发过程中， ",[483,138680,138681,138682,138685],{},"logo的布局其实是有讲究的，需要进行 ",[65,138683,138684],{},"logoSEO","的优化 （★★★）",[42,138687,138688,138696,138704,138731],{},[26,138689,138690,138692,138693,138695],{},[65,138691,131760],{}," 里面首先放一个 ",[65,138694,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[26,138697,138698,138700,138701,138703],{},[65,138699,10],{}," 里面再放一个链接，可以返回首页的，把 ",[65,138702,131760],{}," 的背景图片给链接即可",[26,138705,138706,138707],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[42,138708,138709,138724],{},[26,138710,138711,138712,138715,138716,138719,138720,138723],{},"方法1：",[65,138713,138714],{},"text-indent"," 移到盒子外面（",[65,138717,138718],{},"text-indent: -9999px",") ，然后 ",[65,138721,138722],{},"overflow:hidden"," ，淘宝的做法",[26,138725,138726,138727,138730],{},"方法2：直接给 ",[65,138728,138729],{},"font-size: 0;"," 就看不到文字了，京东的做法",[26,138732,138733,138734,138736,138737,138739],{},"最后给链接一个 ",[65,138735,51608],{}," 属性，这样鼠标放到 ",[65,138738,131760],{}," 上就可以看到提示文字了",[19,138741,138587],{},[58,138743,138744],{"className":127495,"code":131981,"language":127497,"meta":63,"style":63},[65,138745,138746],{"__ignoreMap":63},[68,138747,138748,138750,138752,138754,138756,138758,138760,138762,138764,138766,138768],{"class":70,"line":71},[68,138749,1243],{"class":335},[68,138751,30],{"class":51501},[68,138753,61258],{"class":74},[68,138755,381],{"class":335},[68,138757,131996],{"class":78},[68,138759,131999],{"class":74},[68,138761,381],{"class":335},[68,138763,132004],{"class":78},[68,138765,132007],{"class":335},[68,138767,30],{"class":51501},[68,138769,51508],{"class":335},[19,138771,138627],{},[58,138773,138774],{"className":127495,"code":131981,"language":127497,"meta":63,"style":63},[65,138775,138776],{"__ignoreMap":63},[68,138777,138778,138780,138782,138784,138786,138788,138790,138792,138794,138796,138798],{"class":70,"line":71},[68,138779,1243],{"class":335},[68,138781,30],{"class":51501},[68,138783,61258],{"class":74},[68,138785,381],{"class":335},[68,138787,131996],{"class":78},[68,138789,131999],{"class":74},[68,138791,381],{"class":335},[68,138793,132004],{"class":78},[68,138795,132007],{"class":335},[68,138797,30],{"class":51501},[68,138799,51508],{"class":335},[19,138801,138802,138803,138805],{},"2 号盒子是 ",[65,138804,131773],{}," 搜索模块定位",[42,138807,138808,138811,138814,138817],{},[26,138809,138810],{},"search盒子利用定位的方式放在对应的位置",[26,138812,138813],{},"search盒子设置绝对定位，header盒子设置相对定位",[26,138815,138816],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[26,138818,138819],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138821,138587],{},[58,138823,138824],{"className":126748,"code":132068,"language":126750,"meta":63,"style":63},[65,138825,138826,138848,138852,138862],{"__ignoreMap":63},[68,138827,138828,138830,138832,138834,138836,138838,138840,138842,138844,138846],{"class":70,"line":71},[68,138829,51812],{"class":51501},[68,138831,12640],{"class":335},[68,138833,19],{"class":51501},[68,138835,12640],{"class":335},[68,138837,10],{"class":51501},[68,138839,12640],{"class":335},[68,138841,42],{"class":51501},[68,138843,12640],{"class":335},[68,138845,26],{"class":51501},[68,138847,15777],{"class":335},[68,138849,138850],{"class":70,"line":92},[68,138851,132097],{"class":393},[68,138853,138854,138856,138858,138860],{"class":70,"line":1387},[68,138855,128364],{"class":82},[68,138857,51638],{"class":335},[68,138859,61070],{"class":82},[68,138861,1498],{"class":335},[68,138863,138864],{"class":70,"line":1402},[68,138865,1772],{"class":335},[19,138867,138627],{},[58,138869,138870],{"className":126748,"code":132068,"language":126750,"meta":63,"style":63},[65,138871,138872,138894,138898,138908],{"__ignoreMap":63},[68,138873,138874,138876,138878,138880,138882,138884,138886,138888,138890,138892],{"class":70,"line":71},[68,138875,51812],{"class":51501},[68,138877,12640],{"class":335},[68,138879,19],{"class":51501},[68,138881,12640],{"class":335},[68,138883,10],{"class":51501},[68,138885,12640],{"class":335},[68,138887,42],{"class":51501},[68,138889,12640],{"class":335},[68,138891,26],{"class":51501},[68,138893,15777],{"class":335},[68,138895,138896],{"class":70,"line":92},[68,138897,132097],{"class":393},[68,138899,138900,138902,138904,138906],{"class":70,"line":1387},[68,138901,128364],{"class":82},[68,138903,51638],{"class":335},[68,138905,61070],{"class":82},[68,138907,1498],{"class":335},[68,138909,138910],{"class":70,"line":1402},[68,138911,1772],{"class":335},[19,138913,138914],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138916,138917,138918,138921],{},"3 号盒子是 ",[65,138919,138920],{},"hotwords"," 热词模块定位",[42,138923,138924,138927,138930],{},[26,138925,138926],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[26,138928,138929],{},"给里面所有的a标签设置 左右10px的外边距",[26,138931,138932],{},"给第一个a标签设置文字变红色（#c81623）",[19,138934,138587],{},[58,138936,138938],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},"div {\n  margin: 0 auto;\n}\n",[65,138939,138940,138946,138958],{"__ignoreMap":63},[68,138941,138942,138944],{"class":70,"line":71},[68,138943,51812],{"class":51501},[68,138945,15777],{"class":335},[68,138947,138948,138950,138952,138954,138956],{"class":70,"line":92},[68,138949,70671],{"class":82},[68,138951,51638],{"class":335},[68,138953,525],{"class":82},[68,138955,51757],{"class":82},[68,138957,1498],{"class":335},[68,138959,138960],{"class":70,"line":1387},[68,138961,1772],{"class":335},[19,138963,138627],{},[58,138965,138966],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,138967,138968,138974,138986],{"__ignoreMap":63},[68,138969,138970,138972],{"class":70,"line":71},[68,138971,51812],{"class":51501},[68,138973,15777],{"class":335},[68,138975,138976,138978,138980,138982,138984],{"class":70,"line":92},[68,138977,70671],{"class":82},[68,138979,51638],{"class":335},[68,138981,525],{"class":82},[68,138983,51757],{"class":82},[68,138985,1498],{"class":335},[68,138987,138988],{"class":70,"line":1387},[68,138989,1772],{"class":335},[19,138991,138992,138993,138996],{},"4 号盒子是 ",[65,138994,138995],{},"shopcar"," 购物车模块",[42,138998,138999,139004,139007,139010],{},[26,139000,123532,139001,139003],{},[65,139002,138995],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[26,139005,139006],{},"count 统计部分用绝对定位做",[26,139008,139009],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[26,139011,139012],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139014,138587],{},[58,139016,139017],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,139018,139019,139023,139037,139041,139055,139059,139073,139077,139091,139095],{"__ignoreMap":63},[68,139020,139021],{"class":70,"line":71},[68,139022,132187],{"class":393},[68,139024,139025,139027,139029,139031,139033,139035],{"class":70,"line":92},[68,139026,132192],{"class":74},[68,139028,80008],{"class":335},[68,139030,129108],{"class":82},[68,139032,51638],{"class":335},[68,139034,132201],{"class":82},[68,139036,129678],{"class":335},[68,139038,139039],{"class":70,"line":1387},[68,139040,132208],{"class":393},[68,139042,139043,139045,139047,139049,139051,139053],{"class":70,"line":1402},[68,139044,132213],{"class":74},[68,139046,80008],{"class":335},[68,139048,129108],{"class":82},[68,139050,51638],{"class":335},[68,139052,54965],{"class":82},[68,139054,129678],{"class":335},[68,139056,139057],{"class":70,"line":1408},[68,139058,132228],{"class":393},[68,139060,139061,139063,139065,139067,139069,139071],{"class":70,"line":1422},[68,139062,132233],{"class":74},[68,139064,80008],{"class":335},[68,139066,129108],{"class":82},[68,139068,51638],{"class":335},[68,139070,55032],{"class":82},[68,139072,129678],{"class":335},[68,139074,139075],{"class":70,"line":1428},[68,139076,132248],{"class":393},[68,139078,139079,139081,139083,139085,139087,139089],{"class":70,"line":1519},[68,139080,132253],{"class":74},[68,139082,80008],{"class":335},[68,139084,129108],{"class":82},[68,139086,51638],{"class":335},[68,139088,86434],{"class":82},[68,139090,129678],{"class":335},[68,139092,139093],{"class":70,"line":1525},[68,139094,132268],{"class":393},[68,139096,139097,139099,139101,139103,139105,139107],{"class":70,"line":1537},[68,139098,132273],{"class":74},[68,139100,80008],{"class":335},[68,139102,129108],{"class":82},[68,139104,51638],{"class":335},[68,139106,132282],{"class":82},[68,139108,129678],{"class":335},[19,139110,138627],{},[58,139112,139113],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,139114,139115,139119,139133,139137,139151,139155,139169,139173,139187,139191],{"__ignoreMap":63},[68,139116,139117],{"class":70,"line":71},[68,139118,132187],{"class":393},[68,139120,139121,139123,139125,139127,139129,139131],{"class":70,"line":92},[68,139122,132192],{"class":74},[68,139124,80008],{"class":335},[68,139126,129108],{"class":82},[68,139128,51638],{"class":335},[68,139130,132201],{"class":82},[68,139132,129678],{"class":335},[68,139134,139135],{"class":70,"line":1387},[68,139136,132208],{"class":393},[68,139138,139139,139141,139143,139145,139147,139149],{"class":70,"line":1402},[68,139140,132213],{"class":74},[68,139142,80008],{"class":335},[68,139144,129108],{"class":82},[68,139146,51638],{"class":335},[68,139148,54965],{"class":82},[68,139150,129678],{"class":335},[68,139152,139153],{"class":70,"line":1408},[68,139154,132228],{"class":393},[68,139156,139157,139159,139161,139163,139165,139167],{"class":70,"line":1422},[68,139158,132233],{"class":74},[68,139160,80008],{"class":335},[68,139162,129108],{"class":82},[68,139164,51638],{"class":335},[68,139166,55032],{"class":82},[68,139168,129678],{"class":335},[68,139170,139171],{"class":70,"line":1428},[68,139172,132248],{"class":393},[68,139174,139175,139177,139179,139181,139183,139185],{"class":70,"line":1519},[68,139176,132253],{"class":74},[68,139178,80008],{"class":335},[68,139180,129108],{"class":82},[68,139182,51638],{"class":335},[68,139184,86434],{"class":82},[68,139186,129678],{"class":335},[68,139188,139189],{"class":70,"line":1525},[68,139190,132268],{"class":393},[68,139192,139193,139195,139197,139199,139201,139203],{"class":70,"line":1537},[68,139194,132273],{"class":74},[68,139196,80008],{"class":335},[68,139198,129108],{"class":82},[68,139200,51638],{"class":335},[68,139202,132282],{"class":82},[68,139204,129678],{"class":335},[301,139206,139208,139209,139211],{"id":139207},"_1544-nav导航模块制作","15.4.4 ",[65,139210,53914],{},"导航模块制作",[48,139213],{"style":50,"src":139214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139216,139217,139219],{},[65,139218,53914],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139221,139222,139223],{},"1 号盒子左侧浮动，",[65,139224,139225],{},"dropdown",[42,139227,139228,139238,139246,139252,139260,139270,139278,139289],{},[26,139229,139230,139231,101218,139234,139237],{},"1号盒子有讲究，根据相关性 里面包含 ",[65,139232,139233],{},".dt",[65,139235,139236],{},".dd"," 两个盒子",[26,139239,139240,139242,139243,139245],{},[65,139241,139233],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[65,139244,139236],{}," 挤到下面去了",[26,139247,139248,139249,139251],{},"给 ",[65,139250,139236],{}," 盒子设置宽度 和 高度，以及背景颜色",[26,139253,139248,139254,139256,139257,120434],{},[65,139255,139236],{}," 盒子里面定义 无序列表 （",[65,139258,139259],{},"ul > li > a",[26,139261,139262,139263,139265,139266,139269],{},"每个 ",[65,139264,26],{}," 都有一个高度（",[65,139267,139268],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[26,139271,139248,139272,139274,139275,120434],{},[65,139273,26],{}," 里面的a设置文字大小（",[65,139276,139277],{},"14px",[26,139279,139248,139280,139282,139283,139285,139286,139288],{},[65,139281,26],{}," 设置 ",[65,139284,127909],{},"，当鼠标移入的时候，让",[65,139287,26],{},"的背景变成白色，让里面的文字变成红色",[26,139290,139291,139293,139294,139296,139297,139299],{},[65,139292,26],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[65,139295,26],{},"的右侧，那么给",[65,139298,26],{},"设置相对定位",[19,139301,139302],{},"一定要注意相关性",[19,139304,138587],{},[58,139306,139307],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,139308,139309,139317,139327,139337],{"__ignoreMap":63},[68,139310,139311,139313,139315],{"class":70,"line":71},[68,139312,51812],{"class":51501},[68,139314,137749],{"class":74},[68,139316,15777],{"class":335},[68,139318,139319,139321,139323,139325],{"class":70,"line":92},[68,139320,137756],{"class":82},[68,139322,51638],{"class":335},[68,139324,7857],{"class":78},[68,139326,1498],{"class":335},[68,139328,139329,139331,139333,139335],{"class":70,"line":1387},[68,139330,128364],{"class":82},[68,139332,51638],{"class":335},[68,139334,61070],{"class":82},[68,139336,1498],{"class":335},[68,139338,139339],{"class":70,"line":1402},[68,139340,1772],{"class":335},[19,139342,138627],{},[58,139344,139345],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,139346,139347,139355,139365,139375],{"__ignoreMap":63},[68,139348,139349,139351,139353],{"class":70,"line":71},[68,139350,51812],{"class":51501},[68,139352,137749],{"class":74},[68,139354,15777],{"class":335},[68,139356,139357,139359,139361,139363],{"class":70,"line":92},[68,139358,137756],{"class":82},[68,139360,51638],{"class":335},[68,139362,7857],{"class":78},[68,139364,1498],{"class":335},[68,139366,139367,139369,139371,139373],{"class":70,"line":1387},[68,139368,128364],{"class":82},[68,139370,51638],{"class":335},[68,139372,61070],{"class":82},[68,139374,1498],{"class":335},[68,139376,139377],{"class":70,"line":1402},[68,139378,1772],{"class":335},[19,139380,139381],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139383,139384,139385,139388],{},"2 号盒子左侧浮动，",[65,139386,139387],{},"navitems"," 导航栏组",[42,139390,139391,139396,139405],{},[26,139392,139393,139394],{},"里面结构是 ",[65,139395,139259],{},[26,139397,139398,139399,139401,139402,139404],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[65,139400,30],{},"左右的",[65,139403,31084],{},"把两侧撑开",[26,139406,139407],{},"让文字垂直居中（行高等于高度）",[48,139409],{"style":50,"src":139410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139412,139413],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139415,138587],{},[58,139417,139419],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},".box {\n  float: left;\n}\n",[65,139420,139421,139427,139437],{"__ignoreMap":63},[68,139422,139423,139425],{"class":70,"line":71},[68,139424,130596],{"class":74},[68,139426,15777],{"class":335},[68,139428,139429,139431,139433,139435],{"class":70,"line":92},[68,139430,131228],{"class":82},[68,139432,51638],{"class":335},[68,139434,23941],{"class":82},[68,139436,1498],{"class":335},[68,139438,139439],{"class":70,"line":1387},[68,139440,1772],{"class":335},[19,139442,138627],{},[58,139444,139445],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,139446,139447,139453,139463],{"__ignoreMap":63},[68,139448,139449,139451],{"class":70,"line":71},[68,139450,130596],{"class":74},[68,139452,15777],{"class":335},[68,139454,139455,139457,139459,139461],{"class":70,"line":92},[68,139456,131228],{"class":82},[68,139458,51638],{"class":335},[68,139460,23941],{"class":82},[68,139462,1498],{"class":335},[68,139464,139465],{"class":70,"line":1387},[68,139466,1772],{"class":335},[19,139468,139469],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[48,139471],{"style":50,"src":139472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[58,139474,139475],{"className":126748,"code":130905,"language":126750,"meta":63,"style":63},[65,139476,139477,139483,139499],{"__ignoreMap":63},[68,139478,139479,139481],{"class":70,"line":71},[68,139480,51812],{"class":51501},[68,139482,15777],{"class":335},[68,139484,139485,139487,139489,139491,139493,139495,139497],{"class":70,"line":92},[68,139486,71097],{"class":82},[68,139488,51638],{"class":335},[68,139490,551],{"class":82},[68,139492,51693],{"class":331},[68,139494,51722],{"class":82},[68,139496,130140],{"class":82},[68,139498,1498],{"class":335},[68,139500,139501],{"class":70,"line":1387},[68,139502,1772],{"class":335},[301,139504,139506],{"id":139505},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[48,139508],{"style":50,"src":139509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[42,139511,139512,139517,139522],{},[26,139513,139514,139516],{},[65,139515,131951],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[26,139518,139519,139521],{},[65,139520,131951],{}," 里面有一个大的版心",[26,139523,139524,139525,139528,139529],{},"版心里面包含 1 号盒子，",[65,139526,139527],{},"mod_service"," 是服务模块，mod 是模块的意思",[42,139530,139531,139536,139549,139565,139570],{},[26,139532,139248,139533,139535],{},[65,139534,139527],{}," 设置高度（80px）和下边框",[26,139537,139538,139539,139542,139543,139545,139546,139548],{},"在里面定义 ",[65,139540,139541],{},"ul > li"," ,每个",[65,139544,26],{}," 宽度是300px 高度是 50px，给每个",[65,139547,26],{},"设置35px的左内边距",[26,139550,139551,139552,139554,139555,139557,139558,139560,139561,18615,139563,120434],{},"在每个",[65,139553,26],{},"里面，放一个 ",[65,139556,23115],{},"（里面放图标），一个",[65,139559,51812],{},"（里面放",[65,139562,51812],{},[65,139564,19],{},[26,139566,139248,139567,139569],{},[65,139568,23115],{},"设置浮动，让h5与这个div左右排列",[26,139571,139572],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139574,138587],{},[58,139576,139578],{"className":126748,"code":139577,"language":126750,"meta":63,"style":63},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[65,139579,139580,139586,139598,139610,139637],{"__ignoreMap":63},[68,139581,139582,139584],{"class":70,"line":71},[68,139583,134505],{"class":74},[68,139585,15777],{"class":335},[68,139587,139588,139590,139592,139594,139596],{"class":70,"line":92},[68,139589,70769],{"class":82},[68,139591,51638],{"class":335},[68,139593,1033],{"class":82},[68,139595,51693],{"class":331},[68,139597,1498],{"class":335},[68,139599,139600,139602,139604,139606,139608],{"class":70,"line":1387},[68,139601,70989],{"class":82},[68,139603,51638],{"class":335},[68,139605,1033],{"class":82},[68,139607,51693],{"class":331},[68,139609,1498],{"class":335},[68,139611,139612,139614,139616,139618,139620,139622,139624,139626,139629,139631,139633,139635],{"class":70,"line":1402},[68,139613,70812],{"class":82},[68,139615,51638],{"class":335},[68,139617,61927],{"class":82},[68,139619,336],{"class":335},[68,139621,134544],{"class":5421},[68,139623,13919],{"class":335},[68,139625,61937],{"class":82},[68,139627,139628],{"class":82}," -10",[68,139630,51693],{"class":331},[68,139632,134563],{"class":82},[68,139634,51693],{"class":331},[68,139636,1498],{"class":335},[68,139638,139639],{"class":70,"line":1408},[68,139640,1772],{"class":335},[19,139642,138627],{},[58,139644,139645],{"className":126748,"code":139577,"language":126750,"meta":63,"style":63},[65,139646,139647,139653,139665,139677,139703],{"__ignoreMap":63},[68,139648,139649,139651],{"class":70,"line":71},[68,139650,134505],{"class":74},[68,139652,15777],{"class":335},[68,139654,139655,139657,139659,139661,139663],{"class":70,"line":92},[68,139656,70769],{"class":82},[68,139658,51638],{"class":335},[68,139660,1033],{"class":82},[68,139662,51693],{"class":331},[68,139664,1498],{"class":335},[68,139666,139667,139669,139671,139673,139675],{"class":70,"line":1387},[68,139668,70989],{"class":82},[68,139670,51638],{"class":335},[68,139672,1033],{"class":82},[68,139674,51693],{"class":331},[68,139676,1498],{"class":335},[68,139678,139679,139681,139683,139685,139687,139689,139691,139693,139695,139697,139699,139701],{"class":70,"line":1402},[68,139680,70812],{"class":82},[68,139682,51638],{"class":335},[68,139684,61927],{"class":82},[68,139686,336],{"class":335},[68,139688,134544],{"class":5421},[68,139690,13919],{"class":335},[68,139692,61937],{"class":82},[68,139694,139628],{"class":82},[68,139696,51693],{"class":331},[68,139698,134563],{"class":82},[68,139700,51693],{"class":331},[68,139702,1498],{"class":335},[68,139704,139705],{"class":70,"line":1408},[68,139706,1772],{"class":335},[19,139708,139709],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[42,139711,139712,139715,139721,139727,139739],{},[26,139713,139714],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[26,139716,139717,139718,120434],{},"里面的布局利用 自定义列表来实现（",[65,139719,139720],{},"dl > dt + dd",[26,139722,139248,139723,139726],{},[65,139724,139725],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[26,139728,139248,139729,139732,139733,18615,139735,139738],{},[65,139730,139731],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[65,139734,139731],{},[65,139736,139737],{},"dd","之间有些距离",[26,139740,139741],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139743,138587],{},[58,139745,139746],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,139747,139748,139754,139766],{"__ignoreMap":63},[68,139749,139750,139752],{"class":70,"line":71},[68,139751,51812],{"class":51501},[68,139753,15777],{"class":335},[68,139755,139756,139758,139760,139762,139764],{"class":70,"line":92},[68,139757,70671],{"class":82},[68,139759,51638],{"class":335},[68,139761,525],{"class":82},[68,139763,51757],{"class":82},[68,139765,1498],{"class":335},[68,139767,139768],{"class":70,"line":1387},[68,139769,1772],{"class":335},[19,139771,138627],{},[58,139773,139774],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,139775,139776,139782,139794],{"__ignoreMap":63},[68,139777,139778,139780],{"class":70,"line":71},[68,139779,51812],{"class":51501},[68,139781,15777],{"class":335},[68,139783,139784,139786,139788,139790,139792],{"class":70,"line":92},[68,139785,70671],{"class":82},[68,139787,51638],{"class":335},[68,139789,525],{"class":82},[68,139791,51757],{"class":82},[68,139793,1498],{"class":335},[68,139795,139796],{"class":70,"line":1387},[68,139797,1772],{"class":335},[19,139799,139800],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[42,139802,139803,139812,139815,139826],{},[26,139804,139805,139806,139808,139809,139811],{},"分为上下两块，上面是 ",[65,139807,131968],{}," 友情链接，下面是 ",[65,139810,131961],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[26,139813,139814],{},"把内容分别复制到相应模块中",[26,139816,139248,139817,139819,139820,139822,139823,139825],{},[65,139818,131968],{}," 设置 15px 的下外边距，给",[65,139821,131968],{}," 里面 的 ",[65,139824,30],{}," 标签设置 左右 3px 的外边距",[26,139827,139828,139829,139831],{},"给",[65,139830,131961],{}," 设置 20px 的行高",[19,139833,138587],{},[58,139835,139836],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,139837,139838,139844,139856],{"__ignoreMap":63},[68,139839,139840,139842],{"class":70,"line":71},[68,139841,51812],{"class":51501},[68,139843,15777],{"class":335},[68,139845,139846,139848,139850,139852,139854],{"class":70,"line":92},[68,139847,70671],{"class":82},[68,139849,51638],{"class":335},[68,139851,525],{"class":82},[68,139853,51757],{"class":82},[68,139855,1498],{"class":335},[68,139857,139858],{"class":70,"line":1387},[68,139859,1772],{"class":335},[19,139861,138627],{},[58,139863,139864],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,139865,139866,139872,139884],{"__ignoreMap":63},[68,139867,139868,139870],{"class":70,"line":71},[68,139869,51812],{"class":51501},[68,139871,15777],{"class":335},[68,139873,139874,139876,139878,139880,139882],{"class":70,"line":92},[68,139875,70671],{"class":82},[68,139877,51638],{"class":335},[68,139879,525],{"class":82},[68,139881,51757],{"class":82},[68,139883,1498],{"class":335},[68,139885,139886],{"class":70,"line":1387},[68,139887,1772],{"class":335},[19,139889,139890],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[250,139892,139893],{},"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":63,"searchDepth":92,"depth":92,"links":139895},[139896,139897,139898,139905],{"id":138176,"depth":92,"text":138177},{"id":138195,"depth":92,"text":138196},{"id":138222,"depth":92,"text":138223,"children":139899},[139900,139901,139902,139903,139904],{"id":138226,"depth":1387,"text":138227},{"id":138239,"depth":1387,"text":138240},{"id":138263,"depth":1387,"text":138264},{"id":138285,"depth":1387,"text":138286},{"id":138357,"depth":1387,"text":138358},{"id":138483,"depth":92,"text":138484,"children":139906},[139907,139908,139909,139910,139912],{"id":138487,"depth":1387,"text":138488},{"id":138494,"depth":1387,"text":138495},{"id":138666,"depth":1387,"text":138667},{"id":139207,"depth":1387,"text":139911},"15.4.4 nav导航模块制作",{"id":139505,"depth":1387,"text":139506},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138168,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139919,"title":139920,"body":139921,"description":257,"extension":258,"meta":142323,"navigation":260,"path":142324,"seo":142325,"stem":142326,"__hash__":142327},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139922,"toc":142300},[139923,139926,139930,139934,139946,139949,139952,139955,139966,139968,139992,139994,140018,140023,140026,140028,140064,140066,140102,140105,140110,140113,140116,140119,140149,140156,140159,140169,140171,140205,140208,140242,140248,140265,140267,140303,140305,140341,140346,140371,140373,140399,140401,140425,140432,140435,140499,140501,140543,140545,140585,140592,140597,140599,140629,140631,140661,140665,140668,140675,140687,140689,140715,140717,140741,140744,140746,140770,140776,140786,140788,140818,140820,140850,140857,140898,140900,140936,140938,140974,140978,140981,140984,140987,140993,140998,141001,141024,141027,141051,141054,141078,141083,141086,141089,141092,141095,141098,141172,141174,141204,141206,141236,141239,141242,141274,141278,141282,141296,141305,141308,141313,141315,141409,141411,141505,141528,141530,141554,141556,141580,141587,141590,141600,141602,141626,141631,141639,141641,141671,141676,141716,141718,141744,141746,141772,141776,141779,141784,141787,141791,141799,141806,141814,141816,141846,141848,141878,141886,141889,141892,141894,141924,141926,141956,141959,141964,141966,141990,141992,142016,142019,142104,142106,142130,142132,142156,142160,142162,142186,142188,142222,142226,142240,142243,142248,142251,142256,142259,142289,142297],[10,139924,139920],{"id":139925},"_16-品优购项目下篇-主体与页面开发",[14,139927,139929],{"id":139928},"_161-项目主体模块制作","16.1 项目主体模块制作",[301,139931,139933],{"id":139932},"_1611-首页制作","16.1.1 首页制作",[19,139935,139936,139938,139939,139941,139942,139945],{},[483,139937,102258],{}," 主体模块是 ",[483,139940,74259],{}," 里面专有的，注意需要新的样式文件 ",[483,139943,139944],{},"index.css，"," 就不要写在common.css中了",[48,139947],{"style":50,"src":139948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[48,139950],{"style":50,"src":139951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139953,139954],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[42,139956,139957,139960,139963],{},[26,139958,139959],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[26,139961,139962],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[26,139964,139965],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139967,138587],{},[58,139969,139970],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,139971,139972,139978,139988],{"__ignoreMap":63},[68,139973,139974,139976],{"class":70,"line":71},[68,139975,130596],{"class":74},[68,139977,15777],{"class":335},[68,139979,139980,139982,139984,139986],{"class":70,"line":92},[68,139981,131228],{"class":82},[68,139983,51638],{"class":335},[68,139985,23941],{"class":82},[68,139987,1498],{"class":335},[68,139989,139990],{"class":70,"line":1387},[68,139991,1772],{"class":335},[19,139993,138627],{},[58,139995,139996],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,139997,139998,140004,140014],{"__ignoreMap":63},[68,139999,140000,140002],{"class":70,"line":71},[68,140001,130596],{"class":74},[68,140003,15777],{"class":335},[68,140005,140006,140008,140010,140012],{"class":70,"line":92},[68,140007,131228],{"class":82},[68,140009,51638],{"class":335},[68,140011,23941],{"class":82},[68,140013,1498],{"class":335},[68,140015,140016],{"class":70,"line":1387},[68,140017,1772],{"class":335},[23,140019,140020],{},[26,140021,140022],{},"左侧focus模块制作",[48,140024],{"style":50,"src":140025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140027,138587],{},[58,140029,140030],{"className":126748,"code":128071,"language":126750,"meta":63,"style":63},[65,140031,140032,140040,140050,140060],{"__ignoreMap":63},[68,140033,140034,140036,140038],{"class":70,"line":71},[68,140035,54022],{"class":51501},[68,140037,62101],{"class":74},[68,140039,15777],{"class":335},[68,140041,140042,140044,140046,140048],{"class":70,"line":92},[68,140043,128086],{"class":82},[68,140045,51638],{"class":335},[68,140047,55090],{"class":82},[68,140049,1498],{"class":335},[68,140051,140052,140054,140056,140058],{"class":70,"line":1387},[68,140053,70999],{"class":82},[68,140055,51638],{"class":335},[68,140057,54938],{"class":82},[68,140059,1498],{"class":335},[68,140061,140062],{"class":70,"line":1402},[68,140063,1772],{"class":335},[19,140065,138627],{},[58,140067,140068],{"className":126748,"code":128071,"language":126750,"meta":63,"style":63},[65,140069,140070,140078,140088,140098],{"__ignoreMap":63},[68,140071,140072,140074,140076],{"class":70,"line":71},[68,140073,54022],{"class":51501},[68,140075,62101],{"class":74},[68,140077,15777],{"class":335},[68,140079,140080,140082,140084,140086],{"class":70,"line":92},[68,140081,128086],{"class":82},[68,140083,51638],{"class":335},[68,140085,55090],{"class":82},[68,140087,1498],{"class":335},[68,140089,140090,140092,140094,140096],{"class":70,"line":1387},[68,140091,70999],{"class":82},[68,140093,51638],{"class":335},[68,140095,54938],{"class":82},[68,140097,1498],{"class":335},[68,140099,140100],{"class":70,"line":1402},[68,140101,1772],{"class":335},[19,140103,140104],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[23,140106,140107],{"start":92},[26,140108,140109],{},"右侧newsflash模块制作",[48,140111],{"style":50,"src":140112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140114,140115],{},"右侧的模块 分为上中下三个盒子",[19,140117,140118],{},"结构代码：",[58,140120,140121],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,140122,140123],{"__ignoreMap":63},[68,140124,140125,140127,140129,140131,140133,140135,140137,140139,140141,140143,140145,140147],{"class":70,"line":71},[68,140126,1243],{"class":335},[68,140128,48],{"class":51501},[68,140130,55440],{"class":74},[68,140132,381],{"class":335},[68,140134,134265],{"class":78},[68,140136,55448],{"class":74},[68,140138,381],{"class":335},[68,140140,134272],{"class":78},[68,140142,134275],{"class":74},[68,140144,381],{"class":335},[68,140146,134280],{"class":78},[68,140148,51508],{"class":335},[19,140150,140151,140152,140155],{},"1 号盒子为 ",[65,140153,140154],{},"news"," 新闻模块 高度为 165px",[48,140157],{"style":50,"src":140158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140160,140161,140162,140165,140166],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[65,140163,140164],{},"news-hd","，下面是 ",[65,140167,140168],{},"news-bd",[19,140170,140118],{},[58,140172,140173],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,140174,140175,140179,140193,140197],{"__ignoreMap":63},[68,140176,140177],{"class":70,"line":71},[68,140178,130859],{"class":393},[68,140180,140181,140183,140185,140187,140189,140191],{"class":70,"line":92},[68,140182,1243],{"class":335},[68,140184,51812],{"class":51501},[68,140186,53687],{"class":74},[68,140188,381],{"class":335},[68,140190,130872],{"class":78},[68,140192,51508],{"class":335},[68,140194,140195],{"class":70,"line":1387},[68,140196,130879],{"class":335},[68,140198,140199,140201,140203],{"class":70,"line":1402},[68,140200,51986],{"class":335},[68,140202,51812],{"class":51501},[68,140204,51508],{"class":335},[19,140206,140207],{},"样式代码：",[58,140209,140210],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,140211,140212,140216,140230,140234],{"__ignoreMap":63},[68,140213,140214],{"class":70,"line":71},[68,140215,130859],{"class":393},[68,140217,140218,140220,140222,140224,140226,140228],{"class":70,"line":92},[68,140219,1243],{"class":335},[68,140221,51812],{"class":51501},[68,140223,53687],{"class":74},[68,140225,381],{"class":335},[68,140227,130872],{"class":78},[68,140229,51508],{"class":335},[68,140231,140232],{"class":70,"line":1387},[68,140233,130879],{"class":335},[68,140235,140236,140238,140240],{"class":70,"line":1402},[68,140237,51986],{"class":335},[68,140239,51812],{"class":51501},[68,140241,51508],{"class":335},[19,140243,140244,140245,140247],{},"上面是",[65,140246,140164],{},"，设置高度是 33px，设置下边框",[42,140249,140250,140256],{},[26,140251,140252,140253,140255],{},"里面放一个",[65,140254,23115],{}," 标题",[26,140257,140258,140259,140261,140262,140264],{},"放一个a",[65,140260,102893],{},"，内容是 更多，然后让 ",[65,140263,30],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140266,140118],{},[58,140268,140269],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,140270,140271,140279,140289,140299],{"__ignoreMap":63},[68,140272,140273,140275,140277],{"class":70,"line":71},[68,140274,51812],{"class":51501},[68,140276,137749],{"class":74},[68,140278,15777],{"class":335},[68,140280,140281,140283,140285,140287],{"class":70,"line":92},[68,140282,137756],{"class":82},[68,140284,51638],{"class":335},[68,140286,7857],{"class":78},[68,140288,1498],{"class":335},[68,140290,140291,140293,140295,140297],{"class":70,"line":1387},[68,140292,128364],{"class":82},[68,140294,51638],{"class":335},[68,140296,61070],{"class":82},[68,140298,1498],{"class":335},[68,140300,140301],{"class":70,"line":1402},[68,140302,1772],{"class":335},[19,140304,140207],{},[58,140306,140307],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,140308,140309,140317,140327,140337],{"__ignoreMap":63},[68,140310,140311,140313,140315],{"class":70,"line":71},[68,140312,51812],{"class":51501},[68,140314,137749],{"class":74},[68,140316,15777],{"class":335},[68,140318,140319,140321,140323,140325],{"class":70,"line":92},[68,140320,137756],{"class":82},[68,140322,51638],{"class":335},[68,140324,7857],{"class":78},[68,140326,1498],{"class":335},[68,140328,140329,140331,140333,140335],{"class":70,"line":1387},[68,140330,128364],{"class":82},[68,140332,51638],{"class":335},[68,140334,61070],{"class":82},[68,140336,1498],{"class":335},[68,140338,140339],{"class":70,"line":1402},[68,140340,1772],{"class":335},[19,140342,140343,140344],{},"下面是",[65,140345,140168],{},[42,140347,140348,140356],{},[26,140349,140350,140351,101218,140353,140355],{},"里面包含 ",[65,140352,42],{},[65,140354,26],{}," 还有链接",[26,140357,139828,140358,140360,140361,140363,140364,140367,140368],{},[65,140359,26],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[65,140362,131414],{}," 2.设置 ",[65,140365,140366],{},"white-space: nowrap;"," 3. 设置 ",[65,140369,140370],{},"text-overflow: ellipsis;",[19,140372,140118],{},[58,140374,140376],{"className":126748,"code":140375,"language":126750,"meta":63,"style":63},"div {\n  overflow: hidden;\n}\n",[65,140377,140378,140384,140395],{"__ignoreMap":63},[68,140379,140380,140382],{"class":70,"line":71},[68,140381,51812],{"class":51501},[68,140383,15777],{"class":335},[68,140385,140386,140389,140391,140393],{"class":70,"line":92},[68,140387,140388],{"class":82},"  overflow",[68,140390,51638],{"class":335},[68,140392,61915],{"class":82},[68,140394,1498],{"class":335},[68,140396,140397],{"class":70,"line":1387},[68,140398,1772],{"class":335},[19,140400,140207],{},[58,140402,140403],{"className":126748,"code":140375,"language":126750,"meta":63,"style":63},[65,140404,140405,140411,140421],{"__ignoreMap":63},[68,140406,140407,140409],{"class":70,"line":71},[68,140408,51812],{"class":51501},[68,140410,15777],{"class":335},[68,140412,140413,140415,140417,140419],{"class":70,"line":92},[68,140414,140388],{"class":82},[68,140416,51638],{"class":335},[68,140418,61915],{"class":82},[68,140420,1498],{"class":335},[68,140422,140423],{"class":70,"line":1387},[68,140424,1772],{"class":335},[19,140426,140427,140428,140431],{},"2 号盒子为 ",[65,140429,140430],{},"lifeservice"," 生活服务模块 高度为 209px",[48,140433],{"style":50,"src":140434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[42,140436,140437,140440,140450,140474,140485],{},[26,140438,140439],{},"设置边框（左右下边框）",[26,140441,140442,140443,140446,140447,140449],{},"里面的内容 是 ",[65,140444,140445],{},"ul > 12*li","，给",[65,140448,26],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[26,140451,140452,140453],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[42,140454,140455,140460,140469],{},[26,140456,140457,140459],{},[65,140458,140430],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[26,140461,140462,140463,140465,140466,140468],{},"可以让 ",[65,140464,140430],{}," 里面的 ",[65,140467,42],{}," 宽度为 252，就可以装的下 4 个 小 li",[26,140470,140471,140473],{},[65,140472,140430],{}," 盒子 overflow 隐藏多余的部分就可以了",[26,140475,116667,140476,140478,140479,140481,140482,140484],{},[65,140477,26],{}," 里面放一个 ",[65,140480,774],{},"（里面放图标），下面的文本用 ",[65,140483,19],{}," 标签包裹",[26,140486,139248,140487,140489,140490,140492,140493,139282,140495,140498],{},[65,140488,774],{}," 设置 24px宽和28px的高（注意 ",[65,140491,774],{}," 是行内元素， 转成行内块），给 ",[65,140494,26],{},[65,140496,140497],{},"text-align:center"," 让里面内容居中显示",[19,140500,140118],{},[58,140502,140504],{"className":126748,"code":140503,"language":126750,"meta":63,"style":63},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[65,140505,140506,140524,140529,140539],{"__ignoreMap":63},[68,140507,140508,140510,140512,140514,140516,140518,140520,140522],{"class":70,"line":71},[68,140509,68],{"class":51501},[68,140511,12640],{"class":335},[68,140513,30],{"class":51501},[68,140515,12640],{"class":335},[68,140517,23758],{"class":51501},[68,140519,12640],{"class":335},[68,140521,483],{"class":51501},[68,140523,15777],{"class":335},[68,140525,140526],{"class":70,"line":92},[68,140527,140528],{"class":393},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[68,140530,140531,140533,140535,140537],{"class":70,"line":1387},[68,140532,128364],{"class":82},[68,140534,51638],{"class":335},[68,140536,128426],{"class":82},[68,140538,1498],{"class":335},[68,140540,140541],{"class":70,"line":1402},[68,140542,1772],{"class":335},[19,140544,140207],{},[58,140546,140547],{"className":126748,"code":140503,"language":126750,"meta":63,"style":63},[65,140548,140549,140567,140571,140581],{"__ignoreMap":63},[68,140550,140551,140553,140555,140557,140559,140561,140563,140565],{"class":70,"line":71},[68,140552,68],{"class":51501},[68,140554,12640],{"class":335},[68,140556,30],{"class":51501},[68,140558,12640],{"class":335},[68,140560,23758],{"class":51501},[68,140562,12640],{"class":335},[68,140564,483],{"class":51501},[68,140566,15777],{"class":335},[68,140568,140569],{"class":70,"line":92},[68,140570,140528],{"class":393},[68,140572,140573,140575,140577,140579],{"class":70,"line":1387},[68,140574,128364],{"class":82},[68,140576,51638],{"class":335},[68,140578,128426],{"class":82},[68,140580,1498],{"class":335},[68,140582,140583],{"class":70,"line":1402},[68,140584,1772],{"class":335},[19,140586,140587,140588,140591],{},"3 号盒子为 ",[65,140589,140590],{},"bargain"," 特价商品",[42,140593,140594],{},[26,140595,140596],{},"这个比较简单，直接插入一张图片即可",[19,140598,140118],{},[58,140600,140601],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,140602,140603],{"__ignoreMap":63},[68,140604,140605,140607,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627],{"class":70,"line":71},[68,140606,1243],{"class":335},[68,140608,48],{"class":51501},[68,140610,55440],{"class":74},[68,140612,381],{"class":335},[68,140614,134265],{"class":78},[68,140616,55448],{"class":74},[68,140618,381],{"class":335},[68,140620,134272],{"class":78},[68,140622,134275],{"class":74},[68,140624,381],{"class":335},[68,140626,134280],{"class":78},[68,140628,51508],{"class":335},[19,140630,140207],{},[58,140632,140633],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,140634,140635],{"__ignoreMap":63},[68,140636,140637,140639,140641,140643,140645,140647,140649,140651,140653,140655,140657,140659],{"class":70,"line":71},[68,140638,1243],{"class":335},[68,140640,48],{"class":51501},[68,140642,55440],{"class":74},[68,140644,381],{"class":335},[68,140646,134265],{"class":78},[68,140648,55448],{"class":74},[68,140650,381],{"class":335},[68,140652,134272],{"class":78},[68,140654,134275],{"class":74},[68,140656,381],{"class":335},[68,140658,134280],{"class":78},[68,140660,51508],{"class":335},[301,140662,140664],{"id":140663},"_1612-推荐模块制作","16.1.2 推荐模块制作",[48,140666],{"style":50,"src":140667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140669,140670,140671,140674],{},"大盒子 ",[65,140672,140673],{},"recom"," 推荐模块 recommend",[42,140676,140677],{},[26,140678,140679,140680,140682,140683,140686],{},"给这个 ",[65,140681,140673],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[65,140684,140685],{},"#ebebeb","），设置距离上边 12px",[19,140688,140118],{},[58,140690,140692],{"className":126748,"code":140691,"language":126750,"meta":63,"style":63},"div {\n  background-color: #f0f0f0;\n}\n",[65,140693,140694,140700,140711],{"__ignoreMap":63},[68,140695,140696,140698],{"class":70,"line":71},[68,140697,51812],{"class":51501},[68,140699,15777],{"class":335},[68,140701,140702,140704,140706,140709],{"class":70,"line":92},[68,140703,71079],{"class":82},[68,140705,51638],{"class":335},[68,140707,140708],{"class":82},"#f0f0f0",[68,140710,1498],{"class":335},[68,140712,140713],{"class":70,"line":1387},[68,140714,1772],{"class":335},[19,140716,140207],{},[58,140718,140719],{"className":126748,"code":140691,"language":126750,"meta":63,"style":63},[65,140720,140721,140727,140737],{"__ignoreMap":63},[68,140722,140723,140725],{"class":70,"line":71},[68,140724,51812],{"class":51501},[68,140726,15777],{"class":335},[68,140728,140729,140731,140733,140735],{"class":70,"line":92},[68,140730,71079],{"class":82},[68,140732,51638],{"class":335},[68,140734,140708],{"class":82},[68,140736,1498],{"class":335},[68,140738,140739],{"class":70,"line":1387},[68,140740,1772],{"class":335},[19,140742,140743],{},"里面包含 2 个盒子， 浮动即可",[19,140745,140118],{},[58,140747,140748],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,140749,140750,140756,140766],{"__ignoreMap":63},[68,140751,140752,140754],{"class":70,"line":71},[68,140753,130596],{"class":74},[68,140755,15777],{"class":335},[68,140757,140758,140760,140762,140764],{"class":70,"line":92},[68,140759,131228],{"class":82},[68,140761,51638],{"class":335},[68,140763,23941],{"class":82},[68,140765,1498],{"class":335},[68,140767,140768],{"class":70,"line":1387},[68,140769,1772],{"class":335},[19,140771,140772,140773],{},"1 号盒子 ",[65,140774,140775],{},"recom_hd",[42,140777,140778,140781],{},[26,140779,140780],{},"设置宽度205px，高度163px",[26,140782,140252,140783,140785],{},[65,140784,48],{},"标签，插入图片即可",[19,140787,140118],{},[58,140789,140790],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,140791,140792],{"__ignoreMap":63},[68,140793,140794,140796,140798,140800,140802,140804,140806,140808,140810,140812,140814,140816],{"class":70,"line":71},[68,140795,1243],{"class":335},[68,140797,48],{"class":51501},[68,140799,55440],{"class":74},[68,140801,381],{"class":335},[68,140803,134265],{"class":78},[68,140805,55448],{"class":74},[68,140807,381],{"class":335},[68,140809,134272],{"class":78},[68,140811,134275],{"class":74},[68,140813,381],{"class":335},[68,140815,134280],{"class":78},[68,140817,51508],{"class":335},[19,140819,140207],{},[58,140821,140822],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,140823,140824],{"__ignoreMap":63},[68,140825,140826,140828,140830,140832,140834,140836,140838,140840,140842,140844,140846,140848],{"class":70,"line":71},[68,140827,1243],{"class":335},[68,140829,48],{"class":51501},[68,140831,55440],{"class":74},[68,140833,381],{"class":335},[68,140835,134265],{"class":78},[68,140837,55448],{"class":74},[68,140839,381],{"class":335},[68,140841,134272],{"class":78},[68,140843,134275],{"class":74},[68,140845,381],{"class":335},[68,140847,134280],{"class":78},[68,140849,51508],{"class":335},[19,140851,140852,140853,140856],{},"2 号盒子 ",[65,140854,140855],{},"recom_bd"," ，注意里面的小竖线",[42,140858,140859,140870,140873,140878,140883],{},[26,140860,140861,140862,140864,140865,140867,140868],{},"右侧结构里面放 ",[65,140863,42],{}," 包含 4个 ",[65,140866,26],{},"，每个li里面包含一个",[65,140869,48],{},[26,140871,140872],{},"直接利用切片工具把里面的内容当成一张图片",[26,140874,139248,140875,140877],{},[65,140876,26],{}," 设置浮动",[26,140879,139248,140880,140882],{},[65,140881,48],{}," 设置宽高，宽度 248px，高度 163px",[26,140884,140885,140886,140446,140889,140891,140892,140894,140895],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[65,140887,140888],{},"top 10px",[65,140890,26],{},"设置相对定位（注意，最后一个",[65,140893,26],{},"不用设置伪元素），可以利用 ",[65,140896,140897],{},"nth-child(-n+3){...}",[19,140899,140118],{},[58,140901,140902],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,140903,140904,140912,140922,140932],{"__ignoreMap":63},[68,140905,140906,140908,140910],{"class":70,"line":71},[68,140907,51812],{"class":51501},[68,140909,137749],{"class":74},[68,140911,15777],{"class":335},[68,140913,140914,140916,140918,140920],{"class":70,"line":92},[68,140915,137756],{"class":82},[68,140917,51638],{"class":335},[68,140919,7857],{"class":78},[68,140921,1498],{"class":335},[68,140923,140924,140926,140928,140930],{"class":70,"line":1387},[68,140925,128364],{"class":82},[68,140927,51638],{"class":335},[68,140929,61070],{"class":82},[68,140931,1498],{"class":335},[68,140933,140934],{"class":70,"line":1402},[68,140935,1772],{"class":335},[19,140937,140207],{},[58,140939,140940],{"className":126748,"code":138590,"language":126750,"meta":63,"style":63},[65,140941,140942,140950,140960,140970],{"__ignoreMap":63},[68,140943,140944,140946,140948],{"class":70,"line":71},[68,140945,51812],{"class":51501},[68,140947,137749],{"class":74},[68,140949,15777],{"class":335},[68,140951,140952,140954,140956,140958],{"class":70,"line":92},[68,140953,137756],{"class":82},[68,140955,51638],{"class":335},[68,140957,7857],{"class":78},[68,140959,1498],{"class":335},[68,140961,140962,140964,140966,140968],{"class":70,"line":1387},[68,140963,128364],{"class":82},[68,140965,51638],{"class":335},[68,140967,61070],{"class":82},[68,140969,1498],{"class":335},[68,140971,140972],{"class":70,"line":1402},[68,140973,1772],{"class":335},[301,140975,140977],{"id":140976},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[48,140979],{"style":50,"src":140980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140982,140983],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140985,140986],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140988,140989,140992],{},[65,140990,140991],{},"box_hd"," 制作",[19,140994,140772,140995,140997],{},[65,140996,140991],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[48,140999],{"style":50,"src":141000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[42,141002,141003,141008,141013,141016],{},[26,141004,141005,141007],{},[65,141006,140991],{}," 给 30px 的高度，2个像素的下边框",[26,141009,141010,141011],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[65,141012,139259],{},[26,141014,141015],{},"左侧盒左浮动，右侧盒子右浮动",[26,141017,141018,141020,141021,141023],{},[65,141019,30],{},"标签之间的距离用左右的",[65,141022,31084],{},"撑开即可",[19,141025,141026],{},"结构代码",[58,141028,141029],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141030,141031,141037,141047],{"__ignoreMap":63},[68,141032,141033,141035],{"class":70,"line":71},[68,141034,130596],{"class":74},[68,141036,15777],{"class":335},[68,141038,141039,141041,141043,141045],{"class":70,"line":92},[68,141040,131228],{"class":82},[68,141042,51638],{"class":335},[68,141044,23941],{"class":82},[68,141046,1498],{"class":335},[68,141048,141049],{"class":70,"line":1387},[68,141050,1772],{"class":335},[19,141052,141053],{},"样式代码",[58,141055,141056],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141057,141058,141064,141074],{"__ignoreMap":63},[68,141059,141060,141062],{"class":70,"line":71},[68,141061,130596],{"class":74},[68,141063,15777],{"class":335},[68,141065,141066,141068,141070,141072],{"class":70,"line":92},[68,141067,131228],{"class":82},[68,141069,51638],{"class":335},[68,141071,23941],{"class":82},[68,141073,1498],{"class":335},[68,141075,141076],{"class":70,"line":1387},[68,141077,1772],{"class":335},[19,141079,141080,140992],{},[65,141081,141082],{},"box_bd",[19,141084,141085],{},"2 号盒子 box_bd，不要给高度",[48,141087],{"style":50,"src":141088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141090,141091],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141093,141094],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141096,141097],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[42,141099,141100,141112,141128],{},[26,141101,141102,141104,141105,141108,141109,141111],{},[65,141103,141082],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[65,141106,141107],{},"tab_content","，在",[65,141110,141107],{}," 里面包裹tab选项卡对应的内容",[26,141113,141114,141115,141118,141119,141121,141122,141124,141125,141127],{},"内容被一个大盒子包裹（",[65,141116,141117],{},"tab_list_item","），里面是 ",[65,141120,42],{}," 包裹 5个 ",[65,141123,26],{},"，每个",[65,141126,26],{},"设置对应的宽度，然后设置浮动",[26,141129,141130,141131,141133,141134,141136,141137],{},"而这5个",[65,141132,26],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[65,141135,26],{},"设置",[42,141138,141139,141157,141160],{},[26,141140,141141,141142,141144,141145,141147,141148,141150,141151,141153,141154,141156],{},"第一个小 ",[65,141143,26],{}," 分为上下结构，上面是 ",[65,141146,42],{}," 包裹 ",[65,141149,26],{}," ，",[65,141152,26],{},"里面包裹 ",[65,141155,30],{},"，下面插入一张图片",[26,141158,141159],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[26,141161,141162,141163,141165,141166,141168,141169,141171],{},"后面的小 ",[65,141164,26],{}," 里面先放一个",[65,141167,30],{},"标签，然后在",[65,141170,30],{},"标签里面插入图片即可",[19,141173,141026],{},[58,141175,141176],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,141177,141178],{"__ignoreMap":63},[68,141179,141180,141182,141184,141186,141188,141190,141192,141194,141196,141198,141200,141202],{"class":70,"line":71},[68,141181,1243],{"class":335},[68,141183,48],{"class":51501},[68,141185,55440],{"class":74},[68,141187,381],{"class":335},[68,141189,134265],{"class":78},[68,141191,55448],{"class":74},[68,141193,381],{"class":335},[68,141195,134272],{"class":78},[68,141197,134275],{"class":74},[68,141199,381],{"class":335},[68,141201,134280],{"class":78},[68,141203,51508],{"class":335},[19,141205,141053],{},[58,141207,141208],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,141209,141210],{"__ignoreMap":63},[68,141211,141212,141214,141216,141218,141220,141222,141224,141226,141228,141230,141232,141234],{"class":70,"line":71},[68,141213,1243],{"class":335},[68,141215,48],{"class":51501},[68,141217,55440],{"class":74},[68,141219,381],{"class":335},[68,141221,134265],{"class":78},[68,141223,55448],{"class":74},[68,141225,381],{"class":335},[68,141227,134272],{"class":78},[68,141229,134275],{"class":74},[68,141231,381],{"class":335},[68,141233,134280],{"class":78},[68,141235,51508],{"class":335},[19,141237,141238],{},"tab栏切换需求！！！！！！介绍：",[48,141240],{"style":50,"src":141241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[42,141243,141244,141252,141258,141261],{},[26,141245,141246,141249,141250],{},[65,141247,141248],{},"tab","栏的布局是 ",[65,141251,139259],{},[26,141253,141254,141255,141257],{},"有多少个",[65,141256,141248],{},"选项卡，那么对应就有多少个内容",[26,141259,141260],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[26,141262,141263,141264,141267,141268,141270,141271,141273],{},"等后面我们学习了",[65,141265,141266],{},"js","之后，我们就会配合",[65,141269,141266],{},"来实现，",[65,141272,141248],{},"栏的切换",[14,141275,141277],{"id":141276},"_162-列表制作","16.2 列表制作",[301,141279,141281],{"id":141280},"_1621-准备工作","16.2.1 准备工作",[42,141283,141284,141287,141290,141293],{},[26,141285,141286],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[26,141288,141289],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[26,141291,141292],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[26,141294,141295],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[301,141297,141299,141300,101218,141302,141304],{"id":141298},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[65,141301,131753],{},[65,141303,53914],{}," 修改",[48,141306],{"style":50,"src":141307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[42,141309,141310],{},[26,141311,141312],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141314,140118],{},[58,141316,141317],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,141318,141319,141323,141337,141341,141355,141359,141373,141377,141391,141395],{"__ignoreMap":63},[68,141320,141321],{"class":70,"line":71},[68,141322,132187],{"class":393},[68,141324,141325,141327,141329,141331,141333,141335],{"class":70,"line":92},[68,141326,132192],{"class":74},[68,141328,80008],{"class":335},[68,141330,129108],{"class":82},[68,141332,51638],{"class":335},[68,141334,132201],{"class":82},[68,141336,129678],{"class":335},[68,141338,141339],{"class":70,"line":1387},[68,141340,132208],{"class":393},[68,141342,141343,141345,141347,141349,141351,141353],{"class":70,"line":1402},[68,141344,132213],{"class":74},[68,141346,80008],{"class":335},[68,141348,129108],{"class":82},[68,141350,51638],{"class":335},[68,141352,54965],{"class":82},[68,141354,129678],{"class":335},[68,141356,141357],{"class":70,"line":1408},[68,141358,132228],{"class":393},[68,141360,141361,141363,141365,141367,141369,141371],{"class":70,"line":1422},[68,141362,132233],{"class":74},[68,141364,80008],{"class":335},[68,141366,129108],{"class":82},[68,141368,51638],{"class":335},[68,141370,55032],{"class":82},[68,141372,129678],{"class":335},[68,141374,141375],{"class":70,"line":1428},[68,141376,132248],{"class":393},[68,141378,141379,141381,141383,141385,141387,141389],{"class":70,"line":1519},[68,141380,132253],{"class":74},[68,141382,80008],{"class":335},[68,141384,129108],{"class":82},[68,141386,51638],{"class":335},[68,141388,86434],{"class":82},[68,141390,129678],{"class":335},[68,141392,141393],{"class":70,"line":1525},[68,141394,132268],{"class":393},[68,141396,141397,141399,141401,141403,141405,141407],{"class":70,"line":1537},[68,141398,132273],{"class":74},[68,141400,80008],{"class":335},[68,141402,129108],{"class":82},[68,141404,51638],{"class":335},[68,141406,132282],{"class":82},[68,141408,129678],{"class":335},[19,141410,140207],{},[58,141412,141413],{"className":126748,"code":132180,"language":126750,"meta":63,"style":63},[65,141414,141415,141419,141433,141437,141451,141455,141469,141473,141487,141491],{"__ignoreMap":63},[68,141416,141417],{"class":70,"line":71},[68,141418,132187],{"class":393},[68,141420,141421,141423,141425,141427,141429,141431],{"class":70,"line":92},[68,141422,132192],{"class":74},[68,141424,80008],{"class":335},[68,141426,129108],{"class":82},[68,141428,51638],{"class":335},[68,141430,132201],{"class":82},[68,141432,129678],{"class":335},[68,141434,141435],{"class":70,"line":1387},[68,141436,132208],{"class":393},[68,141438,141439,141441,141443,141445,141447,141449],{"class":70,"line":1402},[68,141440,132213],{"class":74},[68,141442,80008],{"class":335},[68,141444,129108],{"class":82},[68,141446,51638],{"class":335},[68,141448,54965],{"class":82},[68,141450,129678],{"class":335},[68,141452,141453],{"class":70,"line":1408},[68,141454,132228],{"class":393},[68,141456,141457,141459,141461,141463,141465,141467],{"class":70,"line":1422},[68,141458,132233],{"class":74},[68,141460,80008],{"class":335},[68,141462,129108],{"class":82},[68,141464,51638],{"class":335},[68,141466,55032],{"class":82},[68,141468,129678],{"class":335},[68,141470,141471],{"class":70,"line":1428},[68,141472,132248],{"class":393},[68,141474,141475,141477,141479,141481,141483,141485],{"class":70,"line":1519},[68,141476,132253],{"class":74},[68,141478,80008],{"class":335},[68,141480,129108],{"class":82},[68,141482,51638],{"class":335},[68,141484,86434],{"class":82},[68,141486,129678],{"class":335},[68,141488,141489],{"class":70,"line":1525},[68,141490,132268],{"class":393},[68,141492,141493,141495,141497,141499,141501,141503],{"class":70,"line":1537},[68,141494,132273],{"class":74},[68,141496,80008],{"class":335},[68,141498,129108],{"class":82},[68,141500,51638],{"class":335},[68,141502,132282],{"class":82},[68,141504,129678],{"class":335},[42,141506,141507,141518],{},[26,141508,141509,141510,141513,141514,101218,141516],{},"1 号盒子左侧浮动 ",[65,141511,141512],{},"sk_list"," 里面包含 ",[65,141515,42],{},[65,141517,26],{},[26,141519,141520,141521,141513,141524,101218,141526],{},"2 号盒子左侧浮动 ",[65,141522,141523],{},"sk_con",[65,141525,42],{},[65,141527,26],{},[19,141529,140118],{},[58,141531,141532],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141533,141534,141540,141550],{"__ignoreMap":63},[68,141535,141536,141538],{"class":70,"line":71},[68,141537,130596],{"class":74},[68,141539,15777],{"class":335},[68,141541,141542,141544,141546,141548],{"class":70,"line":92},[68,141543,131228],{"class":82},[68,141545,51638],{"class":335},[68,141547,23941],{"class":82},[68,141549,1498],{"class":335},[68,141551,141552],{"class":70,"line":1387},[68,141553,1772],{"class":335},[19,141555,140207],{},[58,141557,141558],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141559,141560,141566,141576],{"__ignoreMap":63},[68,141561,141562,141564],{"class":70,"line":71},[68,141563,130596],{"class":74},[68,141565,15777],{"class":335},[68,141567,141568,141570,141572,141574],{"class":70,"line":92},[68,141569,131228],{"class":82},[68,141571,51638],{"class":335},[68,141573,23941],{"class":82},[68,141575,1498],{"class":335},[68,141577,141578],{"class":70,"line":1387},[68,141579,1772],{"class":335},[301,141581,141583,141584],{"id":141582},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[65,141585,141586],{},"sk_container",[48,141588],{"style":50,"src":141589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[42,141591,141592,141597],{},[26,141593,140772,141594,141596],{},[65,141595,141586],{}," 给宽度 1200，不要给高度",[26,141598,141599],{},"一定不要忘记清除浮动",[19,141601,140118],{},[58,141603,141604],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141605,141606,141612,141622],{"__ignoreMap":63},[68,141607,141608,141610],{"class":70,"line":71},[68,141609,130596],{"class":74},[68,141611,15777],{"class":335},[68,141613,141614,141616,141618,141620],{"class":70,"line":92},[68,141615,131228],{"class":82},[68,141617,51638],{"class":335},[68,141619,23941],{"class":82},[68,141621,1498],{"class":335},[68,141623,141624],{"class":70,"line":1387},[68,141625,1772],{"class":335},[23,141627,141628],{},[26,141629,141630],{},"sk_hd制作",[42,141632,141633],{},[26,141634,140852,141635,141638],{},[65,141636,141637],{},"sk_hd"," ，插入图片即可",[19,141640,140118],{},[58,141642,141643],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,141644,141645],{"__ignoreMap":63},[68,141646,141647,141649,141651,141653,141655,141657,141659,141661,141663,141665,141667,141669],{"class":70,"line":71},[68,141648,1243],{"class":335},[68,141650,48],{"class":51501},[68,141652,55440],{"class":74},[68,141654,381],{"class":335},[68,141656,134265],{"class":78},[68,141658,55448],{"class":74},[68,141660,381],{"class":335},[68,141662,134272],{"class":78},[68,141664,134275],{"class":74},[68,141666,381],{"class":335},[68,141668,134280],{"class":78},[68,141670,51508],{"class":335},[23,141672,141673],{"start":92},[26,141674,141675],{},"sk_bd制作",[42,141677,141678],{},[26,141679,141680,141681,141684,141685,101218,141687,141689],{},"3 号盒子 ",[65,141682,141683],{},"sk_bd"," ，里面包含很多的 ",[65,141686,42],{},[65,141688,26],{},[42,141690,141691,141700],{},[26,141692,141693,141694,141696,141697,141699],{},"当鼠标移入到 ",[65,141695,26],{}," 上面的时候显示红色的边框，在这里先给 ",[65,141698,26],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[26,141701,141702,141703,141705,141706,141708,141709,141712,141713,141715],{},"由于给每个 ",[65,141704,26],{}," 都设置了外边距，导致一行的最后一个 ",[65,141707,26],{}," 掉了下来，在这里我们利用 ",[65,141710,141711],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[65,141714,26],{},"，去掉外边距就好了",[19,141717,140118],{},[58,141719,141720],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,141721,141722,141728,141740],{"__ignoreMap":63},[68,141723,141724,141726],{"class":70,"line":71},[68,141725,51812],{"class":51501},[68,141727,15777],{"class":335},[68,141729,141730,141732,141734,141736,141738],{"class":70,"line":92},[68,141731,70671],{"class":82},[68,141733,51638],{"class":335},[68,141735,525],{"class":82},[68,141737,51757],{"class":82},[68,141739,1498],{"class":335},[68,141741,141742],{"class":70,"line":1387},[68,141743,1772],{"class":335},[19,141745,140207],{},[58,141747,141748],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,141749,141750,141756,141768],{"__ignoreMap":63},[68,141751,141752,141754],{"class":70,"line":71},[68,141753,51812],{"class":51501},[68,141755,15777],{"class":335},[68,141757,141758,141760,141762,141764,141766],{"class":70,"line":92},[68,141759,70671],{"class":82},[68,141761,51638],{"class":335},[68,141763,525],{"class":82},[68,141765,51757],{"class":82},[68,141767,1498],{"class":335},[68,141769,141770],{"class":70,"line":1387},[68,141771,1772],{"class":335},[14,141773,141775],{"id":141774},"_163-注册页面制作","16.3 注册页面制作",[48,141777],{"style":50,"src":141778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141780,141781,141783],{},[483,141782,9230],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[48,141785],{"style":50,"src":141786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[301,141788,141790],{"id":141789},"_1631-准备工作","16.3.1 准备工作",[42,141792,141793,141796],{},[26,141794,141795],{},"创建register.html，引入 base.css，引入favicon图标",[26,141797,141798],{},"创建register.css ，在html页面进行引入",[301,141800,141802,141803,141805],{"id":141801},"_1632-header-头部实现","16.3.2 ",[65,141804,131753],{}," 头部实现",[42,141807,141808,141811],{},[26,141809,141810],{},"整个内容用 版心 进行包裹",[26,141812,141813],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141815,140118],{},[58,141817,141818],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,141819,141820],{"__ignoreMap":63},[68,141821,141822,141824,141826,141828,141830,141832,141834,141836,141838,141840,141842,141844],{"class":70,"line":71},[68,141823,1243],{"class":335},[68,141825,48],{"class":51501},[68,141827,55440],{"class":74},[68,141829,381],{"class":335},[68,141831,134265],{"class":78},[68,141833,55448],{"class":74},[68,141835,381],{"class":335},[68,141837,134272],{"class":78},[68,141839,134275],{"class":74},[68,141841,381],{"class":335},[68,141843,134280],{"class":78},[68,141845,51508],{"class":335},[19,141847,140207],{},[58,141849,141850],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,141851,141852],{"__ignoreMap":63},[68,141853,141854,141856,141858,141860,141862,141864,141866,141868,141870,141872,141874,141876],{"class":70,"line":71},[68,141855,1243],{"class":335},[68,141857,48],{"class":51501},[68,141859,55440],{"class":74},[68,141861,381],{"class":335},[68,141863,134265],{"class":78},[68,141865,55448],{"class":74},[68,141867,381],{"class":335},[68,141869,134272],{"class":78},[68,141871,134275],{"class":74},[68,141873,381],{"class":335},[68,141875,134280],{"class":78},[68,141877,51508],{"class":335},[301,141879,141881,141882,141885],{"id":141880},"_1633-registerarea-主体模块实现","16.3.3 ",[65,141883,141884],{},"registerarea"," 主体模块实现",[48,141887],{"style":50,"src":141888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141890,141891],{},"整个大盒子 高度为 522px，设置4个边框",[19,141893,140118],{},[58,141895,141896],{"className":126748,"code":130905,"language":126750,"meta":63,"style":63},[65,141897,141898,141904,141920],{"__ignoreMap":63},[68,141899,141900,141902],{"class":70,"line":71},[68,141901,51812],{"class":51501},[68,141903,15777],{"class":335},[68,141905,141906,141908,141910,141912,141914,141916,141918],{"class":70,"line":92},[68,141907,71097],{"class":82},[68,141909,51638],{"class":335},[68,141911,551],{"class":82},[68,141913,51693],{"class":331},[68,141915,51722],{"class":82},[68,141917,130140],{"class":82},[68,141919,1498],{"class":335},[68,141921,141922],{"class":70,"line":1387},[68,141923,1772],{"class":335},[19,141925,140207],{},[58,141927,141928],{"className":126748,"code":130905,"language":126750,"meta":63,"style":63},[65,141929,141930,141936,141952],{"__ignoreMap":63},[68,141931,141932,141934],{"class":70,"line":71},[68,141933,51812],{"class":51501},[68,141935,15777],{"class":335},[68,141937,141938,141940,141942,141944,141946,141948,141950],{"class":70,"line":92},[68,141939,71097],{"class":82},[68,141941,51638],{"class":335},[68,141943,551],{"class":82},[68,141945,51693],{"class":331},[68,141947,51722],{"class":82},[68,141949,130140],{"class":82},[68,141951,1498],{"class":335},[68,141953,141954],{"class":70,"line":1387},[68,141955,1772],{"class":335},[19,141957,141958],{},"1号盒子 是一个 h3 标签，放标题",[42,141960,141961],{},[26,141962,141963],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141965,140118],{},[58,141967,141968],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141969,141970,141976,141986],{"__ignoreMap":63},[68,141971,141972,141974],{"class":70,"line":71},[68,141973,130596],{"class":74},[68,141975,15777],{"class":335},[68,141977,141978,141980,141982,141984],{"class":70,"line":92},[68,141979,131228],{"class":82},[68,141981,51638],{"class":335},[68,141983,23941],{"class":82},[68,141985,1498],{"class":335},[68,141987,141988],{"class":70,"line":1387},[68,141989,1772],{"class":335},[19,141991,140207],{},[58,141993,141994],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,141995,141996,142002,142012],{"__ignoreMap":63},[68,141997,141998,142000],{"class":70,"line":71},[68,141999,130596],{"class":74},[68,142001,15777],{"class":335},[68,142003,142004,142006,142008,142010],{"class":70,"line":92},[68,142005,131228],{"class":82},[68,142007,51638],{"class":335},[68,142009,23941],{"class":82},[68,142011,1498],{"class":335},[68,142013,142014],{"class":70,"line":1387},[68,142015,1772],{"class":335},[19,142017,142018],{},"2号盒子 里面放注册的内容",[42,142020,142021,142024,142033,142047,142060,142063,142066,142084,142098],{},[26,142022,142023],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[26,142025,142026,142027,142029,142030,142032],{},"里面的内容利用 ",[65,142028,42],{}," 包含 ",[65,142031,26],{}," 来实现的（不需要用表格）",[26,142034,139262,142035,142037,142038,142040,142041,142043,142044,142046],{},[65,142036,26],{}," 里面，左侧放 ",[65,142039,33809],{}," 标签， 中间放",[65,142042,54022],{}," 标签， 右侧放 ",[65,142045,68],{}," 提示信息",[26,142048,142049,142050,142052,142053,142055,142056,142059],{},"左侧 ",[65,142051,33809],{},"里面的文字都是右对齐，我们可以给",[65,142054,33809],{},"设置一个宽度（88px），然后利用",[65,142057,142058],{},"text-align"," 来设置右对齐",[26,142061,142062],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[26,142064,142065],{},"右侧 span修饰一下文字颜色",[26,142067,142068,142069],{},"提示信息的样式优化",[42,142070,142071,142074,142077],{},[26,142072,142073],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[26,142075,142076],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[26,142078,142079,142080,142083],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[65,142081,142082],{},"vertical-algin"," 来设置 图片与文字对齐方式",[26,142085,142086,142087],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[42,142088,142089,142095],{},[26,142090,142091,142092,142094],{},"设置 ",[65,142093,23758],{}," 的 左右 12px 的内边距，设置一下文字颜色",[26,142096,142097],{},"分别设置 背景颜色",[26,142099,142100,142101,142103],{},"同意协议 和 完成注册 都是用 ",[65,142102,26],{}," 进行包裹",[19,142105,140118],{},[58,142107,142108],{"className":126748,"code":140691,"language":126750,"meta":63,"style":63},[65,142109,142110,142116,142126],{"__ignoreMap":63},[68,142111,142112,142114],{"class":70,"line":71},[68,142113,51812],{"class":51501},[68,142115,15777],{"class":335},[68,142117,142118,142120,142122,142124],{"class":70,"line":92},[68,142119,71079],{"class":82},[68,142121,51638],{"class":335},[68,142123,140708],{"class":82},[68,142125,1498],{"class":335},[68,142127,142128],{"class":70,"line":1387},[68,142129,1772],{"class":335},[19,142131,140207],{},[58,142133,142134],{"className":126748,"code":140691,"language":126750,"meta":63,"style":63},[65,142135,142136,142142,142152],{"__ignoreMap":63},[68,142137,142138,142140],{"class":70,"line":71},[68,142139,51812],{"class":51501},[68,142141,15777],{"class":335},[68,142143,142144,142146,142148,142150],{"class":70,"line":92},[68,142145,71079],{"class":82},[68,142147,51638],{"class":335},[68,142149,140708],{"class":82},[68,142151,1498],{"class":335},[68,142153,142154],{"class":70,"line":1387},[68,142155,1772],{"class":335},[301,142157,142159],{"id":142158},"_1634-底部实现","16.3.4 底部实现",[19,142161,140118],{},[58,142163,142164],{"className":126748,"code":140691,"language":126750,"meta":63,"style":63},[65,142165,142166,142172,142182],{"__ignoreMap":63},[68,142167,142168,142170],{"class":70,"line":71},[68,142169,51812],{"class":51501},[68,142171,15777],{"class":335},[68,142173,142174,142176,142178,142180],{"class":70,"line":92},[68,142175,71079],{"class":82},[68,142177,51638],{"class":335},[68,142179,140708],{"class":82},[68,142181,1498],{"class":335},[68,142183,142184],{"class":70,"line":1387},[68,142185,1772],{"class":335},[19,142187,140207],{},[58,142189,142190],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,142191,142192,142196,142210,142214],{"__ignoreMap":63},[68,142193,142194],{"class":70,"line":71},[68,142195,130859],{"class":393},[68,142197,142198,142200,142202,142204,142206,142208],{"class":70,"line":92},[68,142199,1243],{"class":335},[68,142201,51812],{"class":51501},[68,142203,53687],{"class":74},[68,142205,381],{"class":335},[68,142207,130872],{"class":78},[68,142209,51508],{"class":335},[68,142211,142212],{"class":70,"line":1387},[68,142213,130879],{"class":335},[68,142215,142216,142218,142220],{"class":70,"line":1402},[68,142217,51986],{"class":335},[68,142219,51812],{"class":51501},[68,142221,51508],{"class":335},[14,142223,142225],{"id":142224},"_164-项目总结","16.4 项目总结",[23,142227,142228,142231,142234,142237],{},[26,142229,142230],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[26,142232,142233],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[26,142235,142236],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[26,142238,142239],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[48,142241],{"style":50,"src":142242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[23,142244,142245],{"start":1408},[26,142246,142247],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[48,142249],{"style":50,"src":142250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[23,142252,142253],{"start":1422},[26,142254,142255],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[48,142257],{"style":50,"src":142258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[58,142260,142261],{"className":127495,"code":136905,"language":127497,"meta":63,"style":63},[65,142262,142263],{"__ignoreMap":63},[68,142264,142265,142267,142269,142271,142273,142275,142277,142279,142281,142283,142285,142287],{"class":70,"line":71},[68,142266,1243],{"class":335},[68,142268,54022],{"class":51501},[68,142270,54025],{"class":74},[68,142272,381],{"class":335},[68,142274,62900],{"class":78},[68,142276,15125],{"class":74},[68,142278,381],{"class":335},[68,142280,136926],{"class":78},[68,142282,61221],{"class":74},[68,142284,381],{"class":335},[68,142286,136933],{"class":78},[68,142288,51508],{"class":335},[23,142290,142291,142294],{"start":1428},[26,142292,142293],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[26,142295,142296],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[250,142298,142299],{},"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":63,"searchDepth":92,"depth":92,"links":142301},[142302,142307,142314,142322],{"id":139928,"depth":92,"text":139929,"children":142303},[142304,142305,142306],{"id":139932,"depth":1387,"text":139933},{"id":140663,"depth":1387,"text":140664},{"id":140976,"depth":1387,"text":140977},{"id":141276,"depth":92,"text":141277,"children":142308},[142309,142310,142312],{"id":141280,"depth":1387,"text":141281},{"id":141298,"depth":1387,"text":142311},"16.2.2 列表页 header 和 nav 修改",{"id":141582,"depth":1387,"text":142313},"16.2.3 列表页主体 sk_container",{"id":141774,"depth":92,"text":141775,"children":142315},[142316,142317,142319,142321],{"id":141789,"depth":1387,"text":141790},{"id":141801,"depth":1387,"text":142318},"16.3.2 header 头部实现",{"id":141880,"depth":1387,"text":142320},"16.3.3 registerarea 主体模块实现",{"id":142158,"depth":1387,"text":142159},{"id":142224,"depth":92,"text":142225},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139920,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142329,"title":142330,"body":142331,"description":257,"extension":258,"meta":142439,"navigation":260,"path":142440,"seo":142441,"stem":142442,"__hash__":142443},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142332,"toc":142434},[142333,142336,142340,142343,142346,142355,142364,142368,142373,142380,142398,142401,142404,142407,142410,142413,142416,142419,142422,142425,142428,142431],[10,142334,142330],{"id":142335},"_17-web服务器与网站发布",[14,142337,142339],{"id":142338},"_171-web服务器","17.1 Web服务器",[19,142341,142342],{},"把自己网站上传到服务器上，可以让其他人访问",[48,142344],{"style":50,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142347,142348,142351,142352],{},[483,142349,142350],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[483,142353,142354],{},"Web 服务器等",[19,142356,142357,142358,101218,142361,25944],{},"根据服务器在网络中所在的位置不同，又可分为 ",[483,142359,142360],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[483,142362,142363],{},"远程服务器",[301,142365,142367],{"id":142366},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142369,142370],{},[483,142371,142372],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142374,142375,142376],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[30,142377,142378],{"href":142378,"rel":142379},"http:\u002F\u002Ffree.3v.do\u002F",[34],[42,142381,142382,142385,142388,142395],{},[26,142383,142384],{},"去免费空间网站注册账号。",[26,142386,142387],{},"记录下主机名、用户名、密码、域名。",[26,142389,142390,142391,142394],{},"利用 ",[65,142392,142393],{},"utftp"," 软件 上传网站到远程服务器",[26,142396,142397],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142399,142400],{},"使用软件上传，对上传软件文件进行解压",[48,142402],{"style":50,"src":142403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[48,142405],{"style":50,"src":142406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142408,142409],{},"输入刚刚申请的服务器账号信息：",[48,142411],{"style":50,"src":142412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[48,142414],{"style":50,"src":142415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[48,142417],{"style":50,"src":142418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[48,142420],{"style":50,"src":142421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142423,142424],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[48,142426],{"style":50,"src":142427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142429,142430],{},"浏览器输入域名即可访问",[19,142432,142433],{},"首页一定必须是index",{"title":63,"searchDepth":92,"depth":92,"links":142435},[142436],{"id":142338,"depth":92,"text":142339,"children":142437},[142438],{"id":142366,"depth":1387,"text":142367},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142330,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142445,"title":142446,"body":142447,"description":257,"extension":258,"meta":143374,"navigation":260,"path":143375,"seo":143376,"stem":143377,"__hash__":143378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142448,"toc":143357},[142449,142452,142456,142459,142462,142473,142476,142480,142484,142489,142492,142495,142498,142501,142505,142531,142535,142539,142542,142545,142549,142582,142586,142589,142592,142656,142660,142664,142667,142670,142673,142677,142722,142726,142729,142759,142763,142767,142770,142773,142777,142780,142849,142852,142960,142962,142968,142972,142975,142978,143074,143077,143081,143105,143109,143112,143116,143119,143123,143126,143129,143132,143135,143139,143142,143145,143149,143153,143156,143159,143162,143165,143169,143172,143176,143179,143182,143227,143231,143235,143238,143241,143244,143276,143280,143283,143317,143321,143324,143354],[10,142450,142446],{"id":142451},"_18-2d动画与3d转换",[14,142453,142455],{"id":142454},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142457,142458],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142460,142461],{},"转换（transform）你可以简单理解为变形",[42,142463,142464,142467,142470],{},[26,142465,142466],{},"移动：translate",[26,142468,142469],{},"旋转：rotate",[26,142471,142472],{},"缩放：scale",[48,142474],{"style":50,"src":142475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[301,142477,142479],{"id":142478},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22203,142481,142483],{"id":142482},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142485,142486,142487],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[483,142488,133407],{},[48,142490],{"style":50,"src":142491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142493,142494],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142496,142497],{},"对于行内元素无效",[19,142499,142500],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22203,142502,142504],{"id":142503},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[58,142506,142507],{"className":126748,"code":138937,"language":126750,"meta":63,"style":63},[65,142508,142509,142515,142527],{"__ignoreMap":63},[68,142510,142511,142513],{"class":70,"line":71},[68,142512,51812],{"class":51501},[68,142514,15777],{"class":335},[68,142516,142517,142519,142521,142523,142525],{"class":70,"line":92},[68,142518,70671],{"class":82},[68,142520,51638],{"class":335},[68,142522,525],{"class":82},[68,142524,51757],{"class":82},[68,142526,1498],{"class":335},[68,142528,142529],{"class":70,"line":1387},[68,142530,1772],{"class":335},[301,142532,142534],{"id":142533},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22203,142536,142538],{"id":142537},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142540,142541],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[48,142543],{"style":50,"src":142544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22203,142546,142548],{"id":142547},"_18122-旋转效果","18.1.2.2 旋转效果",[58,142550,142552],{"className":126748,"code":142551,"language":126750,"meta":63,"style":63},"div {\n  transform: rotate(45deg);\n}\n",[65,142553,142554,142560,142578],{"__ignoreMap":63},[68,142555,142556,142558],{"class":70,"line":71},[68,142557,51812],{"class":51501},[68,142559,15777],{"class":335},[68,142561,142562,142564,142566,142569,142571,142573,142576],{"class":70,"line":92},[68,142563,136732],{"class":82},[68,142565,51638],{"class":335},[68,142567,142568],{"class":82},"rotate",[68,142570,336],{"class":335},[68,142572,862],{"class":82},[68,142574,142575],{"class":331},"deg",[68,142577,2925],{"class":335},[68,142579,142580],{"class":70,"line":1387},[68,142581,1772],{"class":335},[22203,142583,142585],{"id":142584},"_18123-三角做法","18.1.2.3 三角做法",[19,142587,142588],{},"该下标当经过最外层大盒子时会实现向上反转",[48,142590],{"style":50,"src":142591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[58,142593,142594],{"className":126748,"code":135268,"language":126750,"meta":63,"style":63},[65,142595,142596,142600,142606,142616,142626,142642,142652],{"__ignoreMap":63},[68,142597,142598],{"class":70,"line":71},[68,142599,135275],{"class":393},[68,142601,142602,142604],{"class":70,"line":92},[68,142603,135280],{"class":74},[68,142605,15777],{"class":335},[68,142607,142608,142610,142612,142614],{"class":70,"line":1387},[68,142609,70769],{"class":82},[68,142611,51638],{"class":335},[68,142613,525],{"class":82},[68,142615,1498],{"class":335},[68,142617,142618,142620,142622,142624],{"class":70,"line":1402},[68,142619,70989],{"class":82},[68,142621,51638],{"class":335},[68,142623,525],{"class":82},[68,142625,1498],{"class":335},[68,142627,142628,142630,142632,142634,142636,142638,142640],{"class":70,"line":1408},[68,142629,71097],{"class":82},[68,142631,51638],{"class":335},[68,142633,779],{"class":82},[68,142635,51693],{"class":331},[68,142637,51722],{"class":82},[68,142639,64192],{"class":82},[68,142641,1498],{"class":335},[68,142643,142644,142646,142648,142650],{"class":70,"line":1422},[68,142645,135323],{"class":82},[68,142647,51638],{"class":335},[68,142649,62570],{"class":82},[68,142651,1498],{"class":335},[68,142653,142654],{"class":70,"line":1428},[68,142655,1772],{"class":335},[301,142657,142659],{"id":142658},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22203,142661,142663],{"id":142662},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142665,142666],{},"设置中心点",[48,142668],{"style":50,"src":142669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142671,142672],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22203,142674,142676],{"id":142675},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[58,142678,142680],{"className":126748,"code":142679,"language":126750,"meta":63,"style":63},"\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",[65,142681,142682,142687,142693,142708,142713,142718],{"__ignoreMap":63},[68,142683,142684],{"class":70,"line":71},[68,142685,142686],{"class":393},"\u002F* 转换中心点 *\u002F\n",[68,142688,142689,142691],{"class":70,"line":92},[68,142690,51812],{"class":51501},[68,142692,15777],{"class":335},[68,142694,142695,142698,142700,142702,142704,142706],{"class":70,"line":1387},[68,142696,142697],{"class":82},"  transform-origin",[68,142699,51638],{"class":335},[68,142701,51793],{"class":82},[68,142703,17349],{"class":82},[68,142705,130611],{"class":335},[68,142707,135421],{"class":393},[68,142709,142710],{"class":70,"line":1402},[68,142711,142712],{"class":393},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[68,142714,142715],{"class":70,"line":1408},[68,142716,142717],{"class":393},"  \u002F* transform-origin: left top; *\u002F\n",[68,142719,142720],{"class":70,"line":1422},[68,142721,1772],{"class":335},[22203,142723,142725],{"id":142724},"_18133-旋转案例","18.1.3.3 旋转案例",[48,142727],{"style":50,"src":142728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[58,142730,142731],{"className":126748,"code":142551,"language":126750,"meta":63,"style":63},[65,142732,142733,142739,142755],{"__ignoreMap":63},[68,142734,142735,142737],{"class":70,"line":71},[68,142736,51812],{"class":51501},[68,142738,15777],{"class":335},[68,142740,142741,142743,142745,142747,142749,142751,142753],{"class":70,"line":92},[68,142742,136732],{"class":82},[68,142744,51638],{"class":335},[68,142746,142568],{"class":82},[68,142748,336],{"class":335},[68,142750,862],{"class":82},[68,142752,142575],{"class":331},[68,142754,2925],{"class":335},[68,142756,142757],{"class":70,"line":1387},[68,142758,1772],{"class":335},[301,142760,142762],{"id":142761},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22203,142764,142766],{"id":142765},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142768,142769],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[48,142771],{"style":50,"src":142772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22203,142774,142776],{"id":142775},"_18142-分页按钮","18.1.4.2 分页按钮",[48,142778],{"style":50,"src":142779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[58,142781,142783],{"className":126748,"code":142782,"language":126750,"meta":63,"style":63},"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",[65,142784,142785,142791,142807,142811,142815,142820,142826,142840,142845],{"__ignoreMap":63},[68,142786,142787,142789],{"class":70,"line":71},[68,142788,51812],{"class":51501},[68,142790,15777],{"class":335},[68,142792,142793,142795,142797,142800,142802,142805],{"class":70,"line":92},[68,142794,136732],{"class":82},[68,142796,51638],{"class":335},[68,142798,142799],{"class":82},"scale",[68,142801,336],{"class":335},[68,142803,142804],{"class":82},"1.2",[68,142806,2925],{"class":335},[68,142808,142809],{"class":70,"line":1387},[68,142810,1772],{"class":335},[68,142812,142813],{"class":70,"line":1402},[68,142814,136209],{"class":335},[68,142816,142817],{"class":70,"line":1408},[68,142818,142819],{"class":393},"\u002F* 2D 缩放 *\u002F\n",[68,142821,142822,142824],{"class":70,"line":1422},[68,142823,51812],{"class":51501},[68,142825,15777],{"class":335},[68,142827,142828,142830,142832,142834,142836,142838],{"class":70,"line":1428},[68,142829,136732],{"class":82},[68,142831,51638],{"class":335},[68,142833,142799],{"class":82},[68,142835,336],{"class":335},[68,142837,142804],{"class":82},[68,142839,2925],{"class":335},[68,142841,142842],{"class":70,"line":1519},[68,142843,142844],{"class":393},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[68,142846,142847],{"class":70,"line":1525},[68,142848,1772],{"class":335},[19,142850,142851],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[58,142853,142855],{"className":126748,"code":142854,"language":126750,"meta":63,"style":63},"\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",[65,142856,142857,142862,142872,142893,142914,142918,142923,142929,142956],{"__ignoreMap":63},[68,142858,142859],{"class":70,"line":71},[68,142860,142861],{"class":393},"\u002F* 定义动画 *\u002F\n",[68,142863,142864,142867,142870],{"class":70,"line":92},[68,142865,142866],{"class":331},"@keyframes",[68,142868,142869],{"class":5421}," move",[68,142871,15777],{"class":335},[68,142873,142874,142877,142879,142881,142883,142886,142888,142890],{"class":70,"line":1387},[68,142875,142876],{"class":74},"  0%",[68,142878,80008],{"class":335},[68,142880,48335],{"class":82},[68,142882,51638],{"class":335},[68,142884,142885],{"class":82},"translateX",[68,142887,336],{"class":335},[68,142889,525],{"class":82},[68,142891,142892],{"class":335},"); }\n",[68,142894,142895,142898,142900,142902,142904,142906,142908,142910,142912],{"class":70,"line":1402},[68,142896,142897],{"class":74},"  100%",[68,142899,80008],{"class":335},[68,142901,48335],{"class":82},[68,142903,51638],{"class":335},[68,142905,142885],{"class":82},[68,142907,336],{"class":335},[68,142909,644],{"class":82},[68,142911,51693],{"class":331},[68,142913,142892],{"class":335},[68,142915,142916],{"class":70,"line":1408},[68,142917,1772],{"class":335},[68,142919,142920],{"class":70,"line":1422},[68,142921,142922],{"class":393},"\u002F* 调用动画 *\u002F\n",[68,142924,142925,142927],{"class":70,"line":1428},[68,142926,51812],{"class":51501},[68,142928,15777],{"class":335},[68,142930,142931,142934,142936,142938,142940,142942,142944,142946,142948,142951,142954],{"class":70,"line":1519},[68,142932,142933],{"class":82},"  animation",[68,142935,51638],{"class":335},[68,142937,135434],{"class":82},[68,142939,25322],{"class":82},[68,142941,1028],{"class":331},[68,142943,78881],{"class":82},[68,142945,4299],{"class":82},[68,142947,1028],{"class":331},[68,142949,142950],{"class":82}," infinite",[68,142952,142953],{"class":82}," alternate",[68,142955,1498],{"class":335},[68,142957,142958],{"class":70,"line":1525},[68,142959,1772],{"class":335},[19,142961,142851],{},[58,142963,142966],{"className":142964,"code":142965,"language":5393},[5391],"\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",[65,142967,142965],{"__ignoreMap":63},[22203,142969,142971],{"id":142970},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142973,142974],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[48,142976],{"style":50,"src":142977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[58,142979,142980],{"className":126748,"code":142854,"language":126750,"meta":63,"style":63},[65,142981,142982,142986,142994,143012,143032,143036,143040,143046,143070],{"__ignoreMap":63},[68,142983,142984],{"class":70,"line":71},[68,142985,142861],{"class":393},[68,142987,142988,142990,142992],{"class":70,"line":92},[68,142989,142866],{"class":331},[68,142991,142869],{"class":5421},[68,142993,15777],{"class":335},[68,142995,142996,142998,143000,143002,143004,143006,143008,143010],{"class":70,"line":1387},[68,142997,142876],{"class":74},[68,142999,80008],{"class":335},[68,143001,48335],{"class":82},[68,143003,51638],{"class":335},[68,143005,142885],{"class":82},[68,143007,336],{"class":335},[68,143009,525],{"class":82},[68,143011,142892],{"class":335},[68,143013,143014,143016,143018,143020,143022,143024,143026,143028,143030],{"class":70,"line":1402},[68,143015,142897],{"class":74},[68,143017,80008],{"class":335},[68,143019,48335],{"class":82},[68,143021,51638],{"class":335},[68,143023,142885],{"class":82},[68,143025,336],{"class":335},[68,143027,644],{"class":82},[68,143029,51693],{"class":331},[68,143031,142892],{"class":335},[68,143033,143034],{"class":70,"line":1408},[68,143035,1772],{"class":335},[68,143037,143038],{"class":70,"line":1422},[68,143039,142922],{"class":393},[68,143041,143042,143044],{"class":70,"line":1428},[68,143043,51812],{"class":51501},[68,143045,15777],{"class":335},[68,143047,143048,143050,143052,143054,143056,143058,143060,143062,143064,143066,143068],{"class":70,"line":1519},[68,143049,142933],{"class":82},[68,143051,51638],{"class":335},[68,143053,135434],{"class":82},[68,143055,25322],{"class":82},[68,143057,1028],{"class":331},[68,143059,78881],{"class":82},[68,143061,4299],{"class":82},[68,143063,1028],{"class":331},[68,143065,142950],{"class":82},[68,143067,142953],{"class":82},[68,143069,1498],{"class":335},[68,143071,143072],{"class":70,"line":1525},[68,143073,1772],{"class":335},[19,143075,143076],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[301,143078,143080],{"id":143079},"_1823-知识点回顾","18.2.3 知识点回顾",[58,143082,143083],{"className":126748,"code":128917,"language":126750,"meta":63,"style":63},[65,143084,143085,143091,143101],{"__ignoreMap":63},[68,143086,143087,143089],{"class":70,"line":71},[68,143088,51812],{"class":51501},[68,143090,15777],{"class":335},[68,143092,143093,143095,143097,143099],{"class":70,"line":92},[68,143094,128930],{"class":82},[68,143096,51638],{"class":335},[68,143098,61937],{"class":82},[68,143100,1498],{"class":335},[68,143102,143103],{"class":70,"line":1387},[68,143104,1772],{"class":335},[14,143106,143108],{"id":143107},"_183-3d-转换","18.3 3D 转换",[19,143110,143111],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[301,143113,143115],{"id":143114},"_1831-坐标轴认识","18.3.1 坐标轴认识",[48,143117],{"style":50,"src":143118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[301,143120,143122],{"id":143121},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[48,143124],{"style":50,"src":143125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143127,143128],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143130,143131],{},"translate3d的效果需要搭配透视perspective来使用",[48,143133],{"style":50,"src":143134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[301,143136,143138],{"id":143137},"_1833-透视-perspective","18.3.3 透视 perspective",[48,143140],{"style":50,"src":143141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143143,143144],{},"透视写在父盒子上，单位为像素",[301,143146,143148],{"id":143147},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22203,143150,143152],{"id":143151},"_18341-分开解释","18.3.4.1 分开解释",[48,143154],{"style":50,"src":143155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[48,143157],{"style":50,"src":143158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[48,143160],{"style":50,"src":143161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143163,143164],{},"总结来说就是左手原则",[22203,143166,143168],{"id":143167},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[48,143170],{"style":50,"src":143171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[301,143173,143175],{"id":143174},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[48,143177],{"style":50,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[48,143180],{"style":50,"src":143181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[58,143183,143185],{"className":126748,"code":143184,"language":126750,"meta":63,"style":63},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[65,143186,143187,143193,143206,143223],{"__ignoreMap":63},[68,143188,143189,143191],{"class":70,"line":71},[68,143190,51812],{"class":51501},[68,143192,15777],{"class":335},[68,143194,143195,143198,143200,143202,143204],{"class":70,"line":92},[68,143196,143197],{"class":82},"  perspective",[68,143199,51638],{"class":335},[68,143201,65275],{"class":82},[68,143203,51693],{"class":331},[68,143205,1498],{"class":335},[68,143207,143208,143210,143212,143215,143217,143219,143221],{"class":70,"line":1387},[68,143209,136732],{"class":82},[68,143211,51638],{"class":335},[68,143213,143214],{"class":82},"rotateX",[68,143216,336],{"class":335},[68,143218,862],{"class":82},[68,143220,142575],{"class":331},[68,143222,2925],{"class":335},[68,143224,143225],{"class":70,"line":1402},[68,143226,1772],{"class":335},[301,143228,143230],{"id":143229},"_1836-案例","18.3.6 案例",[22203,143232,143234],{"id":143233},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[48,143236],{"style":50,"src":143237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[48,143239],{"style":50,"src":143240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[48,143242],{"style":50,"src":143243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[58,143245,143247],{"className":126748,"code":143246,"language":126750,"meta":63,"style":63},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[65,143248,143249,143254,143260,143272],{"__ignoreMap":63},[68,143250,143251],{"class":70,"line":71},[68,143252,143253],{"class":393},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[68,143255,143256,143258],{"class":70,"line":92},[68,143257,133745],{"class":74},[68,143259,15777],{"class":335},[68,143261,143262,143264,143266,143268,143270],{"class":70,"line":1387},[68,143263,143197],{"class":82},[68,143265,51638],{"class":335},[68,143267,65275],{"class":82},[68,143269,51693],{"class":331},[68,143271,1498],{"class":335},[68,143273,143274],{"class":70,"line":1402},[68,143275,1772],{"class":335},[22203,143277,143279],{"id":143278},"_18362-3d导航栏","18.3.6.2 3D导航栏",[48,143281],{"style":50,"src":143282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[58,143284,143285],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,143286,143287,143291,143305,143309],{"__ignoreMap":63},[68,143288,143289],{"class":70,"line":71},[68,143290,130859],{"class":393},[68,143292,143293,143295,143297,143299,143301,143303],{"class":70,"line":92},[68,143294,1243],{"class":335},[68,143296,51812],{"class":51501},[68,143298,53687],{"class":74},[68,143300,381],{"class":335},[68,143302,130872],{"class":78},[68,143304,51508],{"class":335},[68,143306,143307],{"class":70,"line":1387},[68,143308,130879],{"class":335},[68,143310,143311,143313,143315],{"class":70,"line":1402},[68,143312,51986],{"class":335},[68,143314,51812],{"class":51501},[68,143316,51508],{"class":335},[22203,143318,143320],{"id":143319},"_18363-旋转木马","18.3.6.3 旋转木马",[48,143322],{"style":50,"src":143323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[58,143325,143326],{"className":126748,"code":142551,"language":126750,"meta":63,"style":63},[65,143327,143328,143334,143350],{"__ignoreMap":63},[68,143329,143330,143332],{"class":70,"line":71},[68,143331,51812],{"class":51501},[68,143333,15777],{"class":335},[68,143335,143336,143338,143340,143342,143344,143346,143348],{"class":70,"line":92},[68,143337,136732],{"class":82},[68,143339,51638],{"class":335},[68,143341,142568],{"class":82},[68,143343,336],{"class":335},[68,143345,862],{"class":82},[68,143347,142575],{"class":331},[68,143349,2925],{"class":335},[68,143351,143352],{"class":70,"line":1387},[68,143353,1772],{"class":335},[250,143355,143356],{},"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":63,"searchDepth":92,"depth":92,"links":143358},[143359,143366],{"id":142454,"depth":92,"text":142455,"children":143360},[143361,143362,143363,143364,143365],{"id":142478,"depth":1387,"text":142479},{"id":142533,"depth":1387,"text":142534},{"id":142658,"depth":1387,"text":142659},{"id":142761,"depth":1387,"text":142762},{"id":143079,"depth":1387,"text":143080},{"id":143107,"depth":92,"text":143108,"children":143367},[143368,143369,143370,143371,143372,143373],{"id":143114,"depth":1387,"text":143115},{"id":143121,"depth":1387,"text":143122},{"id":143137,"depth":1387,"text":143138},{"id":143147,"depth":1387,"text":143148},{"id":143174,"depth":1387,"text":143175},{"id":143229,"depth":1387,"text":143230},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142446,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143380,"title":143381,"body":143382,"description":257,"extension":258,"meta":143585,"navigation":260,"path":143586,"seo":143587,"stem":143588,"__hash__":143589},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143383,"toc":143574},[143384,143387,143391,143394,143397,143401,143404,143407,143410,143414,143417,143421,143424,143428,143431,143435,143449,143453,143478,143481,143484,143501,143505,143509,143512,143515,143519,143522,143525,143543,143547,143550,143564,143568,143571],[10,143385,143381],{"id":143386},"_19-移动端基础-前缀现状与视口",[14,143388,143390],{"id":143389},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[48,143392],{"style":50,"src":143393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143395,143396],{},"意思就是加个前缀，增加兼容性",[14,143398,143400],{"id":143399},"_192-移动端现状认识","19.2 移动端现状认识",[48,143402],{"style":50,"src":143403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143405,143406],{},"调试方法：",[48,143408],{"style":50,"src":143409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143411,143413],{"id":143412},"_193-视口","19.3 视口",[19,143415,143416],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[301,143418,143420],{"id":143419},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[48,143422],{"style":50,"src":143423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[301,143425,143427],{"id":143426},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[48,143429],{"style":50,"src":143430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[301,143432,143434],{"id":143433},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[42,143436,143437,143440,143443,143446],{},[26,143438,143439],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[26,143441,143442],{},"理想视口，对设备来讲，是最理想的视口尺寸",[26,143444,143445],{},"需要手动添写meta视口标签通知浏览器操作",[26,143447,143448],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[301,143450,143452],{"id":143451},"_1934-meta视口标签","19.3.4 meta视口标签",[58,143454,143456],{"className":127495,"code":143455,"language":127497,"meta":63,"style":63},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[65,143457,143458],{"__ignoreMap":63},[68,143459,143460,143462,143464,143466,143468,143470,143472,143474,143476],{"class":70,"line":71},[68,143461,1243],{"class":335},[68,143463,51545],{"class":51501},[68,143465,15125],{"class":74},[68,143467,381],{"class":335},[68,143469,51592],{"class":78},[68,143471,51572],{"class":74},[68,143473,381],{"class":335},[68,143475,51599],{"class":78},[68,143477,51508],{"class":335},[48,143479],{"style":50,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143482,143483],{},"标准视口设置：",[23,143485,143486,143489,143492,143495,143498],{},[26,143487,143488],{},"视口宽度和设备保持一致",[26,143490,143491],{},"视口的默认缩放比例1.0",[26,143493,143494],{},"不允许用户自行缩放",[26,143496,143497],{},"最大允许的缩放比例1.0",[26,143499,143500],{},"最小允许的缩放比例1.0",[301,143502,143504],{"id":143503},"_1935-二倍图","19.3.5 二倍图",[22203,143506,143508],{"id":143507},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[48,143510],{"style":50,"src":143511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[48,143513],{"style":50,"src":143514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22203,143516,143518],{"id":143517},"_19352-多倍图","19.3.5.2 多倍图",[48,143520],{"style":50,"src":143521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143523,143524],{},"二倍图法，代码如下：",[58,143526,143528],{"className":126748,"code":143527,"language":126750,"meta":63,"style":63},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[65,143529,143530,143535],{"__ignoreMap":63},[68,143531,143532],{"class":70,"line":71},[68,143533,143534],{"class":393},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[68,143536,143537,143540],{"class":70,"line":92},[68,143538,143539],{"class":51501},"background-size",[68,143541,143542],{"class":335},": 50% 50%;\n",[22203,143544,143546],{"id":143545},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[48,143548],{"style":50,"src":143549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[23,143551,143552,143555,143558,143561],{},[26,143553,143554],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[26,143556,143557],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[26,143559,143560],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[26,143562,143563],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22203,143565,143567],{"id":143566},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[48,143569],{"style":50,"src":143570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[250,143572,143573],{},"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":63,"searchDepth":92,"depth":92,"links":143575},[143576,143577,143578],{"id":143389,"depth":92,"text":143390},{"id":143399,"depth":92,"text":143400},{"id":143412,"depth":92,"text":143413,"children":143579},[143580,143581,143582,143583,143584],{"id":143419,"depth":1387,"text":143420},{"id":143426,"depth":1387,"text":143427},{"id":143433,"depth":1387,"text":143434},{"id":143451,"depth":1387,"text":143452},{"id":143503,"depth":1387,"text":143504},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143381,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143591,"title":143592,"body":143593,"description":257,"extension":258,"meta":144470,"navigation":260,"path":144471,"seo":144472,"stem":144473,"__hash__":144474},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143594,"toc":144454},[143595,143598,143602,143609,143612,143619,143622,143627,143630,143634,143638,143645,143648,143651,143655,143658,143661,143664,143667,143670,143674,143677,143681,143683,143686,143689,143692,143695,143697,143700,143702,143732,143734,143764,143768,143771,143775,143778,143795,143798,143801,143877,143879,143882,143885,143888,143891,143893,143896,143899,143903,143925,143928,143931,143935,143938,143944,143947,143951,143954,143957,143961,143964,143967,143970,143974,143977,143980,143983,143986,143990,143993,143997,144004,144007,144010,144013,144016,144026,144029,144032,144039,144042,144046,144049,144052,144056,144059,144062,144065,144110,144113,144116,144119,144121,144250,144252,144290,144293,144296,144298,144416,144418,144452],[10,143596,143592],{"id":143597},"_20-移动端布局实战上篇",[14,143599,143601],{"id":143600},"_201-移动端主流方案","20.1 移动端主流方案",[23,143603,143604],{},[26,143605,143606],{},[483,143607,143608],{},"单独移动端页面（主流）",[48,143610],{"style":50,"src":143611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[23,143613,143614],{"start":92},[26,143615,143616],{},[483,143617,143618],{},"响应式兼容PC移动端",[48,143620],{"style":50,"src":143621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[23,143623,143624],{"start":1387},[26,143625,143626],{},"两种页面选型布局方式",[48,143628],{"style":50,"src":143629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143631,143633],{"id":143632},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[301,143635,143637],{"id":143636},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143639,143640,143641],{},"官网地址： ",[30,143642,143643],{"href":143643,"rel":143644},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[34],[48,143646],{"style":50,"src":143647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[48,143649],{"style":50,"src":143650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[301,143652,143654],{"id":143653},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[48,143656],{"style":50,"src":143657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[48,143659],{"style":50,"src":143660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143662,143663],{},"去除高亮：",[19,143665,143666],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143668,143669],{},"-webkit- tap-highlight-color: transparent;",[14,143671,143673],{"id":143672},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[48,143675],{"style":50,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143678,143680],{"id":143679},"_204-流式布局案例","20.4 流式布局案例",[19,143682,365],{},[19,143684,143685],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143687,143688],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143690,143691],{},"图片格式：",[48,143693],{"style":50,"src":143694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143696,135791],{},[48,143698],{"style":50,"src":143699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143701,140118],{},[58,143703,143704],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,143705,143706],{"__ignoreMap":63},[68,143707,143708,143710,143712,143714,143716,143718,143720,143722,143724,143726,143728,143730],{"class":70,"line":71},[68,143709,1243],{"class":335},[68,143711,48],{"class":51501},[68,143713,55440],{"class":74},[68,143715,381],{"class":335},[68,143717,134265],{"class":78},[68,143719,55448],{"class":74},[68,143721,381],{"class":335},[68,143723,134272],{"class":78},[68,143725,134275],{"class":74},[68,143727,381],{"class":335},[68,143729,134280],{"class":78},[68,143731,51508],{"class":335},[19,143733,140207],{},[58,143735,143736],{"className":127495,"code":134250,"language":127497,"meta":63,"style":63},[65,143737,143738],{"__ignoreMap":63},[68,143739,143740,143742,143744,143746,143748,143750,143752,143754,143756,143758,143760,143762],{"class":70,"line":71},[68,143741,1243],{"class":335},[68,143743,48],{"class":51501},[68,143745,55440],{"class":74},[68,143747,381],{"class":335},[68,143749,134265],{"class":78},[68,143751,55448],{"class":74},[68,143753,381],{"class":335},[68,143755,134272],{"class":78},[68,143757,134275],{"class":74},[68,143759,381],{"class":335},[68,143761,134280],{"class":78},[68,143763,51508],{"class":335},[14,143765,143767],{"id":143766},"_205-flex布局","20.5 flex布局",[48,143769],{"style":50,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[301,143772,143774],{"id":143773},"_2051-布局原理","20.5.1 布局原理",[19,143776,143777],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[42,143779,143780,143783,143786,143789,143792],{},[26,143781,143782],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[26,143784,143785],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[26,143787,143788],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[26,143790,143791],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[26,143793,143794],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143796,143797],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143799,143800],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[58,143802,143804],{"className":126748,"code":143803,"language":126750,"meta":63,"style":63},"\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",[65,143805,143806,143811,143818,143828,143840,143851,143862,143873],{"__ignoreMap":63},[68,143807,143808],{"class":70,"line":71},[68,143809,143810],{"class":393},"\u002F* Flex 弹性布局 *\u002F\n",[68,143812,143813,143816],{"class":70,"line":92},[68,143814,143815],{"class":74},".container",[68,143817,15777],{"class":335},[68,143819,143820,143822,143824,143826],{"class":70,"line":1387},[68,143821,128364],{"class":82},[68,143823,51638],{"class":335},[68,143825,51678],{"class":82},[68,143827,1498],{"class":335},[68,143829,143830,143833,143835,143838],{"class":70,"line":1402},[68,143831,143832],{"class":82},"  flex-direction",[68,143834,51638],{"class":335},[68,143836,143837],{"class":82},"row",[68,143839,1498],{"class":335},[68,143841,143842,143845,143847,143849],{"class":70,"line":1408},[68,143843,143844],{"class":82},"  justify-content",[68,143846,51638],{"class":335},[68,143848,51869],{"class":82},[68,143850,1498],{"class":335},[68,143852,143853,143856,143858,143860],{"class":70,"line":1422},[68,143854,143855],{"class":82},"  align-items",[68,143857,51638],{"class":335},[68,143859,51793],{"class":82},[68,143861,1498],{"class":335},[68,143863,143864,143867,143869,143871],{"class":70,"line":1428},[68,143865,143866],{"class":82},"  flex-wrap",[68,143868,51638],{"class":335},[68,143870,78811],{"class":82},[68,143872,1498],{"class":335},[68,143874,143875],{"class":70,"line":1519},[68,143876,1772],{"class":335},[19,143878,70654],{},[19,143880,143881],{},".form-item .male-label {",[19,143883,143884],{},"   margin-right: 20px;",[19,143886,143887],{},"   display: inline-flex;",[19,143889,143890],{},"   align-items: center;",[19,143892,1279],{},[48,143894],{"style":50,"src":143895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[48,143897],{"style":50,"src":143898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[301,143900,143902],{"id":143901},"_2052-常见父项属性","20.5.2 常见父项属性",[23,143904,143905,143908,143911,143914,143917,143920,143923],{},[26,143906,143907],{},"flex-direction：设置主轴的方向",[26,143909,143910],{},"justify-content：设置主轴上的子元素排列方式",[26,143912,143913],{},"flex-wrap：设置子元素是否换行",[26,143915,143916],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[26,143918,143919],{},"align-items：设置侧轴上的子元素排列方式（单行）",[26,143921,143922],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[26,143924,143907],{},[48,143926],{"style":50,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[48,143929],{"style":50,"src":143930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[23,143932,143933],{"start":92},[26,143934,143910],{},[48,143936],{"style":50,"src":143937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143939,143940,143943],{},[65,143941,143942],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143945,143946],{},"跟着主轴走",[23,143948,143949],{"start":1387},[26,143950,143913],{},[48,143952],{"style":50,"src":143953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143955,143956],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[23,143958,143959],{"start":1402},[26,143960,143916],{},[48,143962],{"style":50,"src":143963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143965,143966],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143968,143969],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[23,143971,143972],{"start":1408},[26,143973,143919],{},[48,143975],{"style":50,"src":143976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143978,143979],{},"align-items与align-content之间的区别：",[19,143981,143982],{},"单找items，多找content",[48,143984],{"style":50,"src":143985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[23,143987,143988],{"start":1422},[26,143989,143922],{},[48,143991],{"style":50,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[301,143994,143996],{"id":143995},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[23,143998,143999],{},[26,144000,144001],{},[483,144002,144003],{},"flex 属性",[19,144005,144006],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[48,144008],{"style":50,"src":144009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144011,144012],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144014,144015],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[23,144017,144018],{"start":92},[26,144019,144020,14000,144023],{},[483,144021,144022],{},"align-self",[483,144024,144025],{},"控制子项自己在侧轴上的排列方式",[48,144027],{"style":50,"src":144028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144030,144031],{},"单个子盒子在父盒子侧轴上的排列方式",[23,144033,144034],{"start":1387},[26,144035,144036,144038],{},[483,144037,95498],{}," 属性定义项目的排列顺序",[48,144040],{"style":50,"src":144041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[301,144043,144045],{"id":144044},"_2054-背景线性渐变","20.5.4 背景线性渐变",[48,144047],{"style":50,"src":144048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144050,144051],{},"必须要添加浏览器的私有前缀",[301,144053,144055],{"id":144054},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144057,144058],{},"学到最重要的知识：",[19,144060,144061],{},"flex处理这样的布局思路",[48,144063],{"style":50,"src":144064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[58,144066,144068],{"className":126748,"code":144067,"language":126750,"meta":63,"style":63},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[65,144069,144070,144076,144086,144096,144106],{"__ignoreMap":63},[68,144071,144072,144074],{"class":70,"line":71},[68,144073,143815],{"class":74},[68,144075,15777],{"class":335},[68,144077,144078,144080,144082,144084],{"class":70,"line":92},[68,144079,128364],{"class":82},[68,144081,51638],{"class":335},[68,144083,51678],{"class":82},[68,144085,1498],{"class":335},[68,144087,144088,144090,144092,144094],{"class":70,"line":1387},[68,144089,143844],{"class":82},[68,144091,51638],{"class":335},[68,144093,51793],{"class":82},[68,144095,1498],{"class":335},[68,144097,144098,144100,144102,144104],{"class":70,"line":1402},[68,144099,143855],{"class":82},[68,144101,51638],{"class":335},[68,144103,51793],{"class":82},[68,144105,1498],{"class":335},[68,144107,144108],{"class":70,"line":1408},[68,144109,1772],{"class":335},[19,144111,144112],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144114,144115],{},"使用属性选择器",[48,144117],{"style":50,"src":144118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144120,69090],{},[58,144122,144124],{"className":127495,"code":144123,"language":127497,"meta":63,"style":63},"\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",[65,144125,144126,144131,144145,144150,144170,144175,144194,144199,144218,144223,144242],{"__ignoreMap":63},[68,144127,144128],{"class":70,"line":71},[68,144129,144130],{"class":393},"\u003C!-- 携程网移动端案例结构 -->\n",[68,144132,144133,144135,144137,144139,144141,144143],{"class":70,"line":92},[68,144134,1243],{"class":335},[68,144136,51812],{"class":51501},[68,144138,53687],{"class":74},[68,144140,381],{"class":335},[68,144142,92524],{"class":78},[68,144144,51508],{"class":335},[68,144146,144147],{"class":70,"line":1387},[68,144148,144149],{"class":393},"  \u003C!-- 搜索栏 -->\n",[68,144151,144152,144154,144156,144158,144160,144163,144166,144168],{"class":70,"line":1402},[68,144153,52345],{"class":335},[68,144155,51812],{"class":51501},[68,144157,53687],{"class":74},[68,144159,381],{"class":335},[68,144161,144162],{"class":78},"\"search-index\"",[68,144164,144165],{"class":335},">...\u003C\u002F",[68,144167,51812],{"class":51501},[68,144169,51508],{"class":335},[68,144171,144172],{"class":70,"line":1408},[68,144173,144174],{"class":393},"  \u003C!-- 焦点图 -->\n",[68,144176,144177,144179,144181,144183,144185,144188,144190,144192],{"class":70,"line":1422},[68,144178,52345],{"class":335},[68,144180,51812],{"class":51501},[68,144182,53687],{"class":74},[68,144184,381],{"class":335},[68,144186,144187],{"class":78},"\"focus\"",[68,144189,144165],{"class":335},[68,144191,51812],{"class":51501},[68,144193,51508],{"class":335},[68,144195,144196],{"class":70,"line":1428},[68,144197,144198],{"class":393},"  \u003C!-- 主导航 -->\n",[68,144200,144201,144203,144205,144207,144209,144212,144214,144216],{"class":70,"line":1519},[68,144202,52345],{"class":335},[68,144204,51812],{"class":51501},[68,144206,53687],{"class":74},[68,144208,381],{"class":335},[68,144210,144211],{"class":78},"\"local-nav\"",[68,144213,144165],{"class":335},[68,144215,51812],{"class":51501},[68,144217,51508],{"class":335},[68,144219,144220],{"class":70,"line":1525},[68,144221,144222],{"class":393},"  \u003C!-- 子导航 -->\n",[68,144224,144225,144227,144229,144231,144233,144236,144238,144240],{"class":70,"line":1537},[68,144226,52345],{"class":335},[68,144228,51812],{"class":51501},[68,144230,53687],{"class":74},[68,144232,381],{"class":335},[68,144234,144235],{"class":78},"\"nav-common\"",[68,144237,144165],{"class":335},[68,144239,51812],{"class":51501},[68,144241,51508],{"class":335},[68,144243,144244,144246,144248],{"class":70,"line":1819},[68,144245,51986],{"class":335},[68,144247,51812],{"class":51501},[68,144249,51508],{"class":335},[19,144251,70654],{},[58,144253,144254],{"className":126748,"code":137200,"language":126750,"meta":63,"style":63},[65,144255,144256,144270,144286],{"__ignoreMap":63},[68,144257,144258,144260,144262,144264,144266,144268],{"class":70,"line":71},[68,144259,54022],{"class":51501},[68,144261,1223],{"class":335},[68,144263,103307],{"class":74},[68,144265,381],{"class":331},[68,144267,62900],{"class":78},[68,144269,137217],{"class":335},[68,144271,144272,144274,144276,144278,144280,144282,144284],{"class":70,"line":92},[68,144273,71097],{"class":82},[68,144275,51638],{"class":335},[68,144277,551],{"class":82},[68,144279,51693],{"class":331},[68,144281,51722],{"class":82},[68,144283,130328],{"class":82},[68,144285,1498],{"class":335},[68,144287,144288],{"class":70,"line":1387},[68,144289,1772],{"class":335},[19,144291,144292],{},"总代码和效果展示：",[48,144294],{"style":50,"src":144295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144297,69090],{},[58,144299,144300],{"className":127495,"code":144123,"language":127497,"meta":63,"style":63},[65,144301,144302,144306,144320,144324,144342,144346,144364,144368,144386,144390,144408],{"__ignoreMap":63},[68,144303,144304],{"class":70,"line":71},[68,144305,144130],{"class":393},[68,144307,144308,144310,144312,144314,144316,144318],{"class":70,"line":92},[68,144309,1243],{"class":335},[68,144311,51812],{"class":51501},[68,144313,53687],{"class":74},[68,144315,381],{"class":335},[68,144317,92524],{"class":78},[68,144319,51508],{"class":335},[68,144321,144322],{"class":70,"line":1387},[68,144323,144149],{"class":393},[68,144325,144326,144328,144330,144332,144334,144336,144338,144340],{"class":70,"line":1402},[68,144327,52345],{"class":335},[68,144329,51812],{"class":51501},[68,144331,53687],{"class":74},[68,144333,381],{"class":335},[68,144335,144162],{"class":78},[68,144337,144165],{"class":335},[68,144339,51812],{"class":51501},[68,144341,51508],{"class":335},[68,144343,144344],{"class":70,"line":1408},[68,144345,144174],{"class":393},[68,144347,144348,144350,144352,144354,144356,144358,144360,144362],{"class":70,"line":1422},[68,144349,52345],{"class":335},[68,144351,51812],{"class":51501},[68,144353,53687],{"class":74},[68,144355,381],{"class":335},[68,144357,144187],{"class":78},[68,144359,144165],{"class":335},[68,144361,51812],{"class":51501},[68,144363,51508],{"class":335},[68,144365,144366],{"class":70,"line":1428},[68,144367,144198],{"class":393},[68,144369,144370,144372,144374,144376,144378,144380,144382,144384],{"class":70,"line":1519},[68,144371,52345],{"class":335},[68,144373,51812],{"class":51501},[68,144375,53687],{"class":74},[68,144377,381],{"class":335},[68,144379,144211],{"class":78},[68,144381,144165],{"class":335},[68,144383,51812],{"class":51501},[68,144385,51508],{"class":335},[68,144387,144388],{"class":70,"line":1525},[68,144389,144222],{"class":393},[68,144391,144392,144394,144396,144398,144400,144402,144404,144406],{"class":70,"line":1537},[68,144393,52345],{"class":335},[68,144395,51812],{"class":51501},[68,144397,53687],{"class":74},[68,144399,381],{"class":335},[68,144401,144235],{"class":78},[68,144403,144165],{"class":335},[68,144405,51812],{"class":51501},[68,144407,51508],{"class":335},[68,144409,144410,144412,144414],{"class":70,"line":1819},[68,144411,51986],{"class":335},[68,144413,51812],{"class":51501},[68,144415,51508],{"class":335},[19,144417,70654],{},[58,144419,144420],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,144421,144422,144426,144440,144444],{"__ignoreMap":63},[68,144423,144424],{"class":70,"line":71},[68,144425,130859],{"class":393},[68,144427,144428,144430,144432,144434,144436,144438],{"class":70,"line":92},[68,144429,1243],{"class":335},[68,144431,51812],{"class":51501},[68,144433,53687],{"class":74},[68,144435,381],{"class":335},[68,144437,130872],{"class":78},[68,144439,51508],{"class":335},[68,144441,144442],{"class":70,"line":1387},[68,144443,130879],{"class":335},[68,144445,144446,144448,144450],{"class":70,"line":1402},[68,144447,51986],{"class":335},[68,144449,51812],{"class":51501},[68,144451,51508],{"class":335},[250,144453,138149],{},{"title":63,"searchDepth":92,"depth":92,"links":144455},[144456,144457,144461,144462,144463],{"id":143600,"depth":92,"text":143601},{"id":143632,"depth":92,"text":143633,"children":144458},[144459,144460],{"id":143636,"depth":1387,"text":143637},{"id":143653,"depth":1387,"text":143654},{"id":143672,"depth":92,"text":143673},{"id":143679,"depth":92,"text":143680},{"id":143766,"depth":92,"text":143767,"children":144464},[144465,144466,144467,144468,144469],{"id":143773,"depth":1387,"text":143774},{"id":143901,"depth":1387,"text":143902},{"id":143995,"depth":1387,"text":143996},{"id":144044,"depth":1387,"text":144045},{"id":144054,"depth":1387,"text":144055},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143592,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144476,"title":144477,"body":144478,"description":257,"extension":258,"meta":145705,"navigation":260,"path":145706,"seo":145707,"stem":145708,"__hash__":145709},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144479,"toc":145683},[144480,144483,144487,144491,144494,144497,144501,144506,144509,144512,144515,144518,144521,144578,144581,144586,144589,144592,144596,144607,144611,144614,144617,144624,144629,144633,144636,144642,144645,144649,144652,144659,144662,144665,144672,144675,144682,144685,144688,144695,144698,144701,144703,144720,144724,144727,144730,144733,144737,144740,144743,144746,144749,144752,144755,144757,144760,144763,144825,144828,144938,144945,144951,144954,144957,144961,144964,144968,144973,144976,144983,144986,144992,144997,145000,145003,145006,145009,145012,145015,145018,145021,145077,145079,145105,145109,145112,145115,145118,145126,145129,145132,145136,145192,145195,145199,145205,145216,145219,145224,145227,145230,145236,145239,145242,145245,145248,145251,145254,145257,145260,145285,145291,145294,145297,145300,145303,145306,145309,145314,145317,145320,145323,145331,145334,145341,145344,145347,145349,145373,145375,145378,145381,145384,145387,145390,145393,145396,145430,145433,145436,145470,145477,145480,145483,145486,145489,145492,145495,145502,145505,145508,145511,145514,145521,145524,145527,145534,145537,145540,145544,145547,145550,145553,145556,145559,145562,145565,145568,145570,145594,145596,145620,145624,145635,145638,145641,145644,145647,145650,145653,145656,145659,145662,145665,145668,145671,145674,145677,145680],[10,144481,144477],{"id":144482},"_21-移动端布局实战下篇",[14,144484,144486],{"id":144485},"_211-rem适配布局","21.1 rem适配布局",[301,144488,144490],{"id":144489},"_2111-rem单位","21.1.1 rem单位",[48,144492],{"style":50,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144495,144496],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[301,144498,144500],{"id":144499},"_2112-媒体查询","21.1.2 媒体查询",[23,144502,144503],{},[26,144504,144505],{},"参数介绍",[48,144507],{"style":50,"src":144508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[48,144510],{"style":50,"src":144511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[48,144513],{"style":50,"src":144514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[48,144516],{"style":50,"src":144517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[48,144519],{"style":50,"src":144520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[58,144522,144524],{"className":126748,"code":144523,"language":126750,"meta":63,"style":63},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[65,144525,144526,144531,144550,144557,144570,144574],{"__ignoreMap":63},[68,144527,144528],{"class":70,"line":71},[68,144529,144530],{"class":393},"\u002F* 媒体查询 *\u002F\n",[68,144532,144533,144536,144538,144541,144543,144546,144548],{"class":70,"line":92},[68,144534,144535],{"class":331},"@media",[68,144537,1865],{"class":335},[68,144539,144540],{"class":82},"max-width",[68,144542,51638],{"class":335},[68,144544,144545],{"class":82},"768",[68,144547,51693],{"class":331},[68,144549,12647],{"class":335},[68,144551,144552,144555],{"class":70,"line":1387},[68,144553,144554],{"class":74},"  .container",[68,144556,15777],{"class":335},[68,144558,144559,144562,144564,144566,144568],{"class":70,"line":1402},[68,144560,144561],{"class":82},"    width",[68,144563,51638],{"class":335},[68,144565,644],{"class":82},[68,144567,661],{"class":331},[68,144569,1498],{"class":335},[68,144571,144572],{"class":70,"line":1408},[68,144573,127544],{"class":335},[68,144575,144576],{"class":70,"line":1422},[68,144577,1772],{"class":335},[19,144579,144580],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[23,144582,144583],{"start":92},[26,144584,144585],{},"引入资源",[48,144587],{"style":50,"src":144588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144590,144591],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[301,144593,144595],{"id":144594},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[42,144597,144598,144601,144604],{},[26,144599,144600],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[26,144602,144603],{},"媒体查询可以根据不同设备宽度来修改样式",[26,144605,144606],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144608,144610],{"id":144609},"_212-less基础","21.2 Less基础",[19,144612,144613],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144615,144616],{},"Less可以解决该问题，它是css的扩展语言",[19,144618,144619,144620],{},"Less中文网址： ",[30,144621,144622],{"href":144622,"rel":144623},"http:\u002F\u002Flesscss.cn\u002F",[34],[19,144625,144626],{},[483,144627,144628],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[301,144630,144632],{"id":144631},"_2121-less安装","21.2.1 less安装",[19,144634,144635],{},"如果使用vscode，则无需进行下方安装步骤",[19,144637,144638],{},[30,144639,144640],{"href":144640,"rel":144641},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[34],[48,144643],{"style":50,"src":144644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[301,144646,144648],{"id":144647},"_2122-less使用","21.2.2 less使用",[19,144650,144651],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[23,144653,144654],{},[26,144655,144656],{},[483,144657,144658],{},"Less 变量",[48,144660],{"style":50,"src":144661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[48,144663],{"style":50,"src":144664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[23,144666,144667],{"start":92},[26,144668,144669],{},[483,144670,144671],{},"Less 编译",[48,144673],{"style":50,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[23,144676,144677],{"start":1387},[26,144678,144679],{},[483,144680,144681],{},"Less 嵌套",[48,144683],{"style":50,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[48,144686],{"style":50,"src":144687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[23,144689,144690],{"start":1402},[26,144691,144692],{},[483,144693,144694],{},"Less 运算",[48,144696],{"style":50,"src":144697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144699,144700],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144702,365],{},[42,144704,144705,144708,144711,144714,144717],{},[26,144706,144707],{},"乘号（*）和除号（\u002F）的写法",[26,144709,144710],{},"运算符中间左右有个空格隔开 1px + 5",[26,144712,144713],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[26,144715,144716],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[26,144718,144719],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144721,144723],{"id":144722},"_213-rem-适配方案","21.3 rem 适配方案",[19,144725,144726],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144728,144729],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[48,144731],{"style":50,"src":144732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[301,144734,144736],{"id":144735},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144738,144739],{},"rem + 媒体查询 + less 技术",[48,144741],{"style":50,"src":144742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144744,144745],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144747,144748],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[48,144750],{"style":50,"src":144751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144753,144754],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144756,14838],{},[48,144758],{"style":50,"src":144759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144761,144762],{},"index.html:",[58,144764,144766],{"className":126748,"code":144765,"language":126750,"meta":63,"style":63},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[65,144767,144768,144773,144779,144795,144799,144805,144821],{"__ignoreMap":63},[68,144769,144770],{"class":70,"line":71},[68,144771,144772],{"class":393},"\u002F* rem 适配方案 *\u002F\n",[68,144774,144775,144777],{"class":70,"line":92},[68,144776,50836],{"class":51501},[68,144778,15777],{"class":335},[68,144780,144781,144783,144785,144788,144790,144792],{"class":70,"line":1387},[68,144782,70827],{"class":82},[68,144784,51638],{"class":335},[68,144786,144787],{"class":82},"62.5",[68,144789,661],{"class":331},[68,144791,130611],{"class":335},[68,144793,144794],{"class":393},"\u002F* 1rem = 10px *\u002F\n",[68,144796,144797],{"class":70,"line":1402},[68,144798,1772],{"class":335},[68,144800,144801,144803],{"class":70,"line":1408},[68,144802,130596],{"class":74},[68,144804,15777],{"class":335},[68,144806,144807,144809,144811,144813,144816,144818],{"class":70,"line":1422},[68,144808,70769],{"class":82},[68,144810,51638],{"class":335},[68,144812,779],{"class":82},[68,144814,144815],{"class":331},"rem",[68,144817,130611],{"class":335},[68,144819,144820],{"class":393},"\u002F* 100px *\u002F\n",[68,144822,144823],{"class":70,"line":1428},[68,144824,1772],{"class":335},[19,144826,144827],{},"common.less",[58,144829,144831],{"className":126748,"code":144830,"language":126750,"meta":63,"style":63},"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",[65,144832,144833,144839,144854,144858,144864,144878,144882,144886,144890,144896,144910,144914,144920,144934],{"__ignoreMap":63},[68,144834,144835,144837],{"class":70,"line":71},[68,144836,50836],{"class":51501},[68,144838,15777],{"class":335},[68,144840,144841,144843,144845,144847,144849,144851],{"class":70,"line":92},[68,144842,70827],{"class":82},[68,144844,51638],{"class":335},[68,144846,144787],{"class":82},[68,144848,661],{"class":331},[68,144850,26271],{"class":335},[68,144852,144853],{"class":393},"\u002F* 10px *\u002F\n",[68,144855,144856],{"class":70,"line":1387},[68,144857,1772],{"class":335},[68,144859,144860,144862],{"class":70,"line":1402},[68,144861,51812],{"class":51501},[68,144863,15777],{"class":335},[68,144865,144866,144868,144870,144872,144874,144876],{"class":70,"line":1408},[68,144867,70769],{"class":82},[68,144869,51638],{"class":335},[68,144871,779],{"class":82},[68,144873,144815],{"class":331},[68,144875,26271],{"class":335},[68,144877,144820],{"class":393},[68,144879,144880],{"class":70,"line":1422},[68,144881,1772],{"class":335},[68,144883,144884],{"class":70,"line":1428},[68,144885,136209],{"class":335},[68,144887,144888],{"class":70,"line":1519},[68,144889,144772],{"class":393},[68,144891,144892,144894],{"class":70,"line":1525},[68,144893,50836],{"class":51501},[68,144895,15777],{"class":335},[68,144897,144898,144900,144902,144904,144906,144908],{"class":70,"line":1537},[68,144899,70827],{"class":82},[68,144901,51638],{"class":335},[68,144903,144787],{"class":82},[68,144905,661],{"class":331},[68,144907,130611],{"class":335},[68,144909,144794],{"class":393},[68,144911,144912],{"class":70,"line":1819},[68,144913,1772],{"class":335},[68,144915,144916,144918],{"class":70,"line":1824},[68,144917,130596],{"class":74},[68,144919,15777],{"class":335},[68,144921,144922,144924,144926,144928,144930,144932],{"class":70,"line":1830},[68,144923,70769],{"class":82},[68,144925,51638],{"class":335},[68,144927,779],{"class":82},[68,144929,144815],{"class":331},[68,144931,130611],{"class":335},[68,144933,144820],{"class":393},[68,144935,144936],{"class":70,"line":1835},[68,144937,1772],{"class":335},[19,144939,144940,144941,144944],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23758,144942,144943],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[58,144946,144949],{"className":144947,"code":144948,"language":5393},[5391],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[65,144950,144948],{"__ignoreMap":63},[19,144952,144953],{},"less保存时会自动变成.css文件",[19,144955,144956],{},"好好搞懂上述代码写法",[301,144958,144960],{"id":144959},"_2132-样式导入样式","21.3.2 样式导入样式",[48,144962],{"style":50,"src":144963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[301,144965,144967],{"id":144966},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[23,144969,144970],{},[26,144971,144972],{},"准备工作",[48,144974],{"style":50,"src":144975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144977,144978,144979],{},"github地址：",[30,144980,144981],{"href":144981,"rel":144982},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[34],[19,144984,144985],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144987,144988,144989],{},"js文件引入到index.html中使用的是",[65,144990,144991],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[23,144993,144994],{"start":92},[26,144995,144996],{},"vscode插件",[48,144998],{"style":50,"src":144999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145001,145002],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145004,145005],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[48,145007],{"style":50,"src":145008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145010,145011],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[48,145013],{"style":50,"src":145014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145016,145017],{},"修改成75就可以，alt+z为快捷键",[19,145019,145020],{},"index.css：",[58,145022,145023],{"className":126748,"code":144765,"language":126750,"meta":63,"style":63},[65,145024,145025,145029,145035,145049,145053,145059,145073],{"__ignoreMap":63},[68,145026,145027],{"class":70,"line":71},[68,145028,144772],{"class":393},[68,145030,145031,145033],{"class":70,"line":92},[68,145032,50836],{"class":51501},[68,145034,15777],{"class":335},[68,145036,145037,145039,145041,145043,145045,145047],{"class":70,"line":1387},[68,145038,70827],{"class":82},[68,145040,51638],{"class":335},[68,145042,144787],{"class":82},[68,145044,661],{"class":331},[68,145046,130611],{"class":335},[68,145048,144794],{"class":393},[68,145050,145051],{"class":70,"line":1402},[68,145052,1772],{"class":335},[68,145054,145055,145057],{"class":70,"line":1408},[68,145056,130596],{"class":74},[68,145058,15777],{"class":335},[68,145060,145061,145063,145065,145067,145069,145071],{"class":70,"line":1422},[68,145062,70769],{"class":82},[68,145064,51638],{"class":335},[68,145066,779],{"class":82},[68,145068,144815],{"class":331},[68,145070,130611],{"class":335},[68,145072,144820],{"class":393},[68,145074,145075],{"class":70,"line":1428},[68,145076,1772],{"class":335},[19,145078,144762],{},[58,145080,145081],{"className":126748,"code":127152,"language":126750,"meta":63,"style":63},[65,145082,145083,145089,145101],{"__ignoreMap":63},[68,145084,145085,145087],{"class":70,"line":71},[68,145086,52001],{"class":51501},[68,145088,15777],{"class":335},[68,145090,145091,145093,145095,145097,145099],{"class":70,"line":92},[68,145092,70827],{"class":82},[68,145094,51638],{"class":335},[68,145096,934],{"class":82},[68,145098,51693],{"class":331},[68,145100,1498],{"class":335},[68,145102,145103],{"class":70,"line":1387},[68,145104,1772],{"class":335},[14,145106,145108],{"id":145107},"_214-响应式开发","21.4 响应式开发",[19,145110,145111],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[48,145113],{"style":50,"src":145114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145116,145117],{},"做法：",[42,145119,145120,145123],{},[26,145121,145122],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[26,145124,145125],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[48,145127],{"style":50,"src":145128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145130,145131],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[301,145133,145135],{"id":145134},"_2141-简单代码示范","21.4.1 简单代码示范",[58,145137,145138],{"className":126748,"code":144765,"language":126750,"meta":63,"style":63},[65,145139,145140,145144,145150,145164,145168,145174,145188],{"__ignoreMap":63},[68,145141,145142],{"class":70,"line":71},[68,145143,144772],{"class":393},[68,145145,145146,145148],{"class":70,"line":92},[68,145147,50836],{"class":51501},[68,145149,15777],{"class":335},[68,145151,145152,145154,145156,145158,145160,145162],{"class":70,"line":1387},[68,145153,70827],{"class":82},[68,145155,51638],{"class":335},[68,145157,144787],{"class":82},[68,145159,661],{"class":331},[68,145161,130611],{"class":335},[68,145163,144794],{"class":393},[68,145165,145166],{"class":70,"line":1402},[68,145167,1772],{"class":335},[68,145169,145170,145172],{"class":70,"line":1408},[68,145171,130596],{"class":74},[68,145173,15777],{"class":335},[68,145175,145176,145178,145180,145182,145184,145186],{"class":70,"line":1422},[68,145177,70769],{"class":82},[68,145179,51638],{"class":335},[68,145181,779],{"class":82},[68,145183,144815],{"class":331},[68,145185,130611],{"class":335},[68,145187,144820],{"class":393},[68,145189,145190],{"class":70,"line":1428},[68,145191,1772],{"class":335},[19,145193,145194],{},"父盒子一般命名为container",[301,145196,145198],{"id":145197},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145200,145201,145202],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[483,145203,145204],{},"使得 Web 开发更加快捷",[42,145206,145207],{},[26,145208,145209,145210],{},"官网：",[483,145211,145212],{},[30,145213,145214],{"href":145214,"rel":145215},"http:\u002F\u002Fgetbootstrap.com\u002F",[34],[19,145217,145218],{},"可以直接去官网拿现成的东西",[23,145220,145221],{},[26,145222,145223],{},"Bootstrap的使用",[19,145225,145226],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145228,145229],{},"Bootstrap 使用四步曲：",[19,145231,145232,145235],{},[483,145233,145234],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[48,145237],{"style":50,"src":145238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145240,145241],{},"打开Bootstrap官网，然后下载",[48,145243],{"style":50,"src":145244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[48,145246],{"style":50,"src":145247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145249,145250],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145252,145253],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145255,145256],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[48,145258],{"style":50,"src":145259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[58,145261,145263],{"className":126748,"code":145262,"language":126750,"meta":63,"style":63},".center {\n  color: red;\n}\n",[65,145264,145265,145271,145281],{"__ignoreMap":63},[68,145266,145267,145269],{"class":70,"line":71},[68,145268,127039],{"class":74},[68,145270,15777],{"class":335},[68,145272,145273,145275,145277,145279],{"class":70,"line":92},[68,145274,71106],{"class":82},[68,145276,51638],{"class":335},[68,145278,57622],{"class":82},[68,145280,1498],{"class":335},[68,145282,145283],{"class":70,"line":1387},[68,145284,1772],{"class":335},[19,145286,145287,145290],{},[65,145288,145289],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[48,145292],{"style":50,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[48,145295],{"style":50,"src":145296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[48,145298],{"style":50,"src":145299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145301,145302],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[48,145304],{"style":50,"src":145305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145307,145308],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[23,145310,145311],{"start":92},[26,145312,145313],{},"布局容器",[48,145315],{"style":50,"src":145316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145318,145319],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145321,145322],{},"container-fluid用于移动式布局比较方便",[23,145324,145325],{"start":1387},[26,145326,145327,145328],{},"bootstrap ",[483,145329,145330],{},"栅格系统原理",[48,145332],{"style":50,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[23,145335,145336],{"start":1402},[26,145337,145338],{},[483,145339,145340],{},"栅格选项参数",[48,145342],{"style":50,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145345,145346],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145348,14838],{},[58,145350,145351],{"className":126748,"code":145262,"language":126750,"meta":63,"style":63},[65,145352,145353,145359,145369],{"__ignoreMap":63},[68,145354,145355,145357],{"class":70,"line":71},[68,145356,127039],{"class":74},[68,145358,15777],{"class":335},[68,145360,145361,145363,145365,145367],{"class":70,"line":92},[68,145362,71106],{"class":82},[68,145364,51638],{"class":335},[68,145366,57622],{"class":82},[68,145368,1498],{"class":335},[68,145370,145371],{"class":70,"line":1387},[68,145372,1772],{"class":335},[19,145374,135791],{},[48,145376],{"style":50,"src":145377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145379,145380],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145382,145383],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145385,145386],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145388,145389],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145391,145392],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145394,145395],{},"汇总展示说明：",[58,145397,145398],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,145399,145400,145404,145418,145422],{"__ignoreMap":63},[68,145401,145402],{"class":70,"line":71},[68,145403,130859],{"class":393},[68,145405,145406,145408,145410,145412,145414,145416],{"class":70,"line":92},[68,145407,1243],{"class":335},[68,145409,51812],{"class":51501},[68,145411,53687],{"class":74},[68,145413,381],{"class":335},[68,145415,130872],{"class":78},[68,145417,51508],{"class":335},[68,145419,145420],{"class":70,"line":1387},[68,145421,130879],{"class":335},[68,145423,145424,145426,145428],{"class":70,"line":1402},[68,145425,51986],{"class":335},[68,145427,51812],{"class":51501},[68,145429,51508],{"class":335},[48,145431],{"style":50,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145434,145435],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[58,145437,145438],{"className":127495,"code":130852,"language":127497,"meta":63,"style":63},[65,145439,145440,145444,145458,145462],{"__ignoreMap":63},[68,145441,145442],{"class":70,"line":71},[68,145443,130859],{"class":393},[68,145445,145446,145448,145450,145452,145454,145456],{"class":70,"line":92},[68,145447,1243],{"class":335},[68,145449,51812],{"class":51501},[68,145451,53687],{"class":74},[68,145453,381],{"class":335},[68,145455,130872],{"class":78},[68,145457,51508],{"class":335},[68,145459,145460],{"class":70,"line":1387},[68,145461,130879],{"class":335},[68,145463,145464,145466,145468],{"class":70,"line":1402},[68,145465,51986],{"class":335},[68,145467,51812],{"class":51501},[68,145469,51508],{"class":335},[23,145471,145472],{"start":1408},[26,145473,145474],{},[483,145475,145476],{},"列嵌套",[48,145478],{"style":50,"src":145479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145481,145482],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145484,145485],{},"没加row内部这样：",[48,145487],{"style":50,"src":145488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145490,145491],{},"加上row之后内部为：",[48,145493],{"style":50,"src":145494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[23,145496,145497],{"start":1422},[26,145498,145499],{},[483,145500,145501],{},"列偏移",[48,145503],{"style":50,"src":145504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145506,145507],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145509,145510],{},"要加偏移量，即偏移份数",[19,145512,145513],{},"偏移的份数=12-两个盒子的份数",[23,145515,145516],{"start":1428},[26,145517,145518],{},[483,145519,145520],{},"列排序",[48,145522],{"style":50,"src":145523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145525,145526],{},"pull拉左；push推右",[23,145528,145529],{"start":1519},[26,145530,145531],{},[483,145532,145533],{},"响应式工具",[48,145535],{"style":50,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145538,145539],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[301,145541,145543],{"id":145542},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145545,145546],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145548,145549],{},"ul {",[19,145551,145552],{},"list-style: none;",[19,145554,145555],{},"margin:0;",[19,145557,145558],{},"padding:0; }",[48,145560],{"style":50,"src":145561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[48,145563],{"style":50,"src":145564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145566,145567],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145569,69090],{},[58,145571,145572],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,145573,145574,145580,145590],{"__ignoreMap":63},[68,145575,145576,145578],{"class":70,"line":71},[68,145577,130596],{"class":74},[68,145579,15777],{"class":335},[68,145581,145582,145584,145586,145588],{"class":70,"line":92},[68,145583,131228],{"class":82},[68,145585,51638],{"class":335},[68,145587,23941],{"class":82},[68,145589,1498],{"class":335},[68,145591,145592],{"class":70,"line":1387},[68,145593,1772],{"class":335},[19,145595,70654],{},[58,145597,145598],{"className":126748,"code":139418,"language":126750,"meta":63,"style":63},[65,145599,145600,145606,145616],{"__ignoreMap":63},[68,145601,145602,145604],{"class":70,"line":71},[68,145603,130596],{"class":74},[68,145605,15777],{"class":335},[68,145607,145608,145610,145612,145614],{"class":70,"line":92},[68,145609,131228],{"class":82},[68,145611,51638],{"class":335},[68,145613,23941],{"class":82},[68,145615,1498],{"class":335},[68,145617,145618],{"class":70,"line":1387},[68,145619,1772],{"class":335},[14,145621,145623],{"id":145622},"_215-swiper-插件使用","21.5 swiper 插件使用",[42,145625,145626,145629,145632],{},[26,145627,145628],{},"下载需要的css和js文件html页面中 引入相关文件",[26,145630,145631],{},"官网找到类似案例，复制html结构，css样式 js 语法",[26,145633,145634],{},"根据需求定制修改模块",[48,145636],{"style":50,"src":145637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145639,145640],{},"解压后将这两部分放到项目中",[48,145642],{"style":50,"src":145643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145645,145646],{},"这个插件可以帮助我们实现轮播图效果",[19,145648,145649],{},"用法：",[48,145651],{"style":50,"src":145652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145654,145655],{},"找到自己喜欢的",[48,145657],{"style":50,"src":145658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145660,145661],{},"右键，查看网页源代码",[48,145663],{"style":50,"src":145664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145666,145667],{},"复制人家的结构内容",[19,145669,145670],{},"然后去看API文档：",[48,145672],{"style":50,"src":145673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145675,145676],{},"可以看看如何修改样式",[19,145678,145679],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[250,145681,145682],{},"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":63,"searchDepth":92,"depth":92,"links":145684},[145685,145690,145694,145699,145704],{"id":144485,"depth":92,"text":144486,"children":145686},[145687,145688,145689],{"id":144489,"depth":1387,"text":144490},{"id":144499,"depth":1387,"text":144500},{"id":144594,"depth":1387,"text":144595},{"id":144609,"depth":92,"text":144610,"children":145691},[145692,145693],{"id":144631,"depth":1387,"text":144632},{"id":144647,"depth":1387,"text":144648},{"id":144722,"depth":92,"text":144723,"children":145695},[145696,145697,145698],{"id":144735,"depth":1387,"text":144736},{"id":144959,"depth":1387,"text":144960},{"id":144966,"depth":1387,"text":144967},{"id":145107,"depth":92,"text":145108,"children":145700},[145701,145702,145703],{"id":145134,"depth":1387,"text":145135},{"id":145197,"depth":1387,"text":145198},{"id":145542,"depth":1387,"text":145543},{"id":145622,"depth":92,"text":145623},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144477,"description":257},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":4,"title":5,"body":145711,"description":257,"extension":258,"meta":145884,"navigation":260,"path":261,"seo":145885,"stem":263,"__hash__":264},{"type":7,"value":145712,"toc":145880},[145713,145715,145717,145719,145730,145734,145736,145740,145768,145772,145782,145786,145798,145802,145816,145820,145836,145840,145856,145858,145860,145862,145864,145866,145868,145870,145872,145874,145876,145878],[10,145714,5],{"id":12},[14,145716,17],{"id":16},[19,145718,21],{},[23,145720,145721,145726,145728],{},[26,145722,28,145723],{},[30,145724,32],{"href":32,"rel":145725},[34],[26,145727,37],{},[26,145729,40],{},[42,145731,145732],{},[26,145733,46],{},[48,145735],{"style":50,"src":51},[42,145737,145738],{},[26,145739,56],{},[58,145741,145742],{"className":60,"code":61,"language":62,"meta":63,"style":63},[65,145743,145744,145756],{"__ignoreMap":63},[68,145745,145746,145748,145750,145752,145754],{"class":70,"line":71},[68,145747,75],{"class":74},[68,145749,79],{"class":78},[68,145751,83],{"class":82},[68,145753,86],{"class":78},[68,145755,89],{"class":78},[68,145757,145758,145760,145762,145764,145766],{"class":70,"line":92},[68,145759,75],{"class":74},[68,145761,79],{"class":78},[68,145763,83],{"class":82},[68,145765,101],{"class":78},[68,145767,104],{"class":78},[42,145769,145770],{},[26,145771,109],{},[58,145773,145774],{"className":60,"code":112,"language":62,"meta":63,"style":63},[65,145775,145776],{"__ignoreMap":63},[68,145777,145778,145780],{"class":70,"line":71},[68,145779,75],{"class":74},[68,145781,121],{"class":78},[42,145783,145784],{},[26,145785,126],{},[58,145787,145788],{"className":60,"code":129,"language":62,"meta":63,"style":63},[65,145789,145790],{"__ignoreMap":63},[68,145791,145792,145794,145796],{"class":70,"line":71},[68,145793,75],{"class":74},[68,145795,138],{"class":78},[68,145797,141],{"class":78},[42,145799,145800],{},[26,145801,146],{},[58,145803,145804],{"className":60,"code":149,"language":62,"meta":63,"style":63},[65,145805,145806],{"__ignoreMap":63},[68,145807,145808,145810,145812,145814],{"class":70,"line":71},[68,145809,75],{"class":74},[68,145811,158],{"class":78},[68,145813,161],{"class":82},[68,145815,164],{"class":78},[42,145817,145818],{},[26,145819,169],{},[58,145821,145822],{"className":60,"code":172,"language":62,"meta":63,"style":63},[65,145823,145824],{"__ignoreMap":63},[68,145825,145826,145828,145830,145832,145834],{"class":70,"line":71},[68,145827,75],{"class":74},[68,145829,181],{"class":78},[68,145831,138],{"class":78},[68,145833,186],{"class":78},[68,145835,189],{"class":78},[42,145837,145838],{},[26,145839,194],{},[58,145841,145842],{"className":60,"code":197,"language":62,"meta":63,"style":63},[65,145843,145844],{"__ignoreMap":63},[68,145845,145846,145848,145850,145852,145854],{"class":70,"line":71},[68,145847,75],{"class":74},[68,145849,206],{"class":78},[68,145851,209],{"class":82},[68,145853,186],{"class":78},[68,145855,214],{"class":78},[48,145857],{"style":50,"src":217},[19,145859,220],{},[19,145861,223],{},[48,145863],{"style":50,"src":226},[14,145865,230],{"id":229},[48,145867],{"style":50,"src":233},[48,145869],{"style":50,"src":236},[19,145871,239],{},[19,145873,242],{},[48,145875],{"style":50,"src":245},[19,145877,248],{},[250,145879,252],{},{"title":63,"searchDepth":92,"depth":92,"links":145881},[145882,145883],{"id":16,"depth":92,"text":17},{"id":229,"depth":92,"text":230},{},{"title":5,"description":257},{"id":145887,"title":145888,"body":145889,"description":145893,"extension":258,"meta":145894,"navigation":260,"path":145895,"seo":145896,"stem":145897,"__hash__":145898},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145890,"toc":145891},[],{"title":63,"searchDepth":92,"depth":92,"links":145892},[],"自己正经开始学编程的第一门语言！",{"category":93040},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145888,"description":145893},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145900,"title":145901,"body":145902,"description":257,"extension":258,"meta":147049,"navigation":260,"path":147050,"seo":147051,"stem":147052,"__hash__":147053},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145903,"toc":147025},[145904,145907,145911,145914,145917,145942,145945,145951,145955,145958,145985,145988,146028,146031,146043,146046,146052,146056,146060,146087,146104,146111,146115,146118,146144,146147,146151,146154,146194,146197,146214,146220,146224,146229,146273,146276,146294,146297,146365,146369,146376,146379,146394,146397,146406,146409,146420,146423,146432,146435,146452,146455,146470,146474,146478,146481,146483,146503,146507,146510,146513,146524,146527,146533,146537,146543,146570,146573,146585,146588,146599,146602,146608,146612,146618,146668,146671,146713,146716,146749,146752,146786,146790,146793,146813,146816,146852,146855,146868,146872,146876,146882,146885,146898,146902,146905,146911,146914,146918,146921,146924,146973,146977,146993,146999,147006,147012,147022],[10,145905,145901],{"id":145906},"_1-python环境与第一个程序",[14,145908,145910],{"id":145909},"_11-什么是python","1.1 什么是Python",[19,145912,145913],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145915,145916],{},"理解 Python 时抓住三个关键词：",[23,145918,145919,145922,145925],{},[26,145920,145921],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[26,145923,145924],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[26,145926,145927,145928,546,145931,546,145934,546,145937,546,145939,28588],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[65,145929,145930],{},"os",[65,145932,145933],{},"sys",[65,145935,145936],{},"json",[65,145938,58061],{},[65,145940,145941],{},"datetime",[19,145943,145944],{},"Python 程序的运行链路：",[58,145946,145949],{"className":145947,"code":145948,"language":5393,"meta":63},[5391],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[65,145950,145948],{"__ignoreMap":63},[14,145952,145954],{"id":145953},"_12-python解释器","1.2 Python解释器",[19,145956,145957],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[58,145959,145961],{"className":24027,"code":145960,"language":24029,"meta":63,"style":63},"python --version\npython3 --version\npython\npython3\n",[65,145962,145963,145969,145975,145980],{"__ignoreMap":63},[68,145964,145965,145967],{"class":70,"line":71},[68,145966,30581],{"class":74},[68,145968,26497],{"class":82},[68,145970,145971,145973],{"class":70,"line":92},[68,145972,101080],{"class":74},[68,145974,26497],{"class":82},[68,145976,145977],{"class":70,"line":1387},[68,145978,145979],{"class":74},"python\n",[68,145981,145982],{"class":70,"line":1402},[68,145983,145984],{"class":74},"python3\n",[19,145986,145987],{},"进入交互模式后，可以直接输入表达式：",[58,145989,145991],{"className":30579,"code":145990,"language":30581,"meta":63,"style":63},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[65,145992,145993,146004,146009,146023],{"__ignoreMap":63},[68,145994,145995,145998,146000,146002],{"class":70,"line":71},[68,145996,145997],{"class":331},">>>",[68,145999,25322],{"class":82},[68,146001,45767],{"class":331},[68,146003,47924],{"class":82},[68,146005,146006],{"class":70,"line":92},[68,146007,146008],{"class":82},"3\n",[68,146010,146011,146013,146016,146018,146021],{"class":70,"line":1387},[68,146012,145997],{"class":331},[68,146014,146015],{"class":82}," print",[68,146017,336],{"class":335},[68,146019,146020],{"class":78},"\"hello python\"",[68,146022,342],{"class":335},[68,146024,146025],{"class":70,"line":1402},[68,146026,146027],{"class":335},"hello python\n",[19,146029,146030],{},"退出交互模式：",[58,146032,146034],{"className":30579,"code":146033,"language":30581,"meta":63,"style":63},"exit()\n",[65,146035,146036],{"__ignoreMap":63},[68,146037,146038,146041],{"class":70,"line":71},[68,146039,146040],{"class":82},"exit",[68,146042,2182],{"class":335},[19,146044,146045],{},"或使用快捷键：",[58,146047,146050],{"className":146048,"code":146049,"language":5393,"meta":63},[5391],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[65,146051,146049],{"__ignoreMap":63},[14,146053,146055],{"id":146054},"_13-安装python","1.3 安装Python",[301,146057,146059],{"id":146058},"_131-windows安装","1.3.1 Windows安装",[23,146061,146062,146069,146072,146078,146084],{},[26,146063,146064,146065],{},"打开 Python 官网：",[30,146066,146067],{"href":146067,"rel":146068},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[34],[26,146070,146071],{},"下载 Windows Installer。",[26,146073,146074,146075,28588],{},"安装时勾选 ",[65,146076,146077],{},"Add Python to PATH",[26,146079,146080,146081,28588],{},"点击 ",[65,146082,146083],{},"Install Now",[26,146085,146086],{},"安装完成后打开命令提示符验证：",[58,146088,146090],{"className":24027,"code":146089,"language":24029,"meta":63,"style":63},"python --version\npip --version\n",[65,146091,146092,146098],{"__ignoreMap":63},[68,146093,146094,146096],{"class":70,"line":71},[68,146095,30581],{"class":74},[68,146097,26497],{"class":82},[68,146099,146100,146102],{"class":70,"line":92},[68,146101,24036],{"class":74},[68,146103,26497],{"class":82},[19,146105,146106,146107,146110],{},"如果提示 ",[65,146108,146109],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[301,146112,146114],{"id":146113},"_132-macos安装","1.3.2 macOS安装",[19,146116,146117],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[58,146119,146121],{"className":24027,"code":146120,"language":24029,"meta":63,"style":63},"brew install python\npython3 --version\npip3 --version\n",[65,146122,146123,146132,146138],{"__ignoreMap":63},[68,146124,146125,146128,146130],{"class":70,"line":71},[68,146126,146127],{"class":74},"brew",[68,146129,24039],{"class":78},[68,146131,124515],{"class":78},[68,146133,146134,146136],{"class":70,"line":92},[68,146135,101080],{"class":74},[68,146137,26497],{"class":82},[68,146139,146140,146142],{"class":70,"line":1387},[68,146141,119898],{"class":74},[68,146143,26497],{"class":82},[19,146145,146146],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[301,146148,146150],{"id":146149},"_133-linux安装","1.3.3 Linux安装",[19,146152,146153],{},"Ubuntu\u002FDebian：",[58,146155,146157],{"className":24027,"code":146156,"language":24029,"meta":63,"style":63},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[65,146158,146159,146167,146182,146188],{"__ignoreMap":63},[68,146160,146161,146163,146165],{"class":70,"line":71},[68,146162,24780],{"class":74},[68,146164,117515],{"class":78},[68,146166,26446],{"class":78},[68,146168,146169,146171,146173,146175,146177,146179],{"class":70,"line":92},[68,146170,24780],{"class":74},[68,146172,117515],{"class":78},[68,146174,24039],{"class":78},[68,146176,104603],{"class":78},[68,146178,100999],{"class":78},[68,146180,146181],{"class":78}," python3-venv\n",[68,146183,146184,146186],{"class":70,"line":1387},[68,146185,101080],{"class":74},[68,146187,26497],{"class":82},[68,146189,146190,146192],{"class":70,"line":1402},[68,146191,119898],{"class":74},[68,146193,26497],{"class":82},[19,146195,146196],{},"Fedora：",[58,146198,146200],{"className":24027,"code":146199,"language":24029,"meta":63,"style":63},"sudo dnf install python3 python3-pip\n",[65,146201,146202],{"__ignoreMap":63},[68,146203,146204,146206,146208,146210,146212],{"class":70,"line":71},[68,146205,24780],{"class":74},[68,146207,26519],{"class":78},[68,146209,24039],{"class":78},[68,146211,104603],{"class":78},[68,146213,119962],{"class":78},[19,146215,146216,146217,146219],{},"Linux 上通常使用 ",[65,146218,101080],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146221,146223],{"id":146222},"_14-pip包管理器","1.4 pip包管理器",[19,146225,146226,146228],{},[65,146227,24036],{}," 用来安装第三方库。",[58,146230,146232],{"className":24027,"code":146231,"language":24029,"meta":63,"style":63},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[65,146233,146234,146243,146252,146260,146266],{"__ignoreMap":63},[68,146235,146236,146238,146240],{"class":70,"line":71},[68,146237,24036],{"class":74},[68,146239,24039],{"class":78},[68,146241,146242],{"class":78}," requests\n",[68,146244,146245,146247,146250],{"class":70,"line":92},[68,146246,24036],{"class":74},[68,146248,146249],{"class":78}," uninstall",[68,146251,146242],{"class":78},[68,146253,146254,146256,146258],{"class":70,"line":1387},[68,146255,24036],{"class":74},[68,146257,117772],{"class":78},[68,146259,146242],{"class":78},[68,146261,146262,146264],{"class":70,"line":1402},[68,146263,24036],{"class":74},[68,146265,119153],{"class":78},[68,146267,146268,146270],{"class":70,"line":1408},[68,146269,24036],{"class":74},[68,146271,146272],{"class":78}," freeze\n",[19,146274,146275],{},"国内网络较慢时可以临时使用镜像：",[58,146277,146279],{"className":24027,"code":146278,"language":24029,"meta":63,"style":63},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[65,146280,146281],{"__ignoreMap":63},[68,146282,146283,146285,146287,146290,146292],{"class":70,"line":71},[68,146284,24036],{"class":74},[68,146286,24039],{"class":78},[68,146288,146289],{"class":78}," requests",[68,146291,26634],{"class":82},[68,146293,119925],{"class":78},[19,146295,146296],{},"常见第三方库：",[471,146298,146299,146308],{},[474,146300,146301],{},[477,146302,146303,146306],{},[480,146304,146305],{},"库",[480,146307,102896],{},[518,146309,146310,146318,146325,146333,146341,146349,146357],{},[477,146311,146312,146315],{},[523,146313,146314],{},"requests",[523,146316,146317],{},"网络请求",[477,146319,146320,146322],{},[523,146321,100827],{},[523,146323,146324],{},"数值计算",[477,146326,146327,146330],{},[523,146328,146329],{},"pandas",[523,146331,146332],{},"表格数据处理",[477,146334,146335,146338],{},[523,146336,146337],{},"matplotlib",[523,146339,146340],{},"绘图",[477,146342,146343,146346],{},[523,146344,146345],{},"pyecharts",[523,146347,146348],{},"ECharts 图表",[477,146350,146351,146354],{},[523,146352,146353],{},"flask",[523,146355,146356],{},"Web 后端",[477,146358,146359,146362],{},[523,146360,146361],{},"pytest",[523,146363,146364],{},"自动化测试",[14,146366,146368],{"id":146367},"_15-虚拟环境","1.5 虚拟环境",[19,146370,146371,146372,146375],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[65,146373,146374],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146377,146378],{},"创建虚拟环境：",[58,146380,146382],{"className":24027,"code":146381,"language":24029,"meta":63,"style":63},"python -m venv .venv\n",[65,146383,146384],{"__ignoreMap":63},[68,146385,146386,146388,146390,146392],{"class":70,"line":71},[68,146387,30581],{"class":74},[68,146389,161],{"class":82},[68,146391,101085],{"class":78},[68,146393,101088],{"class":78},[19,146395,146396],{},"Windows 激活：",[58,146398,146400],{"className":24027,"code":146399,"language":24029,"meta":63,"style":63},".venv\\Scripts\\activate\n",[65,146401,146402],{"__ignoreMap":63},[68,146403,146404],{"class":70,"line":71},[68,146405,146399],{"class":74},[19,146407,146408],{},"macOS\u002FLinux 激活：",[58,146410,146412],{"className":24027,"code":146411,"language":24029,"meta":63,"style":63},"source .venv\u002Fbin\u002Factivate\n",[65,146413,146414],{"__ignoreMap":63},[68,146415,146416,146418],{"class":70,"line":71},[68,146417,101093],{"class":82},[68,146419,101096],{"class":78},[19,146421,146422],{},"退出虚拟环境：",[58,146424,146426],{"className":24027,"code":146425,"language":24029,"meta":63,"style":63},"deactivate\n",[65,146427,146428],{"__ignoreMap":63},[68,146429,146430],{"class":70,"line":71},[68,146431,146425],{"class":74},[19,146433,146434],{},"保存依赖：",[58,146436,146438],{"className":24027,"code":146437,"language":24029,"meta":63,"style":63},"pip freeze > requirements.txt\n",[65,146439,146440],{"__ignoreMap":63},[68,146441,146442,146444,146447,146449],{"class":70,"line":71},[68,146443,24036],{"class":74},[68,146445,146446],{"class":78}," freeze",[68,146448,26426],{"class":331},[68,146450,146451],{"class":78}," requirements.txt\n",[19,146453,146454],{},"安装依赖：",[58,146456,146458],{"className":24027,"code":146457,"language":24029,"meta":63,"style":63},"pip install -r requirements.txt\n",[65,146459,146460],{"__ignoreMap":63},[68,146461,146462,146464,146466,146468],{"class":70,"line":71},[68,146463,24036],{"class":74},[68,146465,24039],{"class":78},[68,146467,119837],{"class":82},[68,146469,146451],{"class":78},[14,146471,146473],{"id":146472},"_16-开发工具","1.6 开发工具",[301,146475,146477],{"id":146476},"_161-pycharm","1.6.1 PyCharm",[19,146479,146480],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146482,122259],{},[23,146484,146485,146488,146491,146497,146500],{},[26,146486,146487],{},"New Project：创建项目。",[26,146489,146490],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[26,146492,146493,146494,126180],{},"New Python File：创建 ",[65,146495,146496],{},".py",[26,146498,146499],{},"Run：运行当前文件。",[26,146501,146502],{},"Debug：断点调试。",[301,146504,146506],{"id":146505},"_162-vs-code","1.6.2 VS Code",[19,146508,146509],{},"VS Code 轻量，适合后续多语言开发。",[19,146511,146512],{},"建议安装插件：",[23,146514,146515,146518,146521],{},[26,146516,146517],{},"Python。",[26,146519,146520],{},"Pylance。",[26,146522,146523],{},"Jupyter。",[19,146525,146526],{},"选择解释器：",[58,146528,146531],{"className":146529,"code":146530,"language":5393,"meta":63},[5391],"Ctrl + Shift + P -> Python: Select Interpreter\n",[65,146532,146530],{"__ignoreMap":63},[14,146534,146536],{"id":146535},"_17-第一个python程序","1.7 第一个Python程序",[19,146538,146539,146540,24822],{},"创建文件 ",[65,146541,146542],{},"hello.py",[58,146544,146546],{"className":30579,"code":146545,"language":30581,"meta":63,"style":63},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[65,146547,146548,146559],{"__ignoreMap":63},[68,146549,146550,146552,146554,146557],{"class":70,"line":71},[68,146551,30616],{"class":82},[68,146553,336],{"class":335},[68,146555,146556],{"class":78},"\"Hello World\"",[68,146558,342],{"class":335},[68,146560,146561,146563,146565,146568],{"class":70,"line":92},[68,146562,30616],{"class":82},[68,146564,336],{"class":335},[68,146566,146567],{"class":78},"\"你好，Python\"",[68,146569,342],{"class":335},[19,146571,146572],{},"在终端运行：",[58,146574,146576],{"className":24027,"code":146575,"language":24029,"meta":63,"style":63},"python hello.py\n",[65,146577,146578],{"__ignoreMap":63},[68,146579,146580,146582],{"class":70,"line":71},[68,146581,30581],{"class":74},[68,146583,146584],{"class":78}," hello.py\n",[19,146586,146587],{},"或：",[58,146589,146591],{"className":24027,"code":146590,"language":24029,"meta":63,"style":63},"python3 hello.py\n",[65,146592,146593],{"__ignoreMap":63},[68,146594,146595,146597],{"class":70,"line":71},[68,146596,101080],{"class":74},[68,146598,146584],{"class":78},[19,146600,146601],{},"输出：",[58,146603,146606],{"className":146604,"code":146605,"language":5393,"meta":63},[5391],"Hello World\n你好，Python\n",[65,146607,146605],{"__ignoreMap":63},[14,146609,146611],{"id":146610},"_18-print函数","1.8 print函数",[19,146613,146614,146617],{},[65,146615,146616],{},"print()"," 用来输出内容。",[58,146619,146621],{"className":30579,"code":146620,"language":30581,"meta":63,"style":63},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[65,146622,146623,146633,146643,146653],{"__ignoreMap":63},[68,146624,146625,146627,146629,146631],{"class":70,"line":71},[68,146626,30616],{"class":82},[68,146628,336],{"class":335},[68,146630,6049],{"class":78},[68,146632,342],{"class":335},[68,146634,146635,146637,146639,146641],{"class":70,"line":92},[68,146636,30616],{"class":82},[68,146638,336],{"class":335},[68,146640,644],{"class":82},[68,146642,342],{"class":335},[68,146644,146645,146647,146649,146651],{"class":70,"line":1387},[68,146646,30616],{"class":82},[68,146648,336],{"class":335},[68,146650,384],{"class":82},[68,146652,342],{"class":335},[68,146654,146655,146657,146659,146662,146664,146666],{"class":70,"line":1402},[68,146656,30616],{"class":82},[68,146658,336],{"class":335},[68,146660,146661],{"class":78},"\"年龄:\"",[68,146663,12640],{"class":335},[68,146665,983],{"class":82},[68,146667,342],{"class":335},[19,146669,146670],{},"多个内容用逗号隔开，默认中间加空格：",[58,146672,146674],{"className":30579,"code":146673,"language":30581,"meta":63,"style":63},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[65,146675,146676,146686,146696],{"__ignoreMap":63},[68,146677,146678,146681,146683],{"class":70,"line":71},[68,146679,146680],{"class":335},"name ",[68,146682,381],{"class":331},[68,146684,146685],{"class":78}," \"张三\"\n",[68,146687,146688,146691,146693],{"class":70,"line":92},[68,146689,146690],{"class":335},"age ",[68,146692,381],{"class":331},[68,146694,146695],{"class":82}," 18\n",[68,146697,146698,146700,146702,146705,146708,146710],{"class":70,"line":1387},[68,146699,30616],{"class":82},[68,146701,336],{"class":335},[68,146703,146704],{"class":78},"\"姓名:\"",[68,146706,146707],{"class":335},", name, ",[68,146709,146661],{"class":78},[68,146711,146712],{"class":335},", age)\n",[19,146714,146715],{},"修改分隔符：",[58,146717,146719],{"className":30579,"code":146718,"language":30581,"meta":63,"style":63},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[65,146720,146721],{"__ignoreMap":63},[68,146722,146723,146725,146727,146730,146732,146734,146736,146738,146740,146743,146745,146747],{"class":70,"line":71},[68,146724,30616],{"class":82},[68,146726,336],{"class":335},[68,146728,146729],{"class":78},"\"2024\"",[68,146731,12640],{"class":335},[68,146733,54517],{"class":78},[68,146735,12640],{"class":335},[68,146737,54517],{"class":78},[68,146739,12640],{"class":335},[68,146741,146742],{"class":5421},"sep",[68,146744,381],{"class":331},[68,146746,32684],{"class":78},[68,146748,342],{"class":335},[19,146750,146751],{},"修改结尾符：",[58,146753,146755],{"className":30579,"code":146754,"language":30581,"meta":63,"style":63},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[65,146756,146757,146775],{"__ignoreMap":63},[68,146758,146759,146761,146763,146765,146767,146769,146771,146773],{"class":70,"line":71},[68,146760,30616],{"class":82},[68,146762,336],{"class":335},[68,146764,6049],{"class":78},[68,146766,12640],{"class":335},[68,146768,46002],{"class":5421},[68,146770,381],{"class":331},[68,146772,4565],{"class":78},[68,146774,342],{"class":335},[68,146776,146777,146779,146781,146784],{"class":70,"line":92},[68,146778,30616],{"class":82},[68,146780,336],{"class":335},[68,146782,146783],{"class":78},"\"python\"",[68,146785,342],{"class":335},[14,146787,146789],{"id":146788},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146791,146792],{},"交互运行适合临时验证：",[58,146794,146796],{"className":30579,"code":146795,"language":30581,"meta":63,"style":63},">>> 10 * 3\n30\n",[65,146797,146798,146808],{"__ignoreMap":63},[68,146799,146800,146802,146804,146806],{"class":70,"line":71},[68,146801,145997],{"class":331},[68,146803,2244],{"class":82},[68,146805,6723],{"class":331},[68,146807,120233],{"class":82},[68,146809,146810],{"class":70,"line":92},[68,146811,146812],{"class":82},"30\n",[19,146814,146815],{},"脚本运行适合保存程序：",[58,146817,146819],{"className":30579,"code":146818,"language":30581,"meta":63,"style":63},"price = 8\ncount = 5\nprint(price * count)\n",[65,146820,146821,146831,146840],{"__ignoreMap":63},[68,146822,146823,146826,146828],{"class":70,"line":71},[68,146824,146825],{"class":335},"price ",[68,146827,381],{"class":331},[68,146829,146830],{"class":82}," 8\n",[68,146832,146833,146836,146838],{"class":70,"line":92},[68,146834,146835],{"class":335},"count ",[68,146837,381],{"class":331},[68,146839,54628],{"class":82},[68,146841,146842,146844,146847,146849],{"class":70,"line":1387},[68,146843,30616],{"class":82},[68,146845,146846],{"class":335},"(price ",[68,146848,788],{"class":331},[68,146850,146851],{"class":335}," count)\n",[19,146853,146854],{},"实际学习中推荐：",[23,146856,146857,146860,146865],{},[26,146858,146859],{},"临时试一个语法，用交互模式。",[26,146861,146862,146863,126180],{},"写完整练习，用 ",[65,146864,146496],{},[26,146866,146867],{},"写项目，用独立目录和虚拟环境。",[14,146869,146871],{"id":146870},"_110-常见错误","1.10 常见错误",[301,146873,146875],{"id":146874},"_1101-命令找不到","1.10.1 命令找不到",[58,146877,146880],{"className":146878,"code":146879,"language":5393,"meta":63},[5391],"python: command not found\n",[65,146881,146879],{"__ignoreMap":63},[19,146883,146884],{},"原因：",[23,146886,146887,146890,146893],{},[26,146888,146889],{},"没安装 Python。",[26,146891,146892],{},"PATH 没配置。",[26,146894,146895,146896,28588],{},"Linux\u002FmacOS 应该使用 ",[65,146897,101080],{},[301,146899,146901],{"id":146900},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146903,146904],{},"不要把文件命名为：",[58,146906,146909],{"className":146907,"code":146908,"language":5393,"meta":63},[5391],"random.py\njson.py\ntime.py\nrequests.py\n",[65,146910,146908],{"__ignoreMap":63},[19,146912,146913],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[301,146915,146917],{"id":146916},"_1103-中文乱码","1.10.3 中文乱码",[19,146919,146920],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146922,146923],{},"如果读写文件出现乱码，要明确指定编码：",[58,146925,146927],{"className":30579,"code":146926,"language":30581,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[65,146928,146929,146963],{"__ignoreMap":63},[68,146930,146931,146933,146936,146938,146941,146943,146946,146948,146951,146953,146956,146958,146960],{"class":70,"line":71},[68,146932,108033],{"class":331},[68,146934,146935],{"class":82}," open",[68,146937,336],{"class":335},[68,146939,146940],{"class":78},"\"data.txt\"",[68,146942,12640],{"class":335},[68,146944,146945],{"class":78},"\"r\"",[68,146947,12640],{"class":335},[68,146949,146950],{"class":5421},"encoding",[68,146952,381],{"class":331},[68,146954,146955],{"class":78},"\"utf-8\"",[68,146957,13919],{"class":335},[68,146959,31584],{"class":331},[68,146961,146962],{"class":335}," f:\n",[68,146964,146965,146968,146970],{"class":70,"line":92},[68,146966,146967],{"class":335},"    content ",[68,146969,381],{"class":331},[68,146971,146972],{"class":335}," f.read()\n",[14,146974,146976],{"id":146975},"_111-本章练习","1.11 本章练习",[23,146978,146979,146982,146988],{},[26,146980,146981],{},"安装 Python，并在终端输出版本号。",[26,146983,146984,146985,146987],{},"新建 ",[65,146986,146542],{},"，输出自己的姓名、年龄、学习目标。",[26,146989,104566,146990,146992],{},[65,146991,146616],{}," 输出下面格式：",[58,146994,146997],{"className":146995,"code":146996,"language":5393,"meta":63},[5391],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[65,146998,146996],{"__ignoreMap":63},[23,147000,147001],{"start":1402},[26,147002,104566,147003,147005],{},[65,147004,146742],{}," 输出日期：",[58,147007,147010],{"className":147008,"code":147009,"language":5393,"meta":63},[5391],"2024-10-10\n",[65,147011,147009],{"__ignoreMap":63},[23,147013,147014],{"start":1408},[26,147015,104566,147016,147018,147019,147021],{},[65,147017,46002],{}," 让两次 ",[65,147020,146616],{}," 输出在同一行。",[250,147023,147024],{},"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":63,"searchDepth":92,"depth":92,"links":147026},[147027,147028,147029,147034,147035,147036,147040,147041,147042,147043,147048],{"id":145909,"depth":92,"text":145910},{"id":145953,"depth":92,"text":145954},{"id":146054,"depth":92,"text":146055,"children":147030},[147031,147032,147033],{"id":146058,"depth":1387,"text":146059},{"id":146113,"depth":1387,"text":146114},{"id":146149,"depth":1387,"text":146150},{"id":146222,"depth":92,"text":146223},{"id":146367,"depth":92,"text":146368},{"id":146472,"depth":92,"text":146473,"children":147037},[147038,147039],{"id":146476,"depth":1387,"text":146477},{"id":146505,"depth":1387,"text":146506},{"id":146535,"depth":92,"text":146536},{"id":146610,"depth":92,"text":146611},{"id":146788,"depth":92,"text":146789},{"id":146870,"depth":92,"text":146871,"children":147044},[147045,147046,147047],{"id":146874,"depth":1387,"text":146875},{"id":146900,"depth":1387,"text":146901},{"id":146916,"depth":1387,"text":146917},{"id":146975,"depth":92,"text":146976},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145901,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147055,"title":147056,"body":147057,"description":257,"extension":258,"meta":149461,"navigation":260,"path":149462,"seo":149463,"stem":149464,"__hash__":149465},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147058,"toc":149446},[147059,147062,147066,147069,147072,147089,147092,147134,147137,147141,147144,147147,147184,147187,147221,147224,147316,147320,147334,147337,147364,147367,147371,147474,147481,147484,147501,147505,147512,147701,147704,147777,147781,147784,147868,147871,147903,147907,148111,148114,148118,148124,148226,148229,148485,148489,148492,148495,148509,148511,148697,148701,149063,149069,149073,149076,149200,149203,149382,149385,149389,149422,149426,149443],[10,147060,147056],{"id":147061},"_10-json与pyecharts折线图",[14,147063,147065],{"id":147064},"_101-数据可视化","10.1 数据可视化",[19,147067,147068],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147070,147071],{},"常见图表：",[23,147073,147074,147077,147080,147083,147086],{},[26,147075,147076],{},"折线图：看趋势。",[26,147078,147079],{},"柱状图：看分类对比。",[26,147081,147082],{},"饼图：看占比。",[26,147084,147085],{},"地图：看地域分布。",[26,147087,147088],{},"散点图：看两个变量之间的关系。",[19,147090,147091],{},"Python 可视化常用库：",[471,147093,147094,147102],{},[474,147095,147096],{},[477,147097,147098,147100],{},[480,147099,146305],{},[480,147101,23945],{},[518,147103,147104,147111,147119,147126],{},[477,147105,147106,147108],{},[523,147107,146337],{},[523,147109,147110],{},"基础、经典、可定制",[477,147112,147113,147116],{},[523,147114,147115],{},"seaborn",[523,147117,147118],{},"统计图表更美观",[477,147120,147121,147123],{},[523,147122,146345],{},[523,147124,147125],{},"生成交互式网页图表",[477,147127,147128,147131],{},[523,147129,147130],{},"plotly",[523,147132,147133],{},"交互图表能力强",[19,147135,147136],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147138,147140],{"id":147139},"_102-json回顾","10.2 JSON回顾",[19,147142,147143],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147145,147146],{},"Python 字典：",[58,147148,147150],{"className":30579,"code":147149,"language":30581,"meta":63,"style":63},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[65,147151,147152,147160,147171,147180],{"__ignoreMap":63},[68,147153,147154,147156,147158],{"class":70,"line":71},[68,147155,101858],{"class":335},[68,147157,381],{"class":331},[68,147159,15777],{"class":335},[68,147161,147162,147165,147167,147169],{"class":70,"line":92},[68,147163,147164],{"class":78},"    \"name\"",[68,147166,51638],{"class":335},[68,147168,69470],{"class":78},[68,147170,31667],{"class":335},[68,147172,147173,147176,147178],{"class":70,"line":1387},[68,147174,147175],{"class":78},"    \"value\"",[68,147177,51638],{"class":335},[68,147179,97659],{"class":82},[68,147181,147182],{"class":70,"line":1402},[68,147183,1772],{"class":335},[19,147185,147186],{},"JSON 字符串：",[58,147188,147191],{"className":147189,"code":147190,"language":145936,"meta":63,"style":63},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[65,147192,147193,147197,147208,147217],{"__ignoreMap":63},[68,147194,147195],{"class":70,"line":71},[68,147196,1753],{"class":335},[68,147198,147199,147202,147204,147206],{"class":70,"line":92},[68,147200,147201],{"class":82},"  \"name\"",[68,147203,51638],{"class":335},[68,147205,69470],{"class":78},[68,147207,31667],{"class":335},[68,147209,147210,147213,147215],{"class":70,"line":1387},[68,147211,147212],{"class":82},"  \"value\"",[68,147214,51638],{"class":335},[68,147216,97659],{"class":82},[68,147218,147219],{"class":70,"line":1402},[68,147220,1772],{"class":335},[19,147222,147223],{},"Python 与 JSON 的转换：",[58,147225,147227],{"className":30579,"code":147226,"language":30581,"meta":63,"style":63},"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",[65,147228,147229,147236,147240,147265,147269,147288,147295,147299,147309],{"__ignoreMap":63},[68,147230,147231,147233],{"class":70,"line":71},[68,147232,30593],{"class":331},[68,147234,147235],{"class":335}," json\n",[68,147237,147238],{"class":70,"line":92},[68,147239,2606],{"emptyLinePlaceholder":260},[68,147241,147242,147244,147246,147248,147250,147252,147254,147256,147259,147261,147263],{"class":70,"line":1387},[68,147243,101858],{"class":335},[68,147245,381],{"class":331},[68,147247,4654],{"class":335},[68,147249,62880],{"class":78},[68,147251,51638],{"class":335},[68,147253,69470],{"class":78},[68,147255,12640],{"class":335},[68,147257,147258],{"class":78},"\"value\"",[68,147260,51638],{"class":335},[68,147262,644],{"class":82},[68,147264,1772],{"class":335},[68,147266,147267],{"class":70,"line":1402},[68,147268,2606],{"emptyLinePlaceholder":260},[68,147270,147271,147274,147276,147279,147282,147284,147286],{"class":70,"line":1408},[68,147272,147273],{"class":335},"json_text ",[68,147275,381],{"class":331},[68,147277,147278],{"class":335}," json.dumps(data, ",[68,147280,147281],{"class":5421},"ensure_ascii",[68,147283,381],{"class":331},[68,147285,34188],{"class":82},[68,147287,342],{"class":335},[68,147289,147290,147292],{"class":70,"line":1422},[68,147291,30616],{"class":82},[68,147293,147294],{"class":335},"(json_text)\n",[68,147296,147297],{"class":70,"line":1428},[68,147298,2606],{"emptyLinePlaceholder":260},[68,147300,147301,147304,147306],{"class":70,"line":1519},[68,147302,147303],{"class":335},"new_data ",[68,147305,381],{"class":331},[68,147307,147308],{"class":335}," json.loads(json_text)\n",[68,147310,147311,147313],{"class":70,"line":1525},[68,147312,30616],{"class":82},[68,147314,147315],{"class":335},"(new_data)\n",[14,147317,147319],{"id":147318},"_103-安装pyecharts","10.3 安装pyecharts",[58,147321,147323],{"className":24027,"code":147322,"language":24029,"meta":63,"style":63},"pip install pyecharts\n",[65,147324,147325],{"__ignoreMap":63},[68,147326,147327,147329,147331],{"class":70,"line":71},[68,147328,24036],{"class":74},[68,147330,24039],{"class":78},[68,147332,147333],{"class":78}," pyecharts\n",[19,147335,147336],{},"验证：",[58,147338,147340],{"className":30579,"code":147339,"language":30581,"meta":63,"style":63},"import pyecharts\n\nprint(pyecharts.__version__)\n",[65,147341,147342,147348,147352],{"__ignoreMap":63},[68,147343,147344,147346],{"class":70,"line":71},[68,147345,30593],{"class":331},[68,147347,147333],{"class":335},[68,147349,147350],{"class":70,"line":92},[68,147351,2606],{"emptyLinePlaceholder":260},[68,147353,147354,147356,147359,147362],{"class":70,"line":1387},[68,147355,30616],{"class":82},[68,147357,147358],{"class":335},"(pyecharts.",[68,147360,147361],{"class":82},"__version__",[68,147363,342],{"class":335},[19,147365,147366],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147368,147370],{"id":147369},"_104-第一个折线图","10.4 第一个折线图",[58,147372,147374],{"className":30579,"code":147373,"language":30581,"meta":63,"style":63},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[65,147375,147376,147388,147392,147402,147432,147464],{"__ignoreMap":63},[68,147377,147378,147380,147383,147385],{"class":70,"line":71},[68,147379,30938],{"class":331},[68,147381,147382],{"class":335}," pyecharts.charts ",[68,147384,30593],{"class":331},[68,147386,147387],{"class":335}," Line\n",[68,147389,147390],{"class":70,"line":92},[68,147391,2606],{"emptyLinePlaceholder":260},[68,147393,147394,147397,147399],{"class":70,"line":1387},[68,147395,147396],{"class":335},"line ",[68,147398,381],{"class":331},[68,147400,147401],{"class":335}," Line()\n",[68,147403,147404,147407,147410,147412,147415,147417,147420,147422,147425,147427,147430],{"class":70,"line":1402},[68,147405,147406],{"class":335},"line.add_xaxis([",[68,147408,147409],{"class":78},"\"周一\"",[68,147411,12640],{"class":335},[68,147413,147414],{"class":78},"\"周二\"",[68,147416,12640],{"class":335},[68,147418,147419],{"class":78},"\"周三\"",[68,147421,12640],{"class":335},[68,147423,147424],{"class":78},"\"周四\"",[68,147426,12640],{"class":335},[68,147428,147429],{"class":78},"\"周五\"",[68,147431,4863],{"class":335},[68,147433,147434,147437,147440,147442,147444,147446,147448,147450,147452,147454,147457,147459,147462],{"class":70,"line":1408},[68,147435,147436],{"class":335},"line.add_yaxis(",[68,147438,147439],{"class":78},"\"销售额\"",[68,147441,77719],{"class":335},[68,147443,644],{"class":82},[68,147445,12640],{"class":335},[68,147447,1150],{"class":82},[68,147449,12640],{"class":335},[68,147451,1195],{"class":82},[68,147453,12640],{"class":335},[68,147455,147456],{"class":82},"150",[68,147458,12640],{"class":335},[68,147460,147461],{"class":82},"180",[68,147463,4863],{"class":335},[68,147465,147466,147469,147472],{"class":70,"line":1422},[68,147467,147468],{"class":335},"line.render(",[68,147470,147471],{"class":78},"\"line.html\"",[68,147473,342],{"class":335},[19,147475,147476,147477,147480],{},"运行后会生成 ",[65,147478,147479],{},"line.html","，用浏览器打开即可看到图表。",[19,147482,147483],{},"核心步骤：",[23,147485,147486,147489,147492,147495,147498],{},[26,147487,147488],{},"导入图表类。",[26,147490,147491],{},"创建图表对象。",[26,147493,147494],{},"添加 x 轴数据。",[26,147496,147497],{},"添加 y 轴数据。",[26,147499,147500],{},"渲染为 HTML。",[14,147502,147504],{"id":147503},"_105-全局配置","10.5 全局配置",[19,147506,147507,147508,147511],{},"常用配置在 ",[65,147509,147510],{},"pyecharts.options"," 中。",[58,147513,147515],{"className":30579,"code":147514,"language":30581,"meta":63,"style":63},"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",[65,147516,147517,147534,147544,147548,147556,147580,147608,147613,147632,147651,147669,147689,147693],{"__ignoreMap":63},[68,147518,147519,147521,147524,147526,147529,147531],{"class":70,"line":71},[68,147520,30938],{"class":331},[68,147522,147523],{"class":335}," pyecharts ",[68,147525,30593],{"class":331},[68,147527,147528],{"class":335}," options ",[68,147530,31584],{"class":331},[68,147532,147533],{"class":335}," opts\n",[68,147535,147536,147538,147540,147542],{"class":70,"line":92},[68,147537,30938],{"class":331},[68,147539,147382],{"class":335},[68,147541,30593],{"class":331},[68,147543,147387],{"class":335},[68,147545,147546],{"class":70,"line":1387},[68,147547,2606],{"emptyLinePlaceholder":260},[68,147549,147550,147552,147554],{"class":70,"line":1402},[68,147551,147396],{"class":335},[68,147553,381],{"class":331},[68,147555,147401],{"class":335},[68,147557,147558,147560,147562,147564,147566,147568,147570,147572,147574,147576,147578],{"class":70,"line":1408},[68,147559,147406],{"class":335},[68,147561,147409],{"class":78},[68,147563,12640],{"class":335},[68,147565,147414],{"class":78},[68,147567,12640],{"class":335},[68,147569,147419],{"class":78},[68,147571,12640],{"class":335},[68,147573,147424],{"class":78},[68,147575,12640],{"class":335},[68,147577,147429],{"class":78},[68,147579,4863],{"class":335},[68,147581,147582,147584,147586,147588,147590,147592,147594,147596,147598,147600,147602,147604,147606],{"class":70,"line":1422},[68,147583,147436],{"class":335},[68,147585,147439],{"class":78},[68,147587,77719],{"class":335},[68,147589,644],{"class":82},[68,147591,12640],{"class":335},[68,147593,1150],{"class":82},[68,147595,12640],{"class":335},[68,147597,1195],{"class":82},[68,147599,12640],{"class":335},[68,147601,147456],{"class":82},[68,147603,12640],{"class":335},[68,147605,147461],{"class":82},[68,147607,4863],{"class":335},[68,147609,147610],{"class":70,"line":1428},[68,147611,147612],{"class":335},"line.set_global_opts(\n",[68,147614,147615,147618,147620,147623,147625,147627,147630],{"class":70,"line":1519},[68,147616,147617],{"class":5421},"    title_opts",[68,147619,381],{"class":331},[68,147621,147622],{"class":335},"opts.TitleOpts(",[68,147624,51608],{"class":5421},[68,147626,381],{"class":331},[68,147628,147629],{"class":78},"\"一周销售额\"",[68,147631,38248],{"class":335},[68,147633,147634,147637,147639,147642,147644,147646,147649],{"class":70,"line":1525},[68,147635,147636],{"class":5421},"    xaxis_opts",[68,147638,381],{"class":331},[68,147640,147641],{"class":335},"opts.AxisOpts(",[68,147643,80011],{"class":5421},[68,147645,381],{"class":331},[68,147647,147648],{"class":78},"\"日期\"",[68,147650,38248],{"class":335},[68,147652,147653,147656,147658,147660,147662,147664,147667],{"class":70,"line":1537},[68,147654,147655],{"class":5421},"    yaxis_opts",[68,147657,381],{"class":331},[68,147659,147641],{"class":335},[68,147661,80011],{"class":5421},[68,147663,381],{"class":331},[68,147665,147666],{"class":78},"\"金额\"",[68,147668,38248],{"class":335},[68,147670,147671,147674,147676,147679,147682,147684,147687],{"class":70,"line":1819},[68,147672,147673],{"class":5421},"    tooltip_opts",[68,147675,381],{"class":331},[68,147677,147678],{"class":335},"opts.TooltipOpts(",[68,147680,147681],{"class":5421},"trigger",[68,147683,381],{"class":331},[68,147685,147686],{"class":78},"\"axis\"",[68,147688,38248],{"class":335},[68,147690,147691],{"class":70,"line":1824},[68,147692,342],{"class":335},[68,147694,147695,147697,147699],{"class":70,"line":1830},[68,147696,147468],{"class":335},[68,147698,147471],{"class":78},[68,147700,342],{"class":335},[19,147702,147703],{},"常见全局配置：",[471,147705,147706,147715],{},[474,147707,147708],{},[477,147709,147710,147713],{},[480,147711,147712],{},"配置",[480,147714,102896],{},[518,147716,147717,147727,147737,147747,147757,147767],{},[477,147718,147719,147724],{},[523,147720,147721],{},[65,147722,147723],{},"TitleOpts",[523,147725,147726],{},"标题",[477,147728,147729,147734],{},[523,147730,147731],{},[65,147732,147733],{},"LegendOpts",[523,147735,147736],{},"图例",[477,147738,147739,147744],{},[523,147740,147741],{},[65,147742,147743],{},"TooltipOpts",[523,147745,147746],{},"提示框",[477,147748,147749,147754],{},[523,147750,147751],{},[65,147752,147753],{},"AxisOpts",[523,147755,147756],{},"坐标轴",[477,147758,147759,147764],{},[523,147760,147761],{},[65,147762,147763],{},"VisualMapOpts",[523,147765,147766],{},"视觉映射",[477,147768,147769,147774],{},[523,147770,147771],{},[65,147772,147773],{},"DataZoomOpts",[523,147775,147776],{},"区域缩放",[14,147778,147780],{"id":147779},"_106-系列配置","10.6 系列配置",[19,147782,147783],{},"系列配置作用于某一组数据。",[58,147785,147787],{"className":30579,"code":147786,"language":30581,"meta":63,"style":63},"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",[65,147788,147789,147794,147805,147834,147845,147864],{"__ignoreMap":63},[68,147790,147791],{"class":70,"line":71},[68,147792,147793],{"class":335},"line.add_yaxis(\n",[68,147795,147796,147799,147801,147803],{"class":70,"line":92},[68,147797,147798],{"class":5421},"    series_name",[68,147800,381],{"class":331},[68,147802,147439],{"class":78},[68,147804,31667],{"class":335},[68,147806,147807,147810,147812,147814,147816,147818,147820,147822,147824,147826,147828,147830,147832],{"class":70,"line":1387},[68,147808,147809],{"class":5421},"    y_axis",[68,147811,381],{"class":331},[68,147813,1223],{"class":335},[68,147815,644],{"class":82},[68,147817,12640],{"class":335},[68,147819,1150],{"class":82},[68,147821,12640],{"class":335},[68,147823,1195],{"class":82},[68,147825,12640],{"class":335},[68,147827,147456],{"class":82},[68,147829,12640],{"class":335},[68,147831,147461],{"class":82},[68,147833,88037],{"class":335},[68,147835,147836,147839,147841,147843],{"class":70,"line":1402},[68,147837,147838],{"class":5421},"    is_smooth",[68,147840,381],{"class":331},[68,147842,31677],{"class":82},[68,147844,31667],{"class":335},[68,147846,147847,147850,147852,147855,147858,147860,147862],{"class":70,"line":1408},[68,147848,147849],{"class":5421},"    label_opts",[68,147851,381],{"class":331},[68,147853,147854],{"class":335},"opts.LabelOpts(",[68,147856,147857],{"class":5421},"is_show",[68,147859,381],{"class":331},[68,147861,31677],{"class":82},[68,147863,38248],{"class":335},[68,147865,147866],{"class":70,"line":1422},[68,147867,342],{"class":335},[19,147869,147870],{},"常用参数：",[23,147872,147873,147879,147885,147891,147897],{},[26,147874,147875,147878],{},[65,147876,147877],{},"series_name","：系列名称。",[26,147880,147881,147884],{},[65,147882,147883],{},"y_axis","：y 轴数据。",[26,147886,147887,147890],{},[65,147888,147889],{},"is_smooth","：是否平滑曲线。",[26,147892,147893,147896],{},[65,147894,147895],{},"label_opts","：标签配置。",[26,147898,147899,147902],{},[65,147900,147901],{},"symbol_size","：标记点大小。",[14,147904,147906],{"id":147905},"_107-多条折线","10.7 多条折线",[58,147908,147910],{"className":30579,"code":147909,"language":30581,"meta":63,"style":63},"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",[65,147911,147912,147926,147936,147940,147969,147973,147981,147986,148024,148061,148065,148082,148098,148102],{"__ignoreMap":63},[68,147913,147914,147916,147918,147920,147922,147924],{"class":70,"line":71},[68,147915,30938],{"class":331},[68,147917,147523],{"class":335},[68,147919,30593],{"class":331},[68,147921,147528],{"class":335},[68,147923,31584],{"class":331},[68,147925,147533],{"class":335},[68,147927,147928,147930,147932,147934],{"class":70,"line":92},[68,147929,30938],{"class":331},[68,147931,147382],{"class":335},[68,147933,30593],{"class":331},[68,147935,147387],{"class":335},[68,147937,147938],{"class":70,"line":1387},[68,147939,2606],{"emptyLinePlaceholder":260},[68,147941,147942,147945,147947,147949,147951,147953,147955,147957,147959,147961,147963,147965,147967],{"class":70,"line":1402},[68,147943,147944],{"class":335},"dates ",[68,147946,381],{"class":331},[68,147948,52427],{"class":335},[68,147950,147409],{"class":78},[68,147952,12640],{"class":335},[68,147954,147414],{"class":78},[68,147956,12640],{"class":335},[68,147958,147419],{"class":78},[68,147960,12640],{"class":335},[68,147962,147424],{"class":78},[68,147964,12640],{"class":335},[68,147966,147429],{"class":78},[68,147968,33447],{"class":335},[68,147970,147971],{"class":70,"line":1408},[68,147972,2606],{"emptyLinePlaceholder":260},[68,147974,147975,147977,147979],{"class":70,"line":1422},[68,147976,147396],{"class":335},[68,147978,381],{"class":331},[68,147980,147401],{"class":335},[68,147982,147983],{"class":70,"line":1428},[68,147984,147985],{"class":335},"line.add_xaxis(dates)\n",[68,147987,147988,147990,147993,147995,147997,147999,148002,148004,148006,148008,148010,148012,148014,148016,148018,148020,148022],{"class":70,"line":1519},[68,147989,147436],{"class":335},[68,147991,147992],{"class":78},"\"线上销售\"",[68,147994,77719],{"class":335},[68,147996,644],{"class":82},[68,147998,12640],{"class":335},[68,148000,148001],{"class":82},"130",[68,148003,12640],{"class":335},[68,148005,1150],{"class":82},[68,148007,12640],{"class":335},[68,148009,21253],{"class":82},[68,148011,12640],{"class":335},[68,148013,1929],{"class":82},[68,148015,112402],{"class":335},[68,148017,147889],{"class":5421},[68,148019,381],{"class":331},[68,148021,31677],{"class":82},[68,148023,342],{"class":335},[68,148025,148026,148028,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055,148057,148059],{"class":70,"line":1525},[68,148027,147436],{"class":335},[68,148029,148030],{"class":78},"\"线下销售\"",[68,148032,77719],{"class":335},[68,148034,945],{"class":82},[68,148036,12640],{"class":335},[68,148038,1195],{"class":82},[68,148040,12640],{"class":335},[68,148042,644],{"class":82},[68,148044,12640],{"class":335},[68,148046,1150],{"class":82},[68,148048,12640],{"class":335},[68,148050,147456],{"class":82},[68,148052,112402],{"class":335},[68,148054,147889],{"class":5421},[68,148056,381],{"class":331},[68,148058,31677],{"class":82},[68,148060,342],{"class":335},[68,148062,148063],{"class":70,"line":1537},[68,148064,147612],{"class":335},[68,148066,148067,148069,148071,148073,148075,148077,148080],{"class":70,"line":1819},[68,148068,147617],{"class":5421},[68,148070,381],{"class":331},[68,148072,147622],{"class":335},[68,148074,51608],{"class":5421},[68,148076,381],{"class":331},[68,148078,148079],{"class":78},"\"线上线下销售趋势\"",[68,148081,38248],{"class":335},[68,148083,148084,148086,148088,148090,148092,148094,148096],{"class":70,"line":1824},[68,148085,147673],{"class":5421},[68,148087,381],{"class":331},[68,148089,147678],{"class":335},[68,148091,147681],{"class":5421},[68,148093,381],{"class":331},[68,148095,147686],{"class":78},[68,148097,38248],{"class":335},[68,148099,148100],{"class":70,"line":1830},[68,148101,342],{"class":335},[68,148103,148104,148106,148109],{"class":70,"line":1835},[68,148105,147468],{"class":335},[68,148107,148108],{"class":78},"\"sales.html\"",[68,148110,342],{"class":335},[19,148112,148113],{},"多条折线适合比较不同指标或不同地区。",[14,148115,148117],{"id":148116},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148119,148120,148121,24822],{},"假设 ",[65,148122,148123],{},"sales.json",[58,148125,148127],{"className":147189,"code":148126,"language":145936,"meta":63,"style":63},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[65,148128,148129,148134,148166,148194,148222],{"__ignoreMap":63},[68,148130,148131],{"class":70,"line":71},[68,148132,148133],{"class":335},"[\n",[68,148135,148136,148139,148142,148144,148146,148148,148151,148153,148155,148157,148160,148162,148164],{"class":70,"line":92},[68,148137,148138],{"class":335},"  {",[68,148140,148141],{"class":82},"\"date\"",[68,148143,51638],{"class":335},[68,148145,147409],{"class":78},[68,148147,12640],{"class":335},[68,148149,148150],{"class":82},"\"online\"",[68,148152,51638],{"class":335},[68,148154,644],{"class":82},[68,148156,12640],{"class":335},[68,148158,148159],{"class":82},"\"offline\"",[68,148161,51638],{"class":335},[68,148163,945],{"class":82},[68,148165,5136],{"class":335},[68,148167,148168,148170,148172,148174,148176,148178,148180,148182,148184,148186,148188,148190,148192],{"class":70,"line":1387},[68,148169,148138],{"class":335},[68,148171,148141],{"class":82},[68,148173,51638],{"class":335},[68,148175,147414],{"class":78},[68,148177,12640],{"class":335},[68,148179,148150],{"class":82},[68,148181,51638],{"class":335},[68,148183,148001],{"class":82},[68,148185,12640],{"class":335},[68,148187,148159],{"class":82},[68,148189,51638],{"class":335},[68,148191,1195],{"class":82},[68,148193,5136],{"class":335},[68,148195,148196,148198,148200,148202,148204,148206,148208,148210,148212,148214,148216,148218,148220],{"class":70,"line":1402},[68,148197,148138],{"class":335},[68,148199,148141],{"class":82},[68,148201,51638],{"class":335},[68,148203,147419],{"class":78},[68,148205,12640],{"class":335},[68,148207,148150],{"class":82},[68,148209,51638],{"class":335},[68,148211,1150],{"class":82},[68,148213,12640],{"class":335},[68,148215,148159],{"class":82},[68,148217,51638],{"class":335},[68,148219,644],{"class":82},[68,148221,1772],{"class":335},[68,148223,148224],{"class":70,"line":1408},[68,148225,33447],{"class":335},[19,148227,148228],{},"读取并绘图：",[58,148230,148232],{"className":30579,"code":148231,"language":30581,"meta":63,"style":63},"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",[65,148233,148234,148240,148254,148264,148268,148300,148313,148317,148325,148334,148343,148347,148359,148368,148377,148386,148390,148398,148402,148419,148436,148440,148457,148473,148477],{"__ignoreMap":63},[68,148235,148236,148238],{"class":70,"line":71},[68,148237,30593],{"class":331},[68,148239,147235],{"class":335},[68,148241,148242,148244,148246,148248,148250,148252],{"class":70,"line":92},[68,148243,30938],{"class":331},[68,148245,147523],{"class":335},[68,148247,30593],{"class":331},[68,148249,147528],{"class":335},[68,148251,31584],{"class":331},[68,148253,147533],{"class":335},[68,148255,148256,148258,148260,148262],{"class":70,"line":1387},[68,148257,30938],{"class":331},[68,148259,147382],{"class":335},[68,148261,30593],{"class":331},[68,148263,147387],{"class":335},[68,148265,148266],{"class":70,"line":1402},[68,148267,2606],{"emptyLinePlaceholder":260},[68,148269,148270,148272,148274,148276,148279,148281,148283,148285,148287,148289,148291,148293,148295,148298],{"class":70,"line":1408},[68,148271,108033],{"class":331},[68,148273,146935],{"class":82},[68,148275,336],{"class":335},[68,148277,148278],{"class":78},"\"sales.json\"",[68,148280,12640],{"class":335},[68,148282,146945],{"class":78},[68,148284,12640],{"class":335},[68,148286,146950],{"class":5421},[68,148288,381],{"class":331},[68,148290,146955],{"class":78},[68,148292,13919],{"class":335},[68,148294,31584],{"class":331},[68,148296,148297],{"class":5421}," file",[68,148299,3945],{"class":335},[68,148301,148302,148304,148306,148309,148311],{"class":70,"line":1422},[68,148303,101621],{"class":335},[68,148305,381],{"class":331},[68,148307,148308],{"class":335}," json.load(",[68,148310,45555],{"class":5421},[68,148312,342],{"class":335},[68,148314,148315],{"class":70,"line":1428},[68,148316,2606],{"emptyLinePlaceholder":260},[68,148318,148319,148321,148323],{"class":70,"line":1519},[68,148320,147944],{"class":335},[68,148322,381],{"class":331},[68,148324,52039],{"class":335},[68,148326,148327,148330,148332],{"class":70,"line":1525},[68,148328,148329],{"class":335},"online_sales ",[68,148331,381],{"class":331},[68,148333,52039],{"class":335},[68,148335,148336,148339,148341],{"class":70,"line":1537},[68,148337,148338],{"class":335},"offline_sales ",[68,148340,381],{"class":331},[68,148342,52039],{"class":335},[68,148344,148345],{"class":70,"line":1819},[68,148346,2606],{"emptyLinePlaceholder":260},[68,148348,148349,148351,148354,148356],{"class":70,"line":1824},[68,148350,3231],{"class":331},[68,148352,148353],{"class":335}," item ",[68,148355,26247],{"class":331},[68,148357,148358],{"class":335}," data:\n",[68,148360,148361,148364,148366],{"class":70,"line":1830},[68,148362,148363],{"class":335},"    dates.append(item[",[68,148365,148141],{"class":78},[68,148367,4863],{"class":335},[68,148369,148370,148373,148375],{"class":70,"line":1835},[68,148371,148372],{"class":335},"    online_sales.append(item[",[68,148374,148150],{"class":78},[68,148376,4863],{"class":335},[68,148378,148379,148382,148384],{"class":70,"line":1849},[68,148380,148381],{"class":335},"    offline_sales.append(item[",[68,148383,148159],{"class":78},[68,148385,4863],{"class":335},[68,148387,148388],{"class":70,"line":1854},[68,148389,2606],{"emptyLinePlaceholder":260},[68,148391,148392,148394,148396],{"class":70,"line":1860},[68,148393,147396],{"class":335},[68,148395,381],{"class":331},[68,148397,147401],{"class":335},[68,148399,148400],{"class":70,"line":1881},[68,148401,147985],{"class":335},[68,148403,148404,148406,148408,148411,148413,148415,148417],{"class":70,"line":1886},[68,148405,147436],{"class":335},[68,148407,147992],{"class":78},[68,148409,148410],{"class":335},", online_sales, ",[68,148412,147889],{"class":5421},[68,148414,381],{"class":331},[68,148416,31677],{"class":82},[68,148418,342],{"class":335},[68,148420,148421,148423,148425,148428,148430,148432,148434],{"class":70,"line":1900},[68,148422,147436],{"class":335},[68,148424,148030],{"class":78},[68,148426,148427],{"class":335},", offline_sales, ",[68,148429,147889],{"class":5421},[68,148431,381],{"class":331},[68,148433,31677],{"class":82},[68,148435,342],{"class":335},[68,148437,148438],{"class":70,"line":1905},[68,148439,147612],{"class":335},[68,148441,148442,148444,148446,148448,148450,148452,148455],{"class":70,"line":1934},[68,148443,147617],{"class":5421},[68,148445,381],{"class":331},[68,148447,147622],{"class":335},[68,148449,51608],{"class":5421},[68,148451,381],{"class":331},[68,148453,148454],{"class":78},"\"销售趋势\"",[68,148456,38248],{"class":335},[68,148458,148459,148461,148463,148465,148467,148469,148471],{"class":70,"line":1939},[68,148460,147673],{"class":5421},[68,148462,381],{"class":331},[68,148464,147678],{"class":335},[68,148466,147681],{"class":5421},[68,148468,381],{"class":331},[68,148470,147686],{"class":78},[68,148472,38248],{"class":335},[68,148474,148475],{"class":70,"line":1956},[68,148476,342],{"class":335},[68,148478,148479,148481,148483],{"class":70,"line":1961},[68,148480,147468],{"class":335},[68,148482,148108],{"class":78},[68,148484,342],{"class":335},[14,148486,148488],{"id":148487},"_109-数据清洗","10.9 数据清洗",[19,148490,148491],{},"真实数据经常不整齐，需要清洗。",[19,148493,148494],{},"常见问题：",[23,148496,148497,148500,148503,148506],{},[26,148498,148499],{},"数字是字符串。",[26,148501,148502],{},"字段缺失。",[26,148504,148505],{},"空值。",[26,148507,148508],{},"日期格式不统一。",[19,148510,15340],{},[58,148512,148514],{"className":30579,"code":148513,"language":30581,"meta":63,"style":63},"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",[65,148515,148516,148525,148548,148568,148589,148593,148597,148605,148614,148618,148629,148643,148652,148657,148661,148669,148679,148683,148690],{"__ignoreMap":63},[68,148517,148518,148521,148523],{"class":70,"line":71},[68,148519,148520],{"class":335},"raw_data ",[68,148522,381],{"class":331},[68,148524,55648],{"class":335},[68,148526,148527,148530,148532,148534,148536,148538,148541,148543,148546],{"class":70,"line":92},[68,148528,148529],{"class":335},"    {",[68,148531,148141],{"class":78},[68,148533,51638],{"class":335},[68,148535,147409],{"class":78},[68,148537,12640],{"class":335},[68,148539,148540],{"class":78},"\"sales\"",[68,148542,51638],{"class":335},[68,148544,148545],{"class":78},"\"100\"",[68,148547,5136],{"class":335},[68,148549,148550,148552,148554,148556,148558,148560,148562,148564,148566],{"class":70,"line":1387},[68,148551,148529],{"class":335},[68,148553,148141],{"class":78},[68,148555,51638],{"class":335},[68,148557,147414],{"class":78},[68,148559,12640],{"class":335},[68,148561,148540],{"class":78},[68,148563,51638],{"class":335},[68,148565,7857],{"class":78},[68,148567,5136],{"class":335},[68,148569,148570,148572,148574,148576,148578,148580,148582,148584,148587],{"class":70,"line":1402},[68,148571,148529],{"class":335},[68,148573,148141],{"class":78},[68,148575,51638],{"class":335},[68,148577,147419],{"class":78},[68,148579,12640],{"class":335},[68,148581,148540],{"class":78},[68,148583,51638],{"class":335},[68,148585,148586],{"class":78},"\"120\"",[68,148588,5136],{"class":335},[68,148590,148591],{"class":70,"line":1408},[68,148592,33447],{"class":335},[68,148594,148595],{"class":70,"line":1422},[68,148596,2606],{"emptyLinePlaceholder":260},[68,148598,148599,148601,148603],{"class":70,"line":1428},[68,148600,147944],{"class":335},[68,148602,381],{"class":331},[68,148604,52039],{"class":335},[68,148606,148607,148610,148612],{"class":70,"line":1519},[68,148608,148609],{"class":335},"sales ",[68,148611,381],{"class":331},[68,148613,52039],{"class":335},[68,148615,148616],{"class":70,"line":1525},[68,148617,2606],{"emptyLinePlaceholder":260},[68,148619,148620,148622,148624,148626],{"class":70,"line":1537},[68,148621,3231],{"class":331},[68,148623,148353],{"class":335},[68,148625,26247],{"class":331},[68,148627,148628],{"class":335}," raw_data:\n",[68,148630,148631,148634,148636,148639,148641],{"class":70,"line":1819},[68,148632,148633],{"class":335},"    value ",[68,148635,381],{"class":331},[68,148637,148638],{"class":335}," item.get(",[68,148640,148540],{"class":78},[68,148642,342],{"class":335},[68,148644,148645,148647,148649],{"class":70,"line":1824},[68,148646,3307],{"class":331},[68,148648,39131],{"class":331},[68,148650,148651],{"class":335}," value:\n",[68,148653,148654],{"class":70,"line":1830},[68,148655,148656],{"class":331},"        continue\n",[68,148658,148659],{"class":70,"line":1835},[68,148660,2606],{"emptyLinePlaceholder":260},[68,148662,148663,148665,148667],{"class":70,"line":1849},[68,148664,148363],{"class":335},[68,148666,148141],{"class":78},[68,148668,4863],{"class":335},[68,148670,148671,148674,148676],{"class":70,"line":1854},[68,148672,148673],{"class":335},"    sales.append(",[68,148675,339],{"class":82},[68,148677,148678],{"class":335},"(value))\n",[68,148680,148681],{"class":70,"line":1860},[68,148682,2606],{"emptyLinePlaceholder":260},[68,148684,148685,148687],{"class":70,"line":1881},[68,148686,30616],{"class":82},[68,148688,148689],{"class":335},"(dates)\n",[68,148691,148692,148694],{"class":70,"line":1886},[68,148693,30616],{"class":82},[68,148695,148696],{"class":335},"(sales)\n",[14,148698,148700],{"id":148699},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[58,148702,148704],{"className":30579,"code":148703,"language":30581,"meta":63,"style":63},"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",[65,148705,148706,148720,148730,148734,148742,148763,148785,148807,148829,148851,148855,148859,148881,148902,148906,148914,148918,148922,148932,148941,148951,148967,148971,148975,148992,149008,149024,149040,149050,149054],{"__ignoreMap":63},[68,148707,148708,148710,148712,148714,148716,148718],{"class":70,"line":71},[68,148709,30938],{"class":331},[68,148711,147523],{"class":335},[68,148713,30593],{"class":331},[68,148715,147528],{"class":335},[68,148717,31584],{"class":331},[68,148719,147533],{"class":335},[68,148721,148722,148724,148726,148728],{"class":70,"line":92},[68,148723,30938],{"class":331},[68,148725,147382],{"class":335},[68,148727,30593],{"class":331},[68,148729,147387],{"class":335},[68,148731,148732],{"class":70,"line":1387},[68,148733,2606],{"emptyLinePlaceholder":260},[68,148735,148736,148738,148740],{"class":70,"line":1402},[68,148737,148609],{"class":335},[68,148739,381],{"class":331},[68,148741,55648],{"class":335},[68,148743,148744,148746,148748,148750,148753,148755,148757,148759,148761],{"class":70,"line":1408},[68,148745,148529],{"class":335},[68,148747,148141],{"class":78},[68,148749,51638],{"class":335},[68,148751,148752],{"class":78},"\"2024-10-01\"",[68,148754,12640],{"class":335},[68,148756,84285],{"class":78},[68,148758,51638],{"class":335},[68,148760,92224],{"class":82},[68,148762,5136],{"class":335},[68,148764,148765,148767,148769,148771,148774,148776,148778,148780,148783],{"class":70,"line":1422},[68,148766,148529],{"class":335},[68,148768,148141],{"class":78},[68,148770,51638],{"class":335},[68,148772,148773],{"class":78},"\"2024-10-02\"",[68,148775,12640],{"class":335},[68,148777,84285],{"class":78},[68,148779,51638],{"class":335},[68,148781,148782],{"class":82},"1800",[68,148784,5136],{"class":335},[68,148786,148787,148789,148791,148793,148796,148798,148800,148802,148805],{"class":70,"line":1428},[68,148788,148529],{"class":335},[68,148790,148141],{"class":78},[68,148792,51638],{"class":335},[68,148794,148795],{"class":78},"\"2024-10-03\"",[68,148797,12640],{"class":335},[68,148799,84285],{"class":78},[68,148801,51638],{"class":335},[68,148803,148804],{"class":82},"1500",[68,148806,5136],{"class":335},[68,148808,148809,148811,148813,148815,148818,148820,148822,148824,148827],{"class":70,"line":1519},[68,148810,148529],{"class":335},[68,148812,148141],{"class":78},[68,148814,51638],{"class":335},[68,148816,148817],{"class":78},"\"2024-10-04\"",[68,148819,12640],{"class":335},[68,148821,84285],{"class":78},[68,148823,51638],{"class":335},[68,148825,148826],{"class":82},"2100",[68,148828,5136],{"class":335},[68,148830,148831,148833,148835,148837,148840,148842,148844,148846,148849],{"class":70,"line":1525},[68,148832,148529],{"class":335},[68,148834,148141],{"class":78},[68,148836,51638],{"class":335},[68,148838,148839],{"class":78},"\"2024-10-05\"",[68,148841,12640],{"class":335},[68,148843,84285],{"class":78},[68,148845,51638],{"class":335},[68,148847,148848],{"class":82},"2600",[68,148850,5136],{"class":335},[68,148852,148853],{"class":70,"line":1537},[68,148854,33447],{"class":335},[68,148856,148857],{"class":70,"line":1819},[68,148858,2606],{"emptyLinePlaceholder":260},[68,148860,148861,148863,148865,148868,148870,148872,148874,148876,148878],{"class":70,"line":1824},[68,148862,147944],{"class":335},[68,148864,381],{"class":331},[68,148866,148867],{"class":335}," [item[",[68,148869,148141],{"class":78},[68,148871,4649],{"class":335},[68,148873,3231],{"class":331},[68,148875,148353],{"class":335},[68,148877,26247],{"class":331},[68,148879,148880],{"class":335}," sales]\n",[68,148882,148883,148886,148888,148890,148892,148894,148896,148898,148900],{"class":70,"line":1830},[68,148884,148885],{"class":335},"amounts ",[68,148887,381],{"class":331},[68,148889,148867],{"class":335},[68,148891,84285],{"class":78},[68,148893,4649],{"class":335},[68,148895,3231],{"class":331},[68,148897,148353],{"class":335},[68,148899,26247],{"class":331},[68,148901,148880],{"class":335},[68,148903,148904],{"class":70,"line":1835},[68,148905,2606],{"emptyLinePlaceholder":260},[68,148907,148908,148910,148912],{"class":70,"line":1849},[68,148909,147396],{"class":335},[68,148911,381],{"class":331},[68,148913,147401],{"class":335},[68,148915,148916],{"class":70,"line":1854},[68,148917,147985],{"class":335},[68,148919,148920],{"class":70,"line":1860},[68,148921,147793],{"class":335},[68,148923,148924,148926,148928,148930],{"class":70,"line":1881},[68,148925,147798],{"class":5421},[68,148927,381],{"class":331},[68,148929,147439],{"class":78},[68,148931,31667],{"class":335},[68,148933,148934,148936,148938],{"class":70,"line":1886},[68,148935,147809],{"class":5421},[68,148937,381],{"class":331},[68,148939,148940],{"class":335},"amounts,\n",[68,148942,148943,148945,148947,148949],{"class":70,"line":1900},[68,148944,147838],{"class":5421},[68,148946,381],{"class":331},[68,148948,31677],{"class":82},[68,148950,31667],{"class":335},[68,148952,148953,148955,148957,148959,148961,148963,148965],{"class":70,"line":1905},[68,148954,147849],{"class":5421},[68,148956,381],{"class":331},[68,148958,147854],{"class":335},[68,148960,147857],{"class":5421},[68,148962,381],{"class":331},[68,148964,31677],{"class":82},[68,148966,38248],{"class":335},[68,148968,148969],{"class":70,"line":1934},[68,148970,342],{"class":335},[68,148972,148973],{"class":70,"line":1939},[68,148974,147612],{"class":335},[68,148976,148977,148979,148981,148983,148985,148987,148990],{"class":70,"line":1956},[68,148978,147617],{"class":5421},[68,148980,381],{"class":331},[68,148982,147622],{"class":335},[68,148984,51608],{"class":5421},[68,148986,381],{"class":331},[68,148988,148989],{"class":78},"\"每日销售额\"",[68,148991,38248],{"class":335},[68,148993,148994,148996,148998,149000,149002,149004,149006],{"class":70,"line":1961},[68,148995,147636],{"class":5421},[68,148997,381],{"class":331},[68,148999,147641],{"class":335},[68,149001,80011],{"class":5421},[68,149003,381],{"class":331},[68,149005,147648],{"class":78},[68,149007,38248],{"class":335},[68,149009,149010,149012,149014,149016,149018,149020,149022],{"class":70,"line":1966},[68,149011,147655],{"class":5421},[68,149013,381],{"class":331},[68,149015,147641],{"class":335},[68,149017,80011],{"class":5421},[68,149019,381],{"class":331},[68,149021,147666],{"class":78},[68,149023,38248],{"class":335},[68,149025,149026,149028,149030,149032,149034,149036,149038],{"class":70,"line":1971},[68,149027,147673],{"class":5421},[68,149029,381],{"class":331},[68,149031,147678],{"class":335},[68,149033,147681],{"class":5421},[68,149035,381],{"class":331},[68,149037,147686],{"class":78},[68,149039,38248],{"class":335},[68,149041,149042,149045,149047],{"class":70,"line":1985},[68,149043,149044],{"class":5421},"    datazoom_opts",[68,149046,381],{"class":331},[68,149048,149049],{"class":335},"[opts.DataZoomOpts()],\n",[68,149051,149052],{"class":70,"line":1990},[68,149053,342],{"class":335},[68,149055,149056,149058,149061],{"class":70,"line":2783},[68,149057,147468],{"class":335},[68,149059,149060],{"class":78},"\"daily_sales.html\"",[68,149062,342],{"class":335},[19,149064,149065,149068],{},[65,149066,149067],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149070,149072],{"id":149071},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149074,149075],{},"如果数据结构如下：",[58,149077,149079],{"className":30579,"code":149078,"language":30581,"meta":63,"style":63},"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",[65,149080,149081,149089,149097,149119,149140,149145,149152,149172,149192,149196],{"__ignoreMap":63},[68,149082,149083,149085,149087],{"class":70,"line":71},[68,149084,101858],{"class":335},[68,149086,381],{"class":331},[68,149088,15777],{"class":335},[68,149090,149091,149094],{"class":70,"line":92},[68,149092,149093],{"class":78},"    \"北京\"",[68,149095,149096],{"class":335},": [\n",[68,149098,149099,149101,149103,149105,149108,149110,149113,149115,149117],{"class":70,"line":1387},[68,149100,5123],{"class":335},[68,149102,148141],{"class":78},[68,149104,51638],{"class":335},[68,149106,149107],{"class":78},"\"2024-01-01\"",[68,149109,12640],{"class":335},[68,149111,149112],{"class":78},"\"confirm\"",[68,149114,51638],{"class":335},[68,149116,779],{"class":82},[68,149118,5136],{"class":335},[68,149120,149121,149123,149125,149127,149130,149132,149134,149136,149138],{"class":70,"line":1402},[68,149122,5123],{"class":335},[68,149124,148141],{"class":78},[68,149126,51638],{"class":335},[68,149128,149129],{"class":78},"\"2024-01-02\"",[68,149131,12640],{"class":335},[68,149133,149112],{"class":78},[68,149135,51638],{"class":335},[68,149137,831],{"class":82},[68,149139,5136],{"class":335},[68,149141,149142],{"class":70,"line":1408},[68,149143,149144],{"class":335},"    ],\n",[68,149146,149147,149150],{"class":70,"line":1422},[68,149148,149149],{"class":78},"    \"上海\"",[68,149151,149096],{"class":335},[68,149153,149154,149156,149158,149160,149162,149164,149166,149168,149170],{"class":70,"line":1428},[68,149155,5123],{"class":335},[68,149157,148141],{"class":78},[68,149159,51638],{"class":335},[68,149161,149107],{"class":78},[68,149163,12640],{"class":335},[68,149165,149112],{"class":78},[68,149167,51638],{"class":335},[68,149169,728],{"class":82},[68,149171,5136],{"class":335},[68,149173,149174,149176,149178,149180,149182,149184,149186,149188,149190],{"class":70,"line":1519},[68,149175,5123],{"class":335},[68,149177,148141],{"class":78},[68,149179,51638],{"class":335},[68,149181,149129],{"class":78},[68,149183,12640],{"class":335},[68,149185,149112],{"class":78},[68,149187,51638],{"class":335},[68,149189,856],{"class":82},[68,149191,5136],{"class":335},[68,149193,149194],{"class":70,"line":1525},[68,149195,149144],{"class":335},[68,149197,149198],{"class":70,"line":1537},[68,149199,1772],{"class":335},[19,149201,149202],{},"绘制多地区趋势：",[58,149204,149206],{"className":30579,"code":149205,"language":30581,"meta":63,"style":63},"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",[65,149207,149208,149222,149232,149236,149261,149265,149273,149277,149281,149293,149315,149328,149332,149336,149353,149369,149373],{"__ignoreMap":63},[68,149209,149210,149212,149214,149216,149218,149220],{"class":70,"line":71},[68,149211,30938],{"class":331},[68,149213,147523],{"class":335},[68,149215,30593],{"class":331},[68,149217,147528],{"class":335},[68,149219,31584],{"class":331},[68,149221,147533],{"class":335},[68,149223,149224,149226,149228,149230],{"class":70,"line":92},[68,149225,30938],{"class":331},[68,149227,147382],{"class":335},[68,149229,30593],{"class":331},[68,149231,147387],{"class":335},[68,149233,149234],{"class":70,"line":1387},[68,149235,2606],{"emptyLinePlaceholder":260},[68,149237,149238,149240,149242,149244,149246,149248,149250,149252,149254,149257,149259],{"class":70,"line":1402},[68,149239,147944],{"class":335},[68,149241,381],{"class":331},[68,149243,148867],{"class":335},[68,149245,148141],{"class":78},[68,149247,4649],{"class":335},[68,149249,3231],{"class":331},[68,149251,148353],{"class":335},[68,149253,26247],{"class":331},[68,149255,149256],{"class":335}," data[",[68,149258,69470],{"class":78},[68,149260,77728],{"class":335},[68,149262,149263],{"class":70,"line":1408},[68,149264,2606],{"emptyLinePlaceholder":260},[68,149266,149267,149269,149271],{"class":70,"line":1422},[68,149268,147396],{"class":335},[68,149270,381],{"class":331},[68,149272,147401],{"class":335},[68,149274,149275],{"class":70,"line":1428},[68,149276,147985],{"class":335},[68,149278,149279],{"class":70,"line":1519},[68,149280,2606],{"emptyLinePlaceholder":260},[68,149282,149283,149285,149288,149290],{"class":70,"line":1525},[68,149284,3231],{"class":331},[68,149286,149287],{"class":335}," city, records ",[68,149289,26247],{"class":331},[68,149291,149292],{"class":335}," data.items():\n",[68,149294,149295,149298,149300,149302,149304,149306,149308,149310,149312],{"class":70,"line":1537},[68,149296,149297],{"class":335},"    values ",[68,149299,381],{"class":331},[68,149301,148867],{"class":335},[68,149303,149112],{"class":78},[68,149305,4649],{"class":335},[68,149307,3231],{"class":331},[68,149309,148353],{"class":335},[68,149311,26247],{"class":331},[68,149313,149314],{"class":335}," records]\n",[68,149316,149317,149320,149322,149324,149326],{"class":70,"line":1819},[68,149318,149319],{"class":335},"    line.add_yaxis(city, values, ",[68,149321,147889],{"class":5421},[68,149323,381],{"class":331},[68,149325,31677],{"class":82},[68,149327,342],{"class":335},[68,149329,149330],{"class":70,"line":1824},[68,149331,2606],{"emptyLinePlaceholder":260},[68,149333,149334],{"class":70,"line":1830},[68,149335,147612],{"class":335},[68,149337,149338,149340,149342,149344,149346,149348,149351],{"class":70,"line":1835},[68,149339,147617],{"class":5421},[68,149341,381],{"class":331},[68,149343,147622],{"class":335},[68,149345,51608],{"class":5421},[68,149347,381],{"class":331},[68,149349,149350],{"class":78},"\"多地区趋势图\"",[68,149352,38248],{"class":335},[68,149354,149355,149357,149359,149361,149363,149365,149367],{"class":70,"line":1849},[68,149356,147673],{"class":5421},[68,149358,381],{"class":331},[68,149360,147678],{"class":335},[68,149362,147681],{"class":5421},[68,149364,381],{"class":331},[68,149366,147686],{"class":78},[68,149368,38248],{"class":335},[68,149370,149371],{"class":70,"line":1854},[68,149372,342],{"class":335},[68,149374,149375,149377,149380],{"class":70,"line":1860},[68,149376,147468],{"class":335},[68,149378,149379],{"class":78},"\"trend.html\"",[68,149381,342],{"class":335},[19,149383,149384],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149386,149388],{"id":149387},"_1012-易错点","10.12 易错点",[23,149390,149391,149397,149403,149413,149419],{},[26,149392,149393,149396],{},[65,149394,149395],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[26,149398,149399,149402],{},[65,149400,149401],{},"render()"," 生成的是 HTML，不是图片。",[26,149404,149405,149406,149409,149410,28588],{},"JSON 字符串用 ",[65,149407,149408],{},"json.loads()","，JSON 文件用 ",[65,149411,149412],{},"json.load()",[26,149414,149415,149416,28588],{},"中文 JSON 保存时加 ",[65,149417,149418],{},"ensure_ascii=False",[26,149420,149421],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149423,149425],{"id":149424},"_1013-本章练习","10.13 本章练习",[23,149427,149428,149431,149434,149437,149440],{},[26,149429,149430],{},"安装 pyecharts 并生成第一个折线图。",[26,149432,149433],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[26,149435,149436],{},"绘制两条折线，对比线上和线下销售额。",[26,149438,149439],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[26,149441,149442],{},"对含有空值的销售数据进行清洗后再绘图。",[250,149444,149445],{},"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":63,"searchDepth":92,"depth":92,"links":149447},[149448,149449,149450,149451,149452,149453,149454,149455,149456,149457,149458,149459,149460],{"id":147064,"depth":92,"text":147065},{"id":147139,"depth":92,"text":147140},{"id":147318,"depth":92,"text":147319},{"id":147369,"depth":92,"text":147370},{"id":147503,"depth":92,"text":147504},{"id":147779,"depth":92,"text":147780},{"id":147905,"depth":92,"text":147906},{"id":148116,"depth":92,"text":148117},{"id":148487,"depth":92,"text":148488},{"id":148699,"depth":92,"text":148700},{"id":149071,"depth":92,"text":149072},{"id":149387,"depth":92,"text":149388},{"id":149424,"depth":92,"text":149425},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147056,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149467,"title":149468,"body":149469,"description":257,"extension":258,"meta":151829,"navigation":260,"path":151830,"seo":151831,"stem":151832,"__hash__":151833},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149470,"toc":151806},[149471,149474,149478,149481,149484,149560,149563,149654,149657,149661,149664,149708,149721,149725,149728,149795,149798,149802,149805,149889,149897,149901,149906,150047,150050,150061,150067,150073,150187,150191,150194,150197,150450,150453,150457,150460,150564,150567,150571,150722,150726,150733,150846,150850,150853,150959,150962,150966,150969,151000,151003,151108,151111,151115,151119,151129,151197,151201,151208,151272,151275,151279,151285,151381,151390,151394,151718,151727,151731,151759,151763,151803],[10,149472,149468],{"id":149473},"_11-面向对象基础",[14,149475,149477],{"id":149476},"_111-什么是面向对象","11.1 什么是面向对象",[19,149479,149480],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149482,149483],{},"面向过程：",[58,149485,149487],{"className":30579,"code":149486,"language":30581,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[65,149488,149489,149498,149506,149510,149520,149551,149555],{"__ignoreMap":63},[68,149490,149491,149493,149495],{"class":70,"line":71},[68,149492,146680],{"class":335},[68,149494,381],{"class":331},[68,149496,149497],{"class":78}," \"小明\"\n",[68,149499,149500,149502,149504],{"class":70,"line":92},[68,149501,146690],{"class":335},[68,149503,381],{"class":331},[68,149505,146695],{"class":82},[68,149507,149508],{"class":70,"line":1387},[68,149509,2606],{"emptyLinePlaceholder":260},[68,149511,149512,149514,149517],{"class":70,"line":1402},[68,149513,32148],{"class":331},[68,149515,149516],{"class":74}," introduce",[68,149518,149519],{"class":335},"(name, age):\n",[68,149521,149522,149524,149526,149528,149531,149533,149535,149537,149540,149542,149544,149546,149549],{"class":70,"line":1408},[68,149523,31500],{"class":82},[68,149525,336],{"class":335},[68,149527,387],{"class":331},[68,149529,149530],{"class":78},"\"我叫",[68,149532,1229],{"class":82},[68,149534,80011],{"class":335},[68,149536,1279],{"class":82},[68,149538,149539],{"class":78},"，今年",[68,149541,1229],{"class":82},[68,149543,70422],{"class":335},[68,149545,1279],{"class":82},[68,149547,149548],{"class":78},"岁\"",[68,149550,342],{"class":335},[68,149552,149553],{"class":70,"line":1422},[68,149554,2606],{"emptyLinePlaceholder":260},[68,149556,149557],{"class":70,"line":1428},[68,149558,149559],{"class":335},"introduce(name, age)\n",[19,149561,149562],{},"面向对象：",[58,149564,149566],{"className":30579,"code":149565,"language":30581,"meta":63,"style":63},"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",[65,149567,149568,149576,149584,149613,149617,149621,149631,149640,149649],{"__ignoreMap":63},[68,149569,149570,149572,149574],{"class":70,"line":71},[68,149571,14899],{"class":331},[68,149573,8103],{"class":74},[68,149575,3945],{"class":335},[68,149577,149578,149580,149582],{"class":70,"line":92},[68,149579,31002],{"class":331},[68,149581,149516],{"class":74},[68,149583,31008],{"class":335},[68,149585,149586,149588,149590,149592,149594,149597,149599,149601,149603,149605,149607,149609,149611],{"class":70,"line":1387},[68,149587,32652],{"class":82},[68,149589,336],{"class":335},[68,149591,387],{"class":331},[68,149593,149530],{"class":78},[68,149595,149596],{"class":82},"{self",[68,149598,80502],{"class":335},[68,149600,1279],{"class":82},[68,149602,149539],{"class":78},[68,149604,149596],{"class":82},[68,149606,80514],{"class":335},[68,149608,1279],{"class":82},[68,149610,149548],{"class":78},[68,149612,342],{"class":335},[68,149614,149615],{"class":70,"line":1402},[68,149616,2606],{"emptyLinePlaceholder":260},[68,149618,149619],{"class":70,"line":1408},[68,149620,2606],{"emptyLinePlaceholder":260},[68,149622,149623,149626,149628],{"class":70,"line":1422},[68,149624,149625],{"class":335},"student ",[68,149627,381],{"class":331},[68,149629,149630],{"class":335}," Student()\n",[68,149632,149633,149636,149638],{"class":70,"line":1428},[68,149634,149635],{"class":335},"student.name ",[68,149637,381],{"class":331},[68,149639,149497],{"class":78},[68,149641,149642,149645,149647],{"class":70,"line":1519},[68,149643,149644],{"class":335},"student.age ",[68,149646,381],{"class":331},[68,149648,146695],{"class":82},[68,149650,149651],{"class":70,"line":1525},[68,149652,149653],{"class":335},"student.introduce()\n",[19,149655,149656],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149658,149660],{"id":149659},"_112-类和对象","11.2 类和对象",[19,149662,149663],{},"类是模板，对象是根据模板创建出来的具体实例。",[58,149665,149667],{"className":30579,"code":149666,"language":30581,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[65,149668,149669,149677,149682,149686,149690,149699],{"__ignoreMap":63},[68,149670,149671,149673,149675],{"class":70,"line":71},[68,149672,14899],{"class":331},[68,149674,8103],{"class":74},[68,149676,3945],{"class":335},[68,149678,149679],{"class":70,"line":92},[68,149680,149681],{"class":331},"    pass\n",[68,149683,149684],{"class":70,"line":1387},[68,149685,2606],{"emptyLinePlaceholder":260},[68,149687,149688],{"class":70,"line":1402},[68,149689,2606],{"emptyLinePlaceholder":260},[68,149691,149692,149695,149697],{"class":70,"line":1408},[68,149693,149694],{"class":335},"student1 ",[68,149696,381],{"class":331},[68,149698,149630],{"class":335},[68,149700,149701,149704,149706],{"class":70,"line":1422},[68,149702,149703],{"class":335},"student2 ",[68,149705,381],{"class":331},[68,149707,149630],{"class":335},[19,149709,149710,149713,149714,101218,149717,149720],{},[65,149711,149712],{},"Student"," 是类，",[65,149715,149716],{},"student1",[65,149718,149719],{},"student2"," 是对象。",[14,149722,149724],{"id":149723},"_113-属性","11.3 属性",[19,149726,149727],{},"属性是对象保存的数据。",[58,149729,149731],{"className":30579,"code":149730,"language":30581,"meta":63,"style":63},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[65,149732,149733,149741,149745,149749,149753,149761,149769,149777,149781,149788],{"__ignoreMap":63},[68,149734,149735,149737,149739],{"class":70,"line":71},[68,149736,14899],{"class":331},[68,149738,8103],{"class":74},[68,149740,3945],{"class":335},[68,149742,149743],{"class":70,"line":92},[68,149744,149681],{"class":331},[68,149746,149747],{"class":70,"line":1387},[68,149748,2606],{"emptyLinePlaceholder":260},[68,149750,149751],{"class":70,"line":1402},[68,149752,2606],{"emptyLinePlaceholder":260},[68,149754,149755,149757,149759],{"class":70,"line":1408},[68,149756,149625],{"class":335},[68,149758,381],{"class":331},[68,149760,149630],{"class":335},[68,149762,149763,149765,149767],{"class":70,"line":1422},[68,149764,149635],{"class":335},[68,149766,381],{"class":331},[68,149768,149497],{"class":78},[68,149770,149771,149773,149775],{"class":70,"line":1428},[68,149772,149644],{"class":335},[68,149774,381],{"class":331},[68,149776,146695],{"class":82},[68,149778,149779],{"class":70,"line":1519},[68,149780,2606],{"emptyLinePlaceholder":260},[68,149782,149783,149785],{"class":70,"line":1525},[68,149784,30616],{"class":82},[68,149786,149787],{"class":335},"(student.name)\n",[68,149789,149790,149792],{"class":70,"line":1537},[68,149791,30616],{"class":82},[68,149793,149794],{"class":335},"(student.age)\n",[19,149796,149797],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149799,149801],{"id":149800},"_114-方法","11.4 方法",[19,149803,149804],{},"类中的函数叫方法。",[58,149806,149807],{"className":30579,"code":149565,"language":30581,"meta":63,"style":63},[65,149808,149809,149817,149825,149853,149857,149861,149869,149877,149885],{"__ignoreMap":63},[68,149810,149811,149813,149815],{"class":70,"line":71},[68,149812,14899],{"class":331},[68,149814,8103],{"class":74},[68,149816,3945],{"class":335},[68,149818,149819,149821,149823],{"class":70,"line":92},[68,149820,31002],{"class":331},[68,149822,149516],{"class":74},[68,149824,31008],{"class":335},[68,149826,149827,149829,149831,149833,149835,149837,149839,149841,149843,149845,149847,149849,149851],{"class":70,"line":1387},[68,149828,32652],{"class":82},[68,149830,336],{"class":335},[68,149832,387],{"class":331},[68,149834,149530],{"class":78},[68,149836,149596],{"class":82},[68,149838,80502],{"class":335},[68,149840,1279],{"class":82},[68,149842,149539],{"class":78},[68,149844,149596],{"class":82},[68,149846,80514],{"class":335},[68,149848,1279],{"class":82},[68,149850,149548],{"class":78},[68,149852,342],{"class":335},[68,149854,149855],{"class":70,"line":1402},[68,149856,2606],{"emptyLinePlaceholder":260},[68,149858,149859],{"class":70,"line":1408},[68,149860,2606],{"emptyLinePlaceholder":260},[68,149862,149863,149865,149867],{"class":70,"line":1422},[68,149864,149625],{"class":335},[68,149866,381],{"class":331},[68,149868,149630],{"class":335},[68,149870,149871,149873,149875],{"class":70,"line":1428},[68,149872,149635],{"class":335},[68,149874,381],{"class":331},[68,149876,149497],{"class":78},[68,149878,149879,149881,149883],{"class":70,"line":1519},[68,149880,149644],{"class":335},[68,149882,381],{"class":331},[68,149884,146695],{"class":82},[68,149886,149887],{"class":70,"line":1525},[68,149888,149653],{"class":335},[19,149890,149891,149893,149894,149896],{},[65,149892,31024],{}," 表示当前对象。调用方法时不需要手动传入 ",[65,149895,31024],{},"，Python 会自动传。",[14,149898,149900],{"id":149899},"_115-构造方法__init__","11.5 构造方法__init__",[19,149902,149903,149905],{},[65,149904,31030],{}," 在对象创建时自动执行，用于初始化属性。",[58,149907,149909],{"className":30579,"code":149908,"language":30581,"meta":63,"style":63},"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",[65,149910,149911,149919,149928,149940,149952,149963,149967,149975,150013,150017,150021,150043],{"__ignoreMap":63},[68,149912,149913,149915,149917],{"class":70,"line":71},[68,149914,14899],{"class":331},[68,149916,8103],{"class":74},[68,149918,3945],{"class":335},[68,149920,149921,149923,149925],{"class":70,"line":92},[68,149922,31002],{"class":331},[68,149924,31005],{"class":82},[68,149926,149927],{"class":335},"(self, name, age, score):\n",[68,149929,149930,149932,149935,149937],{"class":70,"line":1387},[68,149931,31046],{"class":82},[68,149933,149934],{"class":335},".name ",[68,149936,381],{"class":331},[68,149938,149939],{"class":335}," name\n",[68,149941,149942,149944,149947,149949],{"class":70,"line":1402},[68,149943,31046],{"class":82},[68,149945,149946],{"class":335},".age ",[68,149948,381],{"class":331},[68,149950,149951],{"class":335}," age\n",[68,149953,149954,149956,149959,149961],{"class":70,"line":1408},[68,149955,31046],{"class":82},[68,149957,149958],{"class":335},".score ",[68,149960,381],{"class":331},[68,149962,1786],{"class":335},[68,149964,149965],{"class":70,"line":1422},[68,149966,2606],{"emptyLinePlaceholder":260},[68,149968,149969,149971,149973],{"class":70,"line":1428},[68,149970,31002],{"class":331},[68,149972,149516],{"class":74},[68,149974,31008],{"class":335},[68,149976,149977,149979,149981,149983,149985,149987,149989,149991,149993,149995,149997,149999,150002,150004,150007,150009,150011],{"class":70,"line":1519},[68,149978,32652],{"class":82},[68,149980,336],{"class":335},[68,149982,387],{"class":331},[68,149984,149530],{"class":78},[68,149986,149596],{"class":82},[68,149988,80502],{"class":335},[68,149990,1279],{"class":82},[68,149992,149539],{"class":78},[68,149994,149596],{"class":82},[68,149996,80514],{"class":335},[68,149998,1279],{"class":82},[68,150000,150001],{"class":78},"岁，成绩",[68,150003,149596],{"class":82},[68,150005,150006],{"class":335},".score",[68,150008,1279],{"class":82},[68,150010,584],{"class":78},[68,150012,342],{"class":335},[68,150014,150015],{"class":70,"line":1525},[68,150016,2606],{"emptyLinePlaceholder":260},[68,150018,150019],{"class":70,"line":1537},[68,150020,2606],{"emptyLinePlaceholder":260},[68,150022,150023,150025,150027,150030,150033,150035,150037,150039,150041],{"class":70,"line":1819},[68,150024,149625],{"class":335},[68,150026,381],{"class":331},[68,150028,150029],{"class":335}," Student(",[68,150031,150032],{"class":78},"\"小明\"",[68,150034,12640],{"class":335},[68,150036,983],{"class":82},[68,150038,12640],{"class":335},[68,150040,1322],{"class":82},[68,150042,342],{"class":335},[68,150044,150045],{"class":70,"line":1824},[68,150046,149653],{"class":335},[19,150048,150049],{},"构造方法的好处：",[23,150051,150052,150055,150058],{},[26,150053,150054],{},"创建对象时必须提供必要数据。",[26,150056,150057],{},"属性初始化集中，不容易漏。",[26,150059,150060],{},"对象状态更完整。",[14,150062,150064,150065],{"id":150063},"_116-str","11.6 ",[483,150066,1507],{},[19,150068,150069,150070,28588],{},"直接打印对象时，默认输出不直观。可以定义 ",[65,150071,150072],{},"__str__",[58,150074,150076],{"className":30579,"code":150075,"language":30581,"meta":63,"style":63},"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",[65,150077,150078,150086,150095,150105,150115,150119,150128,150156,150160,150164,150180],{"__ignoreMap":63},[68,150079,150080,150082,150084],{"class":70,"line":71},[68,150081,14899],{"class":331},[68,150083,8103],{"class":74},[68,150085,3945],{"class":335},[68,150087,150088,150090,150092],{"class":70,"line":92},[68,150089,31002],{"class":331},[68,150091,31005],{"class":82},[68,150093,150094],{"class":335},"(self, name, age):\n",[68,150096,150097,150099,150101,150103],{"class":70,"line":1387},[68,150098,31046],{"class":82},[68,150100,149934],{"class":335},[68,150102,381],{"class":331},[68,150104,149939],{"class":335},[68,150106,150107,150109,150111,150113],{"class":70,"line":1402},[68,150108,31046],{"class":82},[68,150110,149946],{"class":335},[68,150112,381],{"class":331},[68,150114,149951],{"class":335},[68,150116,150117],{"class":70,"line":1408},[68,150118,2606],{"emptyLinePlaceholder":260},[68,150120,150121,150123,150126],{"class":70,"line":1422},[68,150122,31002],{"class":331},[68,150124,150125],{"class":82}," __str__",[68,150127,31008],{"class":335},[68,150129,150130,150132,150135,150138,150140,150142,150144,150147,150149,150151,150153],{"class":70,"line":1428},[68,150131,14957],{"class":331},[68,150133,150134],{"class":331}," f",[68,150136,150137],{"class":78},"\"Student(name=",[68,150139,149596],{"class":82},[68,150141,80502],{"class":335},[68,150143,1279],{"class":82},[68,150145,150146],{"class":78},", age=",[68,150148,149596],{"class":82},[68,150150,80514],{"class":335},[68,150152,1279],{"class":82},[68,150154,150155],{"class":78},")\"\n",[68,150157,150158],{"class":70,"line":1519},[68,150159,2606],{"emptyLinePlaceholder":260},[68,150161,150162],{"class":70,"line":1525},[68,150163,2606],{"emptyLinePlaceholder":260},[68,150165,150166,150168,150170,150172,150174,150176,150178],{"class":70,"line":1537},[68,150167,149625],{"class":335},[68,150169,381],{"class":331},[68,150171,150029],{"class":335},[68,150173,150032],{"class":78},[68,150175,12640],{"class":335},[68,150177,983],{"class":82},[68,150179,342],{"class":335},[68,150181,150182,150184],{"class":70,"line":1819},[68,150183,30616],{"class":82},[68,150185,150186],{"class":335},"(student)\n",[14,150188,150190],{"id":150189},"_117-封装","11.7 封装",[19,150192,150193],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150195,150196],{},"Python 中以双下划线开头的属性通常视为私有属性。",[58,150198,150200],{"className":30579,"code":150199,"language":30581,"meta":63,"style":63},"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",[65,150201,150202,150211,150220,150232,150244,150248,150257,150266,150270,150280,150293,150304,150309,150320,150324,150333,150345,150356,150360,150373,150384,150388,150399,150403,150407,150425,150434,150443],{"__ignoreMap":63},[68,150203,150204,150206,150209],{"class":70,"line":71},[68,150205,14899],{"class":331},[68,150207,150208],{"class":74}," Account",[68,150210,3945],{"class":335},[68,150212,150213,150215,150217],{"class":70,"line":92},[68,150214,31002],{"class":331},[68,150216,31005],{"class":82},[68,150218,150219],{"class":335},"(self, owner, balance):\n",[68,150221,150222,150224,150227,150229],{"class":70,"line":1387},[68,150223,31046],{"class":82},[68,150225,150226],{"class":335},".owner ",[68,150228,381],{"class":331},[68,150230,150231],{"class":335}," owner\n",[68,150233,150234,150236,150239,150241],{"class":70,"line":1402},[68,150235,31046],{"class":82},[68,150237,150238],{"class":335},".__balance ",[68,150240,381],{"class":331},[68,150242,150243],{"class":335}," balance\n",[68,150245,150246],{"class":70,"line":1408},[68,150247,2606],{"emptyLinePlaceholder":260},[68,150249,150250,150252,150255],{"class":70,"line":1422},[68,150251,31002],{"class":331},[68,150253,150254],{"class":74}," get_balance",[68,150256,31008],{"class":335},[68,150258,150259,150261,150263],{"class":70,"line":1428},[68,150260,14957],{"class":331},[68,150262,39074],{"class":82},[68,150264,150265],{"class":335},".__balance\n",[68,150267,150268],{"class":70,"line":1519},[68,150269,2606],{"emptyLinePlaceholder":260},[68,150271,150272,150274,150277],{"class":70,"line":1525},[68,150273,31002],{"class":331},[68,150275,150276],{"class":74}," deposit",[68,150278,150279],{"class":335},"(self, money):\n",[68,150281,150282,150284,150287,150289,150291],{"class":70,"line":1537},[68,150283,2703],{"class":331},[68,150285,150286],{"class":335}," money ",[68,150288,1795],{"class":331},[68,150290,4299],{"class":82},[68,150292,3945],{"class":335},[68,150294,150295,150297,150299,150302],{"class":70,"line":1819},[68,150296,34851],{"class":82},[68,150298,336],{"class":335},[68,150300,150301],{"class":78},"\"存款金额必须大于0\"",[68,150303,342],{"class":335},[68,150305,150306],{"class":70,"line":1824},[68,150307,150308],{"class":331},"            return\n",[68,150310,150311,150313,150315,150317],{"class":70,"line":1830},[68,150312,31046],{"class":82},[68,150314,150238],{"class":335},[68,150316,9682],{"class":331},[68,150318,150319],{"class":335}," money\n",[68,150321,150322],{"class":70,"line":1835},[68,150323,2606],{"emptyLinePlaceholder":260},[68,150325,150326,150328,150331],{"class":70,"line":1849},[68,150327,31002],{"class":331},[68,150329,150330],{"class":74}," withdraw",[68,150332,150279],{"class":335},[68,150334,150335,150337,150339,150341,150343],{"class":70,"line":1854},[68,150336,2703],{"class":331},[68,150338,150286],{"class":335},[68,150340,1795],{"class":331},[68,150342,4299],{"class":82},[68,150344,3945],{"class":335},[68,150346,150347,150349,150351,150354],{"class":70,"line":1860},[68,150348,34851],{"class":82},[68,150350,336],{"class":335},[68,150352,150353],{"class":78},"\"取款金额必须大于0\"",[68,150355,342],{"class":335},[68,150357,150358],{"class":70,"line":1881},[68,150359,150308],{"class":331},[68,150361,150362,150364,150366,150368,150370],{"class":70,"line":1886},[68,150363,2703],{"class":331},[68,150365,150286],{"class":335},[68,150367,1293],{"class":331},[68,150369,39074],{"class":82},[68,150371,150372],{"class":335},".__balance:\n",[68,150374,150375,150377,150379,150382],{"class":70,"line":1900},[68,150376,34851],{"class":82},[68,150378,336],{"class":335},[68,150380,150381],{"class":78},"\"余额不足\"",[68,150383,342],{"class":335},[68,150385,150386],{"class":70,"line":1905},[68,150387,150308],{"class":331},[68,150389,150390,150392,150394,150397],{"class":70,"line":1934},[68,150391,31046],{"class":82},[68,150393,150238],{"class":335},[68,150395,150396],{"class":331},"-=",[68,150398,150319],{"class":335},[68,150400,150401],{"class":70,"line":1939},[68,150402,2606],{"emptyLinePlaceholder":260},[68,150404,150405],{"class":70,"line":1956},[68,150406,2606],{"emptyLinePlaceholder":260},[68,150408,150409,150412,150414,150417,150419,150421,150423],{"class":70,"line":1961},[68,150410,150411],{"class":335},"account ",[68,150413,381],{"class":331},[68,150415,150416],{"class":335}," Account(",[68,150418,150032],{"class":78},[68,150420,12640],{"class":335},[68,150422,6615],{"class":82},[68,150424,342],{"class":335},[68,150426,150427,150430,150432],{"class":70,"line":1966},[68,150428,150429],{"class":335},"account.deposit(",[68,150431,1929],{"class":82},[68,150433,342],{"class":335},[68,150435,150436,150439,150441],{"class":70,"line":1971},[68,150437,150438],{"class":335},"account.withdraw(",[68,150440,644],{"class":82},[68,150442,342],{"class":335},[68,150444,150445,150447],{"class":70,"line":1985},[68,150446,30616],{"class":82},[68,150448,150449],{"class":335},"(account.get_balance())\n",[19,150451,150452],{},"封装的意义是避免外部随意修改内部状态。",[14,150454,150456],{"id":150455},"_118-继承","11.8 继承",[19,150458,150459],{},"继承可以让子类复用父类的属性和方法。",[58,150461,150463],{"className":30579,"code":150462,"language":30581,"meta":63,"style":63},"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",[65,150464,150465,150474,150483,150494,150498,150502,150516,150525,150536,150540,150544,150554,150559],{"__ignoreMap":63},[68,150466,150467,150469,150472],{"class":70,"line":71},[68,150468,14899],{"class":331},[68,150470,150471],{"class":74}," Animal",[68,150473,3945],{"class":335},[68,150475,150476,150478,150481],{"class":70,"line":92},[68,150477,31002],{"class":331},[68,150479,150480],{"class":74}," eat",[68,150482,31008],{"class":335},[68,150484,150485,150487,150489,150492],{"class":70,"line":1387},[68,150486,32652],{"class":82},[68,150488,336],{"class":335},[68,150490,150491],{"class":78},"\"吃东西\"",[68,150493,342],{"class":335},[68,150495,150496],{"class":70,"line":1402},[68,150497,2606],{"emptyLinePlaceholder":260},[68,150499,150500],{"class":70,"line":1408},[68,150501,2606],{"emptyLinePlaceholder":260},[68,150503,150504,150506,150509,150511,150514],{"class":70,"line":1422},[68,150505,14899],{"class":331},[68,150507,150508],{"class":74}," Dog",[68,150510,336],{"class":335},[68,150512,150513],{"class":74},"Animal",[68,150515,30987],{"class":335},[68,150517,150518,150520,150523],{"class":70,"line":1428},[68,150519,31002],{"class":331},[68,150521,150522],{"class":74}," bark",[68,150524,31008],{"class":335},[68,150526,150527,150529,150531,150534],{"class":70,"line":1519},[68,150528,32652],{"class":82},[68,150530,336],{"class":335},[68,150532,150533],{"class":78},"\"汪汪\"",[68,150535,342],{"class":335},[68,150537,150538],{"class":70,"line":1525},[68,150539,2606],{"emptyLinePlaceholder":260},[68,150541,150542],{"class":70,"line":1537},[68,150543,2606],{"emptyLinePlaceholder":260},[68,150545,150546,150549,150551],{"class":70,"line":1819},[68,150547,150548],{"class":335},"dog ",[68,150550,381],{"class":331},[68,150552,150553],{"class":335}," Dog()\n",[68,150555,150556],{"class":70,"line":1824},[68,150557,150558],{"class":335},"dog.eat()\n",[68,150560,150561],{"class":70,"line":1830},[68,150562,150563],{"class":335},"dog.bark()\n",[19,150565,150566],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150568,150570],{"id":150569},"_119-方法重写","11.9 方法重写",[58,150572,150574],{"className":30579,"code":150573,"language":30581,"meta":63,"style":63},"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",[65,150575,150576,150584,150593,150604,150608,150612,150624,150632,150642,150646,150650,150663,150671,150682,150686,150690,150698,150708,150712,150717],{"__ignoreMap":63},[68,150577,150578,150580,150582],{"class":70,"line":71},[68,150579,14899],{"class":331},[68,150581,150471],{"class":74},[68,150583,3945],{"class":335},[68,150585,150586,150588,150591],{"class":70,"line":92},[68,150587,31002],{"class":331},[68,150589,150590],{"class":74}," speak",[68,150592,31008],{"class":335},[68,150594,150595,150597,150599,150602],{"class":70,"line":1387},[68,150596,32652],{"class":82},[68,150598,336],{"class":335},[68,150600,150601],{"class":78},"\"动物叫\"",[68,150603,342],{"class":335},[68,150605,150606],{"class":70,"line":1402},[68,150607,2606],{"emptyLinePlaceholder":260},[68,150609,150610],{"class":70,"line":1408},[68,150611,2606],{"emptyLinePlaceholder":260},[68,150613,150614,150616,150618,150620,150622],{"class":70,"line":1422},[68,150615,14899],{"class":331},[68,150617,150508],{"class":74},[68,150619,336],{"class":335},[68,150621,150513],{"class":74},[68,150623,30987],{"class":335},[68,150625,150626,150628,150630],{"class":70,"line":1428},[68,150627,31002],{"class":331},[68,150629,150590],{"class":74},[68,150631,31008],{"class":335},[68,150633,150634,150636,150638,150640],{"class":70,"line":1519},[68,150635,32652],{"class":82},[68,150637,336],{"class":335},[68,150639,150533],{"class":78},[68,150641,342],{"class":335},[68,150643,150644],{"class":70,"line":1525},[68,150645,2606],{"emptyLinePlaceholder":260},[68,150647,150648],{"class":70,"line":1537},[68,150649,2606],{"emptyLinePlaceholder":260},[68,150651,150652,150654,150657,150659,150661],{"class":70,"line":1819},[68,150653,14899],{"class":331},[68,150655,150656],{"class":74}," Cat",[68,150658,336],{"class":335},[68,150660,150513],{"class":74},[68,150662,30987],{"class":335},[68,150664,150665,150667,150669],{"class":70,"line":1824},[68,150666,31002],{"class":331},[68,150668,150590],{"class":74},[68,150670,31008],{"class":335},[68,150672,150673,150675,150677,150680],{"class":70,"line":1830},[68,150674,32652],{"class":82},[68,150676,336],{"class":335},[68,150678,150679],{"class":78},"\"喵喵\"",[68,150681,342],{"class":335},[68,150683,150684],{"class":70,"line":1835},[68,150685,2606],{"emptyLinePlaceholder":260},[68,150687,150688],{"class":70,"line":1849},[68,150689,2606],{"emptyLinePlaceholder":260},[68,150691,150692,150694,150696],{"class":70,"line":1854},[68,150693,150548],{"class":335},[68,150695,381],{"class":331},[68,150697,150553],{"class":335},[68,150699,150700,150703,150705],{"class":70,"line":1860},[68,150701,150702],{"class":335},"cat ",[68,150704,381],{"class":331},[68,150706,150707],{"class":335}," Cat()\n",[68,150709,150710],{"class":70,"line":1881},[68,150711,2606],{"emptyLinePlaceholder":260},[68,150713,150714],{"class":70,"line":1886},[68,150715,150716],{"class":335},"dog.speak()\n",[68,150718,150719],{"class":70,"line":1900},[68,150720,150721],{"class":335},"cat.speak()\n",[14,150723,150725],{"id":150724},"_1110-super","11.10 super",[19,150727,150728,150729,150732],{},"子类可以通过 ",[65,150730,150731],{},"super()"," 调用父类方法。",[58,150734,150736],{"className":30579,"code":150735,"language":30581,"meta":63,"style":63},"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",[65,150737,150738,150746,150755,150765,150769,150773,150785,150794,150805,150815,150819,150823,150839],{"__ignoreMap":63},[68,150739,150740,150742,150744],{"class":70,"line":71},[68,150741,14899],{"class":331},[68,150743,15774],{"class":74},[68,150745,3945],{"class":335},[68,150747,150748,150750,150752],{"class":70,"line":92},[68,150749,31002],{"class":331},[68,150751,31005],{"class":82},[68,150753,150754],{"class":335},"(self, name):\n",[68,150756,150757,150759,150761,150763],{"class":70,"line":1387},[68,150758,31046],{"class":82},[68,150760,149934],{"class":335},[68,150762,381],{"class":331},[68,150764,149939],{"class":335},[68,150766,150767],{"class":70,"line":1402},[68,150768,2606],{"emptyLinePlaceholder":260},[68,150770,150771],{"class":70,"line":1408},[68,150772,2606],{"emptyLinePlaceholder":260},[68,150774,150775,150777,150779,150781,150783],{"class":70,"line":1422},[68,150776,14899],{"class":331},[68,150778,8103],{"class":74},[68,150780,336],{"class":335},[68,150782,19251],{"class":74},[68,150784,30987],{"class":335},[68,150786,150787,150789,150791],{"class":70,"line":1428},[68,150788,31002],{"class":331},[68,150790,31005],{"class":82},[68,150792,150793],{"class":335},"(self, name, score):\n",[68,150795,150796,150798,150800,150802],{"class":70,"line":1519},[68,150797,31018],{"class":82},[68,150799,17466],{"class":335},[68,150801,31030],{"class":82},[68,150803,150804],{"class":335},"(name)\n",[68,150806,150807,150809,150811,150813],{"class":70,"line":1525},[68,150808,31046],{"class":82},[68,150810,149958],{"class":335},[68,150812,381],{"class":331},[68,150814,1786],{"class":335},[68,150816,150817],{"class":70,"line":1537},[68,150818,2606],{"emptyLinePlaceholder":260},[68,150820,150821],{"class":70,"line":1819},[68,150822,2606],{"emptyLinePlaceholder":260},[68,150824,150825,150827,150829,150831,150833,150835,150837],{"class":70,"line":1824},[68,150826,149625],{"class":335},[68,150828,381],{"class":331},[68,150830,150029],{"class":335},[68,150832,150032],{"class":78},[68,150834,12640],{"class":335},[68,150836,1322],{"class":82},[68,150838,342],{"class":335},[68,150840,150841,150843],{"class":70,"line":1830},[68,150842,30616],{"class":82},[68,150844,150845],{"class":335},"(student.name, student.score)\n",[14,150847,150849],{"id":150848},"_1111-多态","11.11 多态",[19,150851,150852],{},"多态指不同对象响应同一个方法，表现出不同结果。",[58,150854,150856],{"className":30579,"code":150855,"language":30581,"meta":63,"style":63},"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",[65,150857,150858,150866,150874,150884,150888,150892,150900,150908,150918,150922,150926,150936,150941,150945,150949,150954],{"__ignoreMap":63},[68,150859,150860,150862,150864],{"class":70,"line":71},[68,150861,14899],{"class":331},[68,150863,150508],{"class":74},[68,150865,3945],{"class":335},[68,150867,150868,150870,150872],{"class":70,"line":92},[68,150869,31002],{"class":331},[68,150871,150590],{"class":74},[68,150873,31008],{"class":335},[68,150875,150876,150878,150880,150882],{"class":70,"line":1387},[68,150877,32652],{"class":82},[68,150879,336],{"class":335},[68,150881,150533],{"class":78},[68,150883,342],{"class":335},[68,150885,150886],{"class":70,"line":1402},[68,150887,2606],{"emptyLinePlaceholder":260},[68,150889,150890],{"class":70,"line":1408},[68,150891,2606],{"emptyLinePlaceholder":260},[68,150893,150894,150896,150898],{"class":70,"line":1422},[68,150895,14899],{"class":331},[68,150897,150656],{"class":74},[68,150899,3945],{"class":335},[68,150901,150902,150904,150906],{"class":70,"line":1428},[68,150903,31002],{"class":331},[68,150905,150590],{"class":74},[68,150907,31008],{"class":335},[68,150909,150910,150912,150914,150916],{"class":70,"line":1519},[68,150911,32652],{"class":82},[68,150913,336],{"class":335},[68,150915,150679],{"class":78},[68,150917,342],{"class":335},[68,150919,150920],{"class":70,"line":1525},[68,150921,2606],{"emptyLinePlaceholder":260},[68,150923,150924],{"class":70,"line":1537},[68,150925,2606],{"emptyLinePlaceholder":260},[68,150927,150928,150930,150933],{"class":70,"line":1819},[68,150929,32148],{"class":331},[68,150931,150932],{"class":74}," make_sound",[68,150934,150935],{"class":335},"(animal):\n",[68,150937,150938],{"class":70,"line":1824},[68,150939,150940],{"class":335},"    animal.speak()\n",[68,150942,150943],{"class":70,"line":1830},[68,150944,2606],{"emptyLinePlaceholder":260},[68,150946,150947],{"class":70,"line":1835},[68,150948,2606],{"emptyLinePlaceholder":260},[68,150950,150951],{"class":70,"line":1849},[68,150952,150953],{"class":335},"make_sound(Dog())\n",[68,150955,150956],{"class":70,"line":1854},[68,150957,150958],{"class":335},"make_sound(Cat())\n",[19,150960,150961],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150963,150965],{"id":150964},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150967,150968],{},"实例属性属于对象：",[58,150970,150972],{"className":30579,"code":150971,"language":30581,"meta":63,"style":63},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[65,150973,150974,150982,150990],{"__ignoreMap":63},[68,150975,150976,150978,150980],{"class":70,"line":71},[68,150977,14899],{"class":331},[68,150979,8103],{"class":74},[68,150981,3945],{"class":335},[68,150983,150984,150986,150988],{"class":70,"line":92},[68,150985,31002],{"class":331},[68,150987,31005],{"class":82},[68,150989,150754],{"class":335},[68,150991,150992,150994,150996,150998],{"class":70,"line":1387},[68,150993,31046],{"class":82},[68,150995,149934],{"class":335},[68,150997,381],{"class":331},[68,150999,149939],{"class":335},[19,151001,151002],{},"类属性属于类，所有对象共享：",[58,151004,151006],{"className":30579,"code":151005,"language":30581,"meta":63,"style":63},"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",[65,151007,151008,151016,151026,151030,151038,151048,151052,151056,151069,151083,151087,151094,151101],{"__ignoreMap":63},[68,151009,151010,151012,151014],{"class":70,"line":71},[68,151011,14899],{"class":331},[68,151013,8103],{"class":74},[68,151015,3945],{"class":335},[68,151017,151018,151021,151023],{"class":70,"line":92},[68,151019,151020],{"class":335},"    school ",[68,151022,381],{"class":331},[68,151024,151025],{"class":78}," \"黑马学校\"\n",[68,151027,151028],{"class":70,"line":1387},[68,151029,2606],{"emptyLinePlaceholder":260},[68,151031,151032,151034,151036],{"class":70,"line":1402},[68,151033,31002],{"class":331},[68,151035,31005],{"class":82},[68,151037,150754],{"class":335},[68,151039,151040,151042,151044,151046],{"class":70,"line":1408},[68,151041,31046],{"class":82},[68,151043,149934],{"class":335},[68,151045,381],{"class":331},[68,151047,149939],{"class":335},[68,151049,151050],{"class":70,"line":1422},[68,151051,2606],{"emptyLinePlaceholder":260},[68,151053,151054],{"class":70,"line":1428},[68,151055,2606],{"emptyLinePlaceholder":260},[68,151057,151058,151061,151063,151065,151067],{"class":70,"line":1519},[68,151059,151060],{"class":335},"s1 ",[68,151062,381],{"class":331},[68,151064,150029],{"class":335},[68,151066,150032],{"class":78},[68,151068,342],{"class":335},[68,151070,151071,151074,151076,151078,151081],{"class":70,"line":1525},[68,151072,151073],{"class":335},"s2 ",[68,151075,381],{"class":331},[68,151077,150029],{"class":335},[68,151079,151080],{"class":78},"\"小红\"",[68,151082,342],{"class":335},[68,151084,151085],{"class":70,"line":1537},[68,151086,2606],{"emptyLinePlaceholder":260},[68,151088,151089,151091],{"class":70,"line":1819},[68,151090,30616],{"class":82},[68,151092,151093],{"class":335},"(s1.school)\n",[68,151095,151096,151098],{"class":70,"line":1824},[68,151097,30616],{"class":82},[68,151099,151100],{"class":335},"(s2.school)\n",[68,151102,151103,151105],{"class":70,"line":1830},[68,151104,30616],{"class":82},[68,151106,151107],{"class":335},"(Student.school)\n",[19,151109,151110],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151112,151114],{"id":151113},"_1113-类方法和静态方法","11.13 类方法和静态方法",[301,151116,151118],{"id":151117},"_11131-类方法","11.13.1 类方法",[19,151120,151121,151122,151125,151126,28588],{},"类方法使用 ",[65,151123,151124],{},"@classmethod","，第一个参数通常是 ",[65,151127,151128],{},"cls",[58,151130,151132],{"className":30579,"code":151131,"language":30581,"meta":63,"style":63},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[65,151133,151134,151142,151150,151154,151162,151172,151182,151186,151190],{"__ignoreMap":63},[68,151135,151136,151138,151140],{"class":70,"line":71},[68,151137,14899],{"class":331},[68,151139,8103],{"class":74},[68,151141,3945],{"class":335},[68,151143,151144,151146,151148],{"class":70,"line":92},[68,151145,151020],{"class":335},[68,151147,381],{"class":331},[68,151149,151025],{"class":78},[68,151151,151152],{"class":70,"line":1387},[68,151153,2606],{"emptyLinePlaceholder":260},[68,151155,151156,151159],{"class":70,"line":1402},[68,151157,151158],{"class":74},"    @",[68,151160,151161],{"class":82},"classmethod\n",[68,151163,151164,151166,151169],{"class":70,"line":1408},[68,151165,31002],{"class":331},[68,151167,151168],{"class":74}," get_school",[68,151170,151171],{"class":335},"(cls):\n",[68,151173,151174,151176,151179],{"class":70,"line":1422},[68,151175,14957],{"class":331},[68,151177,151178],{"class":82}," cls",[68,151180,151181],{"class":335},".school\n",[68,151183,151184],{"class":70,"line":1428},[68,151185,2606],{"emptyLinePlaceholder":260},[68,151187,151188],{"class":70,"line":1519},[68,151189,2606],{"emptyLinePlaceholder":260},[68,151191,151192,151194],{"class":70,"line":1525},[68,151193,30616],{"class":82},[68,151195,151196],{"class":335},"(Student.get_school())\n",[301,151198,151200],{"id":151199},"_11132-静态方法","11.13.2 静态方法",[19,151202,151203,151204,151207],{},"静态方法使用 ",[65,151205,151206],{},"@staticmethod","，不需要访问实例和类。",[58,151209,151211],{"className":30579,"code":151210,"language":30581,"meta":63,"style":63},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[65,151212,151213,151222,151229,151238,151249,151253,151257],{"__ignoreMap":63},[68,151214,151215,151217,151220],{"class":70,"line":71},[68,151216,14899],{"class":331},[68,151218,151219],{"class":74}," MathUtils",[68,151221,3945],{"class":335},[68,151223,151224,151226],{"class":70,"line":92},[68,151225,151158],{"class":74},[68,151227,151228],{"class":82},"staticmethod\n",[68,151230,151231,151233,151235],{"class":70,"line":1387},[68,151232,31002],{"class":331},[68,151234,138],{"class":74},[68,151236,151237],{"class":335},"(a, b):\n",[68,151239,151240,151242,151244,151246],{"class":70,"line":1402},[68,151241,14957],{"class":331},[68,151243,11074],{"class":335},[68,151245,814],{"class":331},[68,151247,151248],{"class":335}," b\n",[68,151250,151251],{"class":70,"line":1408},[68,151252,2606],{"emptyLinePlaceholder":260},[68,151254,151255],{"class":70,"line":1422},[68,151256,2606],{"emptyLinePlaceholder":260},[68,151258,151259,151261,151264,151266,151268,151270],{"class":70,"line":1428},[68,151260,30616],{"class":82},[68,151262,151263],{"class":335},"(MathUtils.add(",[68,151265,551],{"class":82},[68,151267,12640],{"class":335},[68,151269,412],{"class":82},[68,151271,30698],{"class":335},[19,151273,151274],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151276,151278],{"id":151277},"_1114-dataclass","11.14 dataclass",[19,151280,151281,151284],{},[65,151282,151283],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[58,151286,151288],{"className":30579,"code":151287,"language":30581,"meta":63,"style":63},"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",[65,151289,151290,151302,151306,151310,151315,151323,151331,151339,151347,151351,151355,151375],{"__ignoreMap":63},[68,151291,151292,151294,151297,151299],{"class":70,"line":71},[68,151293,30938],{"class":331},[68,151295,151296],{"class":335}," dataclasses ",[68,151298,30593],{"class":331},[68,151300,151301],{"class":335}," dataclass\n",[68,151303,151304],{"class":70,"line":92},[68,151305,2606],{"emptyLinePlaceholder":260},[68,151307,151308],{"class":70,"line":1387},[68,151309,2606],{"emptyLinePlaceholder":260},[68,151311,151312],{"class":70,"line":1402},[68,151313,151314],{"class":74},"@dataclass\n",[68,151316,151317,151319,151321],{"class":70,"line":1408},[68,151318,14899],{"class":331},[68,151320,8103],{"class":74},[68,151322,3945],{"class":335},[68,151324,151325,151328],{"class":70,"line":1422},[68,151326,151327],{"class":335},"    name: ",[68,151329,151330],{"class":82},"str\n",[68,151332,151333,151336],{"class":70,"line":1428},[68,151334,151335],{"class":335},"    age: ",[68,151337,151338],{"class":82},"int\n",[68,151340,151341,151344],{"class":70,"line":1519},[68,151342,151343],{"class":335},"    score: ",[68,151345,151346],{"class":82},"float\n",[68,151348,151349],{"class":70,"line":1525},[68,151350,2606],{"emptyLinePlaceholder":260},[68,151352,151353],{"class":70,"line":1537},[68,151354,2606],{"emptyLinePlaceholder":260},[68,151356,151357,151359,151361,151363,151365,151367,151369,151371,151373],{"class":70,"line":1819},[68,151358,149625],{"class":335},[68,151360,381],{"class":331},[68,151362,150029],{"class":335},[68,151364,150032],{"class":78},[68,151366,12640],{"class":335},[68,151368,983],{"class":82},[68,151370,12640],{"class":335},[68,151372,1322],{"class":82},[68,151374,342],{"class":335},[68,151376,151377,151379],{"class":70,"line":1824},[68,151378,30616],{"class":82},[68,151380,150186],{"class":335},[19,151382,151383,151384,546,151386,151389],{},"它会自动生成 ",[65,151385,31030],{},[65,151387,151388],{},"__repr__"," 等方法。适合数据模型类。",[14,151391,151393],{"id":151392},"_1115-小案例学生类","11.15 小案例：学生类",[58,151395,151397],{"className":30579,"code":151396,"language":30581,"meta":63,"style":63},"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",[65,151398,151399,151407,151416,151428,151438,151448,151458,151462,151471,151484,151488,151497,151503,151515,151527,151539,151551,151555,151559,151565,151575,151584,151594,151602,151610,151619,151623,151627,151635,151671,151675,151679,151704,151711],{"__ignoreMap":63},[68,151400,151401,151403,151405],{"class":70,"line":71},[68,151402,14899],{"class":331},[68,151404,8103],{"class":74},[68,151406,3945],{"class":335},[68,151408,151409,151411,151413],{"class":70,"line":92},[68,151410,31002],{"class":331},[68,151412,31005],{"class":82},[68,151414,151415],{"class":335},"(self, student_id, name, age, score):\n",[68,151417,151418,151420,151423,151425],{"class":70,"line":1387},[68,151419,31046],{"class":82},[68,151421,151422],{"class":335},".student_id ",[68,151424,381],{"class":331},[68,151426,151427],{"class":335}," student_id\n",[68,151429,151430,151432,151434,151436],{"class":70,"line":1402},[68,151431,31046],{"class":82},[68,151433,149934],{"class":335},[68,151435,381],{"class":331},[68,151437,149939],{"class":335},[68,151439,151440,151442,151444,151446],{"class":70,"line":1408},[68,151441,31046],{"class":82},[68,151443,149946],{"class":335},[68,151445,381],{"class":331},[68,151447,149951],{"class":335},[68,151449,151450,151452,151454,151456],{"class":70,"line":1422},[68,151451,31046],{"class":82},[68,151453,149958],{"class":335},[68,151455,381],{"class":331},[68,151457,1786],{"class":335},[68,151459,151460],{"class":70,"line":1428},[68,151461,2606],{"emptyLinePlaceholder":260},[68,151463,151464,151466,151469],{"class":70,"line":1519},[68,151465,31002],{"class":331},[68,151467,151468],{"class":74}," is_passed",[68,151470,31008],{"class":335},[68,151472,151473,151475,151477,151479,151481],{"class":70,"line":1525},[68,151474,14957],{"class":331},[68,151476,39074],{"class":82},[68,151478,149958],{"class":335},[68,151480,1917],{"class":331},[68,151482,151483],{"class":82}," 60\n",[68,151485,151486],{"class":70,"line":1537},[68,151487,2606],{"emptyLinePlaceholder":260},[68,151489,151490,151492,151495],{"class":70,"line":1819},[68,151491,31002],{"class":331},[68,151493,151494],{"class":74}," to_dict",[68,151496,31008],{"class":335},[68,151498,151499,151501],{"class":70,"line":1824},[68,151500,14957],{"class":331},[68,151502,15777],{"class":335},[68,151504,151505,151508,151510,151512],{"class":70,"line":1830},[68,151506,151507],{"class":78},"            \"student_id\"",[68,151509,51638],{"class":335},[68,151511,31024],{"class":82},[68,151513,151514],{"class":335},".student_id,\n",[68,151516,151517,151520,151522,151524],{"class":70,"line":1835},[68,151518,151519],{"class":78},"            \"name\"",[68,151521,51638],{"class":335},[68,151523,31024],{"class":82},[68,151525,151526],{"class":335},".name,\n",[68,151528,151529,151532,151534,151536],{"class":70,"line":1849},[68,151530,151531],{"class":78},"            \"age\"",[68,151533,51638],{"class":335},[68,151535,31024],{"class":82},[68,151537,151538],{"class":335},".age,\n",[68,151540,151541,151544,151546,151548],{"class":70,"line":1854},[68,151542,151543],{"class":78},"            \"score\"",[68,151545,51638],{"class":335},[68,151547,31024],{"class":82},[68,151549,151550],{"class":335},".score,\n",[68,151552,151553],{"class":70,"line":1860},[68,151554,2735],{"class":335},[68,151556,151557],{"class":70,"line":1881},[68,151558,2606],{"emptyLinePlaceholder":260},[68,151560,151561,151563],{"class":70,"line":1886},[68,151562,151158],{"class":74},[68,151564,151161],{"class":82},[68,151566,151567,151569,151572],{"class":70,"line":1900},[68,151568,31002],{"class":331},[68,151570,151571],{"class":74}," from_dict",[68,151573,151574],{"class":335},"(cls, data):\n",[68,151576,151577,151579,151581],{"class":70,"line":1905},[68,151578,14957],{"class":331},[68,151580,151178],{"class":82},[68,151582,151583],{"class":335},"(\n",[68,151585,151586,151589,151592],{"class":70,"line":1934},[68,151587,151588],{"class":335},"            data[",[68,151590,151591],{"class":78},"\"student_id\"",[68,151593,88037],{"class":335},[68,151595,151596,151598,151600],{"class":70,"line":1939},[68,151597,151588],{"class":335},[68,151599,62880],{"class":78},[68,151601,88037],{"class":335},[68,151603,151604,151606,151608],{"class":70,"line":1956},[68,151605,151588],{"class":335},[68,151607,69325],{"class":78},[68,151609,88037],{"class":335},[68,151611,151612,151614,151617],{"class":70,"line":1961},[68,151613,151588],{"class":335},[68,151615,151616],{"class":78},"\"score\"",[68,151618,88037],{"class":335},[68,151620,151621],{"class":70,"line":1966},[68,151622,38327],{"class":335},[68,151624,151625],{"class":70,"line":1971},[68,151626,2606],{"emptyLinePlaceholder":260},[68,151628,151629,151631,151633],{"class":70,"line":1985},[68,151630,31002],{"class":331},[68,151632,150125],{"class":82},[68,151634,31008],{"class":335},[68,151636,151637,151639,151641,151643,151645,151648,151650,151653,151655,151657,151659,151661,151663,151665,151667,151669],{"class":70,"line":1990},[68,151638,14957],{"class":331},[68,151640,150134],{"class":331},[68,151642,584],{"class":78},[68,151644,149596],{"class":82},[68,151646,151647],{"class":335},".student_id",[68,151649,1279],{"class":82},[68,151651,151652],{"class":82}," {self",[68,151654,80502],{"class":335},[68,151656,1279],{"class":82},[68,151658,151652],{"class":82},[68,151660,80514],{"class":335},[68,151662,1279],{"class":82},[68,151664,151652],{"class":82},[68,151666,150006],{"class":335},[68,151668,1279],{"class":82},[68,151670,25337],{"class":78},[68,151672,151673],{"class":70,"line":2783},[68,151674,2606],{"emptyLinePlaceholder":260},[68,151676,151677],{"class":70,"line":2797},[68,151678,2606],{"emptyLinePlaceholder":260},[68,151680,151681,151683,151685,151687,151690,151692,151694,151696,151698,151700,151702],{"class":70,"line":2805},[68,151682,149625],{"class":335},[68,151684,381],{"class":331},[68,151686,150029],{"class":335},[68,151688,151689],{"class":78},"\"001\"",[68,151691,12640],{"class":335},[68,151693,150032],{"class":78},[68,151695,12640],{"class":335},[68,151697,983],{"class":82},[68,151699,12640],{"class":335},[68,151701,1322],{"class":82},[68,151703,342],{"class":335},[68,151705,151706,151708],{"class":70,"line":2810},[68,151707,30616],{"class":82},[68,151709,151710],{"class":335},"(student.is_passed())\n",[68,151712,151713,151715],{"class":70,"line":2816},[68,151714,30616],{"class":82},[68,151716,151717],{"class":335},"(student.to_dict())\n",[19,151719,151720,101218,151723,151726],{},[65,151721,151722],{},"to_dict()",[65,151724,151725],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151728,151730],{"id":151729},"_1116-易错点","11.16 易错点",[23,151732,151733,151739,151745,151750,151753,151756],{},[26,151734,151735,151736,28588],{},"类名推荐使用大驼峰，如 ",[65,151737,151738],{},"StudentManager",[26,151740,151741,151742,151744],{},"方法第一个参数必须写 ",[65,151743,31024],{},"，调用时不用传。",[26,151746,151747,151749],{},[65,151748,31030],{}," 不是普通方法，它在创建对象时自动执行。",[26,151751,151752],{},"私有属性不是绝对安全，只是约定和名称改写。",[26,151754,151755],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[26,151757,151758],{},"类中方法太多时，说明职责可能过重。",[14,151760,151762],{"id":151761},"_1117-本章练习","11.17 本章练习",[23,151764,151765,151771,151777,151782,151795],{},[26,151766,151767,151768,151770],{},"定义 ",[65,151769,149712],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[26,151772,151767,151773,151776],{},[65,151774,151775],{},"Account"," 类，实现存款、取款、查询余额。",[26,151778,151767,151779,151781],{},[65,151780,17431],{}," 类，计算圆的周长和面积。",[26,151783,151767,151784,546,151787,151790,151791,151794],{},[65,151785,151786],{},"Dog",[65,151788,151789],{},"Cat"," 类，并用同一个函数调用它们的 ",[65,151792,151793],{},"speak()"," 方法。",[26,151796,104566,151797,151799,151800,28588],{},[65,151798,151283],{}," 定义一个商品类 ",[65,151801,151802],{},"Product",[250,151804,151805],{},"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":63,"searchDepth":92,"depth":92,"links":151807},[151808,151809,151810,151811,151812,151813,151815,151816,151817,151818,151819,151820,151821,151825,151826,151827,151828],{"id":149476,"depth":92,"text":149477},{"id":149659,"depth":92,"text":149660},{"id":149723,"depth":92,"text":149724},{"id":149800,"depth":92,"text":149801},{"id":149899,"depth":92,"text":149900},{"id":150063,"depth":92,"text":151814},"11.6 str",{"id":150189,"depth":92,"text":150190},{"id":150455,"depth":92,"text":150456},{"id":150569,"depth":92,"text":150570},{"id":150724,"depth":92,"text":150725},{"id":150848,"depth":92,"text":150849},{"id":150964,"depth":92,"text":150965},{"id":151113,"depth":92,"text":151114,"children":151822},[151823,151824],{"id":151117,"depth":1387,"text":151118},{"id":151199,"depth":1387,"text":151200},{"id":151277,"depth":92,"text":151278},{"id":151392,"depth":92,"text":151393},{"id":151729,"depth":92,"text":151730},{"id":151761,"depth":92,"text":151762},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149468,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151835,"title":151836,"body":151837,"description":257,"extension":258,"meta":155150,"navigation":260,"path":155151,"seo":155152,"stem":155153,"__hash__":155154},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151838,"toc":155126},[151839,151842,151846,151849,151852,151881,151884,151892,151896,151900,151903,151926,151929,151935,151939,153385,153388,153409,153413,153416,153428,153431,153615,153618,153744,153747,153751,153755,153891,153895,153981,153985,154067,154071,154108,154112,154301,154305,154308,154538,154542,154545,154726,154729,154733,154736,154742,154745,154771,154775,154778,154792,154795,154820,154823,154837,154840,154857,154860,154877,154880,154897,154901,154927,154931,154954,154958,154961,154963,154969,154971,154992,154995,155001,155007,155011,155014,155090,155093,155097,155123],[10,151840,151836],{"id":151841},"_12-综合案例与复习路线",[14,151843,151845],{"id":151844},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151847,151848],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151850,151851],{},"一个合格的入门综合项目最好覆盖：",[23,151853,151854,151857,151860,151863,151866,151869,151872,151875,151878],{},[26,151855,151856],{},"输入输出。",[26,151858,151859],{},"判断和循环。",[26,151861,151862],{},"函数拆分。",[26,151864,151865],{},"列表、字典等容器。",[26,151867,151868],{},"文件持久化。",[26,151870,151871],{},"异常处理。",[26,151873,151874],{},"模块拆分。",[26,151876,151877],{},"可选：面向对象。",[26,151879,151880],{},"可选：数据可视化。",[19,151882,151883],{},"本章整理两个方向：",[23,151885,151886,151889],{},[26,151887,151888],{},"学生管理系统。",[26,151890,151891],{},"销售数据统计和可视化。",[14,151893,151895],{"id":151894},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[301,151897,151899],{"id":151898},"_1221-需求","12.2.1 需求",[19,151901,151902],{},"实现一个命令行学生管理系统：",[23,151904,151905,151908,151911,151914,151917,151920,151923],{},[26,151906,151907],{},"添加学生。",[26,151909,151910],{},"删除学生。",[26,151912,151913],{},"修改学生。",[26,151915,151916],{},"查询学生。",[26,151918,151919],{},"显示所有学生。",[26,151921,151922],{},"保存到 JSON 文件。",[26,151924,151925],{},"程序启动时自动读取 JSON 文件。",[19,151927,151928],{},"学生字段：",[58,151930,151933],{"className":151931,"code":151932,"language":5393,"meta":63},[5391],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[65,151934,151932],{"__ignoreMap":63},[14,151936,151938],{"id":151937},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[58,151940,151942],{"className":30579,"code":151941,"language":30581,"meta":63,"style":63},"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",[65,151943,151944,151950,151960,151964,151978,151982,151986,151995,152007,152013,152017,152023,152054,152064,152071,152082,152088,152092,152096,152106,152137,152163,152167,152171,152180,152191,152202,152213,152224,152235,152246,152257,152261,152265,152275,152287,152303,152310,152317,152321,152325,152335,152343,152350,152363,152373,152384,152388,152392,152401,152409,152415,152427,152435,152446,152450,152454,152463,152479,152483,152490,152501,152506,152510,152526,152541,152556,152560,152565,152573,152581,152589,152597,152601,152606,152617,152621,152625,152634,152649,152659,152663,152675,152686,152690,152694,152699,152703,152714,152718,152722,152731,152746,152754,152758,152770,152780,152784,152788,152803,152816,152829,152833,152846,152858,152870,152874,152878,152889,152893,152897,152906,152921,152929,152933,152945,152955,152959,152963,152968,152972,152976,152986,152992,153014,153033,153052,153071,153076,153080,153084,153093,153101,153112,153116,153120,153146,153156,153161,153165,153169,153177,153187,153191,153199,153204,153220,153224,153238,153243,153257,153262,153275,153280,153293,153298,153311,153316,153329,153340,153344,153350,153361,153365,153369,153381],{"__ignoreMap":63},[68,151945,151946,151948],{"class":70,"line":71},[68,151947,30593],{"class":331},[68,151949,147235],{"class":335},[68,151951,151952,151954,151956,151958],{"class":70,"line":92},[68,151953,30938],{"class":331},[68,151955,108511],{"class":335},[68,151957,30593],{"class":331},[68,151959,108516],{"class":335},[68,151961,151962],{"class":70,"line":1387},[68,151963,2606],{"emptyLinePlaceholder":260},[68,151965,151966,151969,151971,151973,151976],{"class":70,"line":1402},[68,151967,151968],{"class":82},"DATA_FILE",[68,151970,13769],{"class":331},[68,151972,108745],{"class":335},[68,151974,151975],{"class":78},"\"students.json\"",[68,151977,342],{"class":335},[68,151979,151980],{"class":70,"line":1408},[68,151981,2606],{"emptyLinePlaceholder":260},[68,151983,151984],{"class":70,"line":1422},[68,151985,2606],{"emptyLinePlaceholder":260},[68,151987,151988,151990,151993],{"class":70,"line":1428},[68,151989,32148],{"class":331},[68,151991,151992],{"class":74}," load_students",[68,151994,32154],{"class":335},[68,151996,151997,151999,152001,152004],{"class":70,"line":1519},[68,151998,3307],{"class":331},[68,152000,39131],{"class":331},[68,152002,152003],{"class":82}," DATA_FILE",[68,152005,152006],{"class":335},".exists():\n",[68,152008,152009,152011],{"class":70,"line":1525},[68,152010,14957],{"class":331},[68,152012,52039],{"class":335},[68,152014,152015],{"class":70,"line":1537},[68,152016,2606],{"emptyLinePlaceholder":260},[68,152018,152019,152021],{"class":70,"line":1819},[68,152020,125981],{"class":331},[68,152022,3945],{"class":335},[68,152024,152025,152028,152030,152032,152034,152036,152038,152040,152042,152044,152046,152048,152050,152052],{"class":70,"line":1824},[68,152026,152027],{"class":331},"        with",[68,152029,146935],{"class":82},[68,152031,336],{"class":335},[68,152033,151968],{"class":82},[68,152035,12640],{"class":335},[68,152037,146945],{"class":78},[68,152039,12640],{"class":335},[68,152041,146950],{"class":5421},[68,152043,381],{"class":331},[68,152045,146955],{"class":78},[68,152047,13919],{"class":335},[68,152049,31584],{"class":331},[68,152051,148297],{"class":5421},[68,152053,3945],{"class":335},[68,152055,152056,152058,152060,152062],{"class":70,"line":1830},[68,152057,15937],{"class":331},[68,152059,148308],{"class":335},[68,152061,45555],{"class":5421},[68,152063,342],{"class":335},[68,152065,152066,152068],{"class":70,"line":1835},[68,152067,126009],{"class":331},[68,152069,152070],{"class":335}," json.JSONDecodeError:\n",[68,152072,152073,152075,152077,152080],{"class":70,"line":1849},[68,152074,32652],{"class":82},[68,152076,336],{"class":335},[68,152078,152079],{"class":78},"\"数据文件格式错误，已使用空数据启动\"",[68,152081,342],{"class":335},[68,152083,152084,152086],{"class":70,"line":1854},[68,152085,14957],{"class":331},[68,152087,52039],{"class":335},[68,152089,152090],{"class":70,"line":1860},[68,152091,2606],{"emptyLinePlaceholder":260},[68,152093,152094],{"class":70,"line":1881},[68,152095,2606],{"emptyLinePlaceholder":260},[68,152097,152098,152100,152103],{"class":70,"line":1886},[68,152099,32148],{"class":331},[68,152101,152102],{"class":74}," save_students",[68,152104,152105],{"class":335},"(students):\n",[68,152107,152108,152110,152112,152114,152116,152118,152121,152123,152125,152127,152129,152131,152133,152135],{"class":70,"line":1900},[68,152109,34379],{"class":331},[68,152111,146935],{"class":82},[68,152113,336],{"class":335},[68,152115,151968],{"class":82},[68,152117,12640],{"class":335},[68,152119,152120],{"class":78},"\"w\"",[68,152122,12640],{"class":335},[68,152124,146950],{"class":5421},[68,152126,381],{"class":331},[68,152128,146955],{"class":78},[68,152130,13919],{"class":335},[68,152132,31584],{"class":331},[68,152134,148297],{"class":5421},[68,152136,3945],{"class":335},[68,152138,152139,152142,152144,152146,152148,152150,152152,152154,152157,152159,152161],{"class":70,"line":1905},[68,152140,152141],{"class":335},"        json.dump(students, ",[68,152143,45555],{"class":5421},[68,152145,12640],{"class":335},[68,152147,147281],{"class":5421},[68,152149,381],{"class":331},[68,152151,34188],{"class":82},[68,152153,12640],{"class":335},[68,152155,152156],{"class":5421},"indent",[68,152158,381],{"class":331},[68,152160,412],{"class":82},[68,152162,342],{"class":335},[68,152164,152165],{"class":70,"line":1934},[68,152166,2606],{"emptyLinePlaceholder":260},[68,152168,152169],{"class":70,"line":1939},[68,152170,2606],{"emptyLinePlaceholder":260},[68,152172,152173,152175,152178],{"class":70,"line":1956},[68,152174,32148],{"class":331},[68,152176,152177],{"class":74}," show_menu",[68,152179,32154],{"class":335},[68,152181,152182,152184,152186,152189],{"class":70,"line":1961},[68,152183,31500],{"class":82},[68,152185,336],{"class":335},[68,152187,152188],{"class":78},"\"====== 学生管理系统 ======\"",[68,152190,342],{"class":335},[68,152192,152193,152195,152197,152200],{"class":70,"line":1966},[68,152194,31500],{"class":82},[68,152196,336],{"class":335},[68,152198,152199],{"class":78},"\"1. 添加学生\"",[68,152201,342],{"class":335},[68,152203,152204,152206,152208,152211],{"class":70,"line":1971},[68,152205,31500],{"class":82},[68,152207,336],{"class":335},[68,152209,152210],{"class":78},"\"2. 删除学生\"",[68,152212,342],{"class":335},[68,152214,152215,152217,152219,152222],{"class":70,"line":1985},[68,152216,31500],{"class":82},[68,152218,336],{"class":335},[68,152220,152221],{"class":78},"\"3. 修改学生\"",[68,152223,342],{"class":335},[68,152225,152226,152228,152230,152233],{"class":70,"line":1990},[68,152227,31500],{"class":82},[68,152229,336],{"class":335},[68,152231,152232],{"class":78},"\"4. 查询学生\"",[68,152234,342],{"class":335},[68,152236,152237,152239,152241,152244],{"class":70,"line":2783},[68,152238,31500],{"class":82},[68,152240,336],{"class":335},[68,152242,152243],{"class":78},"\"5. 显示所有学生\"",[68,152245,342],{"class":335},[68,152247,152248,152250,152252,152255],{"class":70,"line":2797},[68,152249,31500],{"class":82},[68,152251,336],{"class":335},[68,152253,152254],{"class":78},"\"0. 退出系统\"",[68,152256,342],{"class":335},[68,152258,152259],{"class":70,"line":2805},[68,152260,2606],{"emptyLinePlaceholder":260},[68,152262,152263],{"class":70,"line":2810},[68,152264,2606],{"emptyLinePlaceholder":260},[68,152266,152267,152269,152272],{"class":70,"line":2816},[68,152268,32148],{"class":331},[68,152270,152271],{"class":74}," find_student",[68,152273,152274],{"class":335},"(students, student_id):\n",[68,152276,152277,152279,152282,152284],{"class":70,"line":2822},[68,152278,3407],{"class":331},[68,152280,152281],{"class":335}," student ",[68,152283,26247],{"class":331},[68,152285,152286],{"class":335}," students:\n",[68,152288,152289,152291,152294,152296,152298,152300],{"class":70,"line":2827},[68,152290,2703],{"class":331},[68,152292,152293],{"class":335}," student[",[68,152295,151591],{"class":78},[68,152297,4649],{"class":335},[68,152299,3155],{"class":331},[68,152301,152302],{"class":335}," student_id:\n",[68,152304,152305,152307],{"class":70,"line":8153},[68,152306,15937],{"class":331},[68,152308,152309],{"class":335}," student\n",[68,152311,152312,152314],{"class":70,"line":8177},[68,152313,4296],{"class":331},[68,152315,152316],{"class":82}," None\n",[68,152318,152319],{"class":70,"line":8182},[68,152320,2606],{"emptyLinePlaceholder":260},[68,152322,152323],{"class":70,"line":8188},[68,152324,2606],{"emptyLinePlaceholder":260},[68,152326,152327,152329,152332],{"class":70,"line":8215},[68,152328,32148],{"class":331},[68,152330,152331],{"class":74}," input_int",[68,152333,152334],{"class":335},"(prompt):\n",[68,152336,152337,152339,152341],{"class":70,"line":8220},[68,152338,2457],{"class":331},[68,152340,95493],{"class":82},[68,152342,3945],{"class":335},[68,152344,152345,152348],{"class":70,"line":8226},[68,152346,152347],{"class":331},"        try",[68,152349,3945],{"class":335},[68,152351,152352,152354,152356,152358,152360],{"class":70,"line":8238},[68,152353,15937],{"class":331},[68,152355,2588],{"class":82},[68,152357,336],{"class":335},[68,152359,54022],{"class":82},[68,152361,152362],{"class":335},"(prompt))\n",[68,152364,152365,152368,152371],{"class":70,"line":8250},[68,152366,152367],{"class":331},"        except",[68,152369,152370],{"class":82}," ValueError",[68,152372,3945],{"class":335},[68,152374,152375,152377,152379,152382],{"class":70,"line":8262},[68,152376,34851],{"class":82},[68,152378,336],{"class":335},[68,152380,152381],{"class":78},"\"请输入整数\"",[68,152383,342],{"class":335},[68,152385,152386],{"class":70,"line":9921},[68,152387,2606],{"emptyLinePlaceholder":260},[68,152389,152390],{"class":70,"line":9946},[68,152391,2606],{"emptyLinePlaceholder":260},[68,152393,152394,152396,152399],{"class":70,"line":9969},[68,152395,32148],{"class":331},[68,152397,152398],{"class":74}," input_float",[68,152400,152334],{"class":335},[68,152402,152403,152405,152407],{"class":70,"line":9993},[68,152404,2457],{"class":331},[68,152406,95493],{"class":82},[68,152408,3945],{"class":335},[68,152410,152411,152413],{"class":70,"line":9998},[68,152412,152347],{"class":331},[68,152414,3945],{"class":335},[68,152416,152417,152419,152421,152423,152425],{"class":70,"line":10003},[68,152418,15937],{"class":331},[68,152420,109997],{"class":82},[68,152422,336],{"class":335},[68,152424,54022],{"class":82},[68,152426,152362],{"class":335},[68,152428,152429,152431,152433],{"class":70,"line":10008},[68,152430,152367],{"class":331},[68,152432,152370],{"class":82},[68,152434,3945],{"class":335},[68,152436,152437,152439,152441,152444],{"class":70,"line":10017},[68,152438,34851],{"class":82},[68,152440,336],{"class":335},[68,152442,152443],{"class":78},"\"请输入数字\"",[68,152445,342],{"class":335},[68,152447,152448],{"class":70,"line":10022},[68,152449,2606],{"emptyLinePlaceholder":260},[68,152451,152452],{"class":70,"line":10028},[68,152453,2606],{"emptyLinePlaceholder":260},[68,152455,152456,152458,152461],{"class":70,"line":10049},[68,152457,32148],{"class":331},[68,152459,152460],{"class":74}," add_student",[68,152462,152105],{"class":335},[68,152464,152465,152468,152470,152472,152474,152477],{"class":70,"line":10055},[68,152466,152467],{"class":335},"    student_id ",[68,152469,381],{"class":331},[68,152471,60806],{"class":82},[68,152473,336],{"class":335},[68,152475,152476],{"class":78},"\"请输入学号:\"",[68,152478,342],{"class":335},[68,152480,152481],{"class":70,"line":10069},[68,152482,2606],{"emptyLinePlaceholder":260},[68,152484,152485,152487],{"class":70,"line":10075},[68,152486,3307],{"class":331},[68,152488,152489],{"class":335}," find_student(students, student_id):\n",[68,152491,152492,152494,152496,152499],{"class":70,"line":10102},[68,152493,32652],{"class":82},[68,152495,336],{"class":335},[68,152497,152498],{"class":78},"\"学号已存在\"",[68,152500,342],{"class":335},[68,152502,152503],{"class":70,"line":10111},[68,152504,152505],{"class":331},"        return\n",[68,152507,152508],{"class":70,"line":10117},[68,152509,2606],{"emptyLinePlaceholder":260},[68,152511,152512,152515,152517,152519,152521,152524],{"class":70,"line":10125},[68,152513,152514],{"class":335},"    name ",[68,152516,381],{"class":331},[68,152518,60806],{"class":82},[68,152520,336],{"class":335},[68,152522,152523],{"class":78},"\"请输入姓名:\"",[68,152525,342],{"class":335},[68,152527,152528,152531,152533,152536,152539],{"class":70,"line":10130},[68,152529,152530],{"class":335},"    age ",[68,152532,381],{"class":331},[68,152534,152535],{"class":335}," input_int(",[68,152537,152538],{"class":78},"\"请输入年龄:\"",[68,152540,342],{"class":335},[68,152542,152543,152546,152548,152551,152554],{"class":70,"line":16809},[68,152544,152545],{"class":335},"    score ",[68,152547,381],{"class":331},[68,152549,152550],{"class":335}," input_float(",[68,152552,152553],{"class":78},"\"请输入成绩:\"",[68,152555,342],{"class":335},[68,152557,152558],{"class":70,"line":16815},[68,152559,2606],{"emptyLinePlaceholder":260},[68,152561,152562],{"class":70,"line":16838},[68,152563,152564],{"class":335},"    students.append({\n",[68,152566,152567,152570],{"class":70,"line":16844},[68,152568,152569],{"class":78},"        \"student_id\"",[68,152571,152572],{"class":335},": student_id,\n",[68,152574,152575,152578],{"class":70,"line":16867},[68,152576,152577],{"class":78},"        \"name\"",[68,152579,152580],{"class":335},": name,\n",[68,152582,152583,152586],{"class":70,"line":16881},[68,152584,152585],{"class":78},"        \"age\"",[68,152587,152588],{"class":335},": age,\n",[68,152590,152591,152594],{"class":70,"line":16901},[68,152592,152593],{"class":78},"        \"score\"",[68,152595,152596],{"class":335},": score,\n",[68,152598,152599],{"class":70,"line":16907},[68,152600,33662],{"class":335},[68,152602,152603],{"class":70,"line":16918},[68,152604,152605],{"class":335},"    save_students(students)\n",[68,152607,152608,152610,152612,152615],{"class":70,"line":16941},[68,152609,31500],{"class":82},[68,152611,336],{"class":335},[68,152613,152614],{"class":78},"\"添加成功\"",[68,152616,342],{"class":335},[68,152618,152619],{"class":70,"line":16963},[68,152620,2606],{"emptyLinePlaceholder":260},[68,152622,152623],{"class":70,"line":16968},[68,152624,2606],{"emptyLinePlaceholder":260},[68,152626,152627,152629,152632],{"class":70,"line":16974},[68,152628,32148],{"class":331},[68,152630,152631],{"class":74}," delete_student",[68,152633,152105],{"class":335},[68,152635,152636,152638,152640,152642,152644,152647],{"class":70,"line":16988},[68,152637,152467],{"class":335},[68,152639,381],{"class":331},[68,152641,60806],{"class":82},[68,152643,336],{"class":335},[68,152645,152646],{"class":78},"\"请输入要删除的学号:\"",[68,152648,342],{"class":335},[68,152650,152651,152654,152656],{"class":70,"line":17001},[68,152652,152653],{"class":335},"    student ",[68,152655,381],{"class":331},[68,152657,152658],{"class":335}," find_student(students, student_id)\n",[68,152660,152661],{"class":70,"line":17006},[68,152662,2606],{"emptyLinePlaceholder":260},[68,152664,152665,152667,152669,152671,152673],{"class":70,"line":17020},[68,152666,3307],{"class":331},[68,152668,152281],{"class":335},[68,152670,39128],{"class":331},[68,152672,39134],{"class":82},[68,152674,3945],{"class":335},[68,152676,152677,152679,152681,152684],{"class":70,"line":17025},[68,152678,32652],{"class":82},[68,152680,336],{"class":335},[68,152682,152683],{"class":78},"\"学生不存在\"",[68,152685,342],{"class":335},[68,152687,152688],{"class":70,"line":17031},[68,152689,152505],{"class":331},[68,152691,152692],{"class":70,"line":17036},[68,152693,2606],{"emptyLinePlaceholder":260},[68,152695,152696],{"class":70,"line":17050},[68,152697,152698],{"class":335},"    students.remove(student)\n",[68,152700,152701],{"class":70,"line":17055},[68,152702,152605],{"class":335},[68,152704,152705,152707,152709,152712],{"class":70,"line":17060},[68,152706,31500],{"class":82},[68,152708,336],{"class":335},[68,152710,152711],{"class":78},"\"删除成功\"",[68,152713,342],{"class":335},[68,152715,152716],{"class":70,"line":17074},[68,152717,2606],{"emptyLinePlaceholder":260},[68,152719,152720],{"class":70,"line":17086},[68,152721,2606],{"emptyLinePlaceholder":260},[68,152723,152724,152726,152729],{"class":70,"line":17091},[68,152725,32148],{"class":331},[68,152727,152728],{"class":74}," update_student",[68,152730,152105],{"class":335},[68,152732,152733,152735,152737,152739,152741,152744],{"class":70,"line":17104},[68,152734,152467],{"class":335},[68,152736,381],{"class":331},[68,152738,60806],{"class":82},[68,152740,336],{"class":335},[68,152742,152743],{"class":78},"\"请输入要修改的学号:\"",[68,152745,342],{"class":335},[68,152747,152748,152750,152752],{"class":70,"line":17109},[68,152749,152653],{"class":335},[68,152751,381],{"class":331},[68,152753,152658],{"class":335},[68,152755,152756],{"class":70,"line":17114},[68,152757,2606],{"emptyLinePlaceholder":260},[68,152759,152760,152762,152764,152766,152768],{"class":70,"line":17119},[68,152761,3307],{"class":331},[68,152763,152281],{"class":335},[68,152765,39128],{"class":331},[68,152767,39134],{"class":82},[68,152769,3945],{"class":335},[68,152771,152772,152774,152776,152778],{"class":70,"line":17132},[68,152773,32652],{"class":82},[68,152775,336],{"class":335},[68,152777,152683],{"class":78},[68,152779,342],{"class":335},[68,152781,152782],{"class":70,"line":17137},[68,152783,152505],{"class":331},[68,152785,152786],{"class":70,"line":32834},[68,152787,2606],{"emptyLinePlaceholder":260},[68,152789,152790,152792,152794,152796,152798,152801],{"class":70,"line":32840},[68,152791,152514],{"class":335},[68,152793,381],{"class":331},[68,152795,60806],{"class":82},[68,152797,336],{"class":335},[68,152799,152800],{"class":78},"\"请输入新姓名:\"",[68,152802,342],{"class":335},[68,152804,152805,152807,152809,152811,152814],{"class":70,"line":32846},[68,152806,152530],{"class":335},[68,152808,381],{"class":331},[68,152810,152535],{"class":335},[68,152812,152813],{"class":78},"\"请输入新年龄:\"",[68,152815,342],{"class":335},[68,152817,152818,152820,152822,152824,152827],{"class":70,"line":32852},[68,152819,152545],{"class":335},[68,152821,381],{"class":331},[68,152823,152550],{"class":335},[68,152825,152826],{"class":78},"\"请输入新成绩:\"",[68,152828,342],{"class":335},[68,152830,152831],{"class":70,"line":32858},[68,152832,2606],{"emptyLinePlaceholder":260},[68,152834,152835,152838,152840,152842,152844],{"class":70,"line":32869},[68,152836,152837],{"class":335},"    student[",[68,152839,62880],{"class":78},[68,152841,4649],{"class":335},[68,152843,381],{"class":331},[68,152845,149939],{"class":335},[68,152847,152848,152850,152852,152854,152856],{"class":70,"line":32875},[68,152849,152837],{"class":335},[68,152851,69325],{"class":78},[68,152853,4649],{"class":335},[68,152855,381],{"class":331},[68,152857,149951],{"class":335},[68,152859,152860,152862,152864,152866,152868],{"class":70,"line":32895},[68,152861,152837],{"class":335},[68,152863,151616],{"class":78},[68,152865,4649],{"class":335},[68,152867,381],{"class":331},[68,152869,1786],{"class":335},[68,152871,152872],{"class":70,"line":32901},[68,152873,2606],{"emptyLinePlaceholder":260},[68,152875,152876],{"class":70,"line":32912},[68,152877,152605],{"class":335},[68,152879,152880,152882,152884,152887],{"class":70,"line":32918},[68,152881,31500],{"class":82},[68,152883,336],{"class":335},[68,152885,152886],{"class":78},"\"修改成功\"",[68,152888,342],{"class":335},[68,152890,152891],{"class":70,"line":32924},[68,152892,2606],{"emptyLinePlaceholder":260},[68,152894,152895],{"class":70,"line":32930},[68,152896,2606],{"emptyLinePlaceholder":260},[68,152898,152899,152901,152904],{"class":70,"line":32936},[68,152900,32148],{"class":331},[68,152902,152903],{"class":74}," query_student",[68,152905,152105],{"class":335},[68,152907,152908,152910,152912,152914,152916,152919],{"class":70,"line":32942},[68,152909,152467],{"class":335},[68,152911,381],{"class":331},[68,152913,60806],{"class":82},[68,152915,336],{"class":335},[68,152917,152918],{"class":78},"\"请输入要查询的学号:\"",[68,152920,342],{"class":335},[68,152922,152923,152925,152927],{"class":70,"line":32948},[68,152924,152653],{"class":335},[68,152926,381],{"class":331},[68,152928,152658],{"class":335},[68,152930,152931],{"class":70,"line":32954},[68,152932,2606],{"emptyLinePlaceholder":260},[68,152934,152935,152937,152939,152941,152943],{"class":70,"line":32974},[68,152936,3307],{"class":331},[68,152938,152281],{"class":335},[68,152940,39128],{"class":331},[68,152942,39134],{"class":82},[68,152944,3945],{"class":335},[68,152946,152947,152949,152951,152953],{"class":70,"line":32980},[68,152948,32652],{"class":82},[68,152950,336],{"class":335},[68,152952,152683],{"class":78},[68,152954,342],{"class":335},[68,152956,152957],{"class":70,"line":32996},[68,152958,152505],{"class":331},[68,152960,152961],{"class":70,"line":33002},[68,152962,2606],{"emptyLinePlaceholder":260},[68,152964,152965],{"class":70,"line":33016},[68,152966,152967],{"class":335},"    print_student(student)\n",[68,152969,152970],{"class":70,"line":33022},[68,152971,2606],{"emptyLinePlaceholder":260},[68,152973,152974],{"class":70,"line":33037},[68,152975,2606],{"emptyLinePlaceholder":260},[68,152977,152978,152980,152983],{"class":70,"line":33043},[68,152979,32148],{"class":331},[68,152981,152982],{"class":74}," print_student",[68,152984,152985],{"class":335},"(student):\n",[68,152987,152988,152990],{"class":70,"line":33052},[68,152989,31500],{"class":82},[68,152991,151583],{"class":335},[68,152993,152994,152997,152999,153001,153004,153007,153009,153012],{"class":70,"line":33058},[68,152995,152996],{"class":331},"        f",[68,152998,584],{"class":78},[68,153000,1229],{"class":82},[68,153002,153003],{"class":335},"student[",[68,153005,153006],{"class":78},"'student_id'",[68,153008,1273],{"class":335},[68,153010,153011],{"class":82},"}\\t",[68,153013,25337],{"class":78},[68,153015,153016,153018,153020,153022,153024,153027,153029,153031],{"class":70,"line":33067},[68,153017,152996],{"class":331},[68,153019,584],{"class":78},[68,153021,1229],{"class":82},[68,153023,153003],{"class":335},[68,153025,153026],{"class":78},"'name'",[68,153028,1273],{"class":335},[68,153030,153011],{"class":82},[68,153032,25337],{"class":78},[68,153034,153035,153037,153039,153041,153043,153046,153048,153050],{"class":70,"line":33073},[68,153036,152996],{"class":331},[68,153038,584],{"class":78},[68,153040,1229],{"class":82},[68,153042,153003],{"class":335},[68,153044,153045],{"class":78},"'age'",[68,153047,1273],{"class":335},[68,153049,153011],{"class":82},[68,153051,25337],{"class":78},[68,153053,153054,153056,153058,153060,153062,153065,153067,153069],{"class":70,"line":33079},[68,153055,152996],{"class":331},[68,153057,584],{"class":78},[68,153059,1229],{"class":82},[68,153061,153003],{"class":335},[68,153063,153064],{"class":78},"'score'",[68,153066,1273],{"class":335},[68,153068,1279],{"class":82},[68,153070,25337],{"class":78},[68,153072,153073],{"class":70,"line":33088},[68,153074,153075],{"class":335},"    )\n",[68,153077,153078],{"class":70,"line":33094},[68,153079,2606],{"emptyLinePlaceholder":260},[68,153081,153082],{"class":70,"line":33105},[68,153083,2606],{"emptyLinePlaceholder":260},[68,153085,153086,153088,153091],{"class":70,"line":33111},[68,153087,32148],{"class":331},[68,153089,153090],{"class":74}," show_all_students",[68,153092,152105],{"class":335},[68,153094,153095,153097,153099],{"class":70,"line":33130},[68,153096,3307],{"class":331},[68,153098,39131],{"class":331},[68,153100,152286],{"class":335},[68,153102,153103,153105,153107,153110],{"class":70,"line":33136},[68,153104,32652],{"class":82},[68,153106,336],{"class":335},[68,153108,153109],{"class":78},"\"暂无学生\"",[68,153111,342],{"class":335},[68,153113,153114],{"class":70,"line":33147},[68,153115,152505],{"class":331},[68,153117,153118],{"class":70,"line":33153},[68,153119,2606],{"emptyLinePlaceholder":260},[68,153121,153122,153124,153126,153129,153131,153134,153136,153139,153141,153144],{"class":70,"line":33173},[68,153123,31500],{"class":82},[68,153125,336],{"class":335},[68,153127,153128],{"class":78},"\"学号",[68,153130,1438],{"class":82},[68,153132,153133],{"class":78},"姓名",[68,153135,1438],{"class":82},[68,153137,153138],{"class":78},"年龄",[68,153140,1438],{"class":82},[68,153142,153143],{"class":78},"成绩\"",[68,153145,342],{"class":335},[68,153147,153148,153150,153152,153154],{"class":70,"line":33189},[68,153149,3407],{"class":331},[68,153151,152281],{"class":335},[68,153153,26247],{"class":331},[68,153155,152286],{"class":335},[68,153157,153158],{"class":70,"line":33195},[68,153159,153160],{"class":335},"        print_student(student)\n",[68,153162,153163],{"class":70,"line":33209},[68,153164,2606],{"emptyLinePlaceholder":260},[68,153166,153167],{"class":70,"line":33215},[68,153168,2606],{"emptyLinePlaceholder":260},[68,153170,153171,153173,153175],{"class":70,"line":33221},[68,153172,32148],{"class":331},[68,153174,2179],{"class":74},[68,153176,32154],{"class":335},[68,153178,153179,153182,153184],{"class":70,"line":33232},[68,153180,153181],{"class":335},"    students ",[68,153183,381],{"class":331},[68,153185,153186],{"class":335}," load_students()\n",[68,153188,153189],{"class":70,"line":33238},[68,153190,2606],{"emptyLinePlaceholder":260},[68,153192,153193,153195,153197],{"class":70,"line":33244},[68,153194,2457],{"class":331},[68,153196,95493],{"class":82},[68,153198,3945],{"class":335},[68,153200,153201],{"class":70,"line":33254},[68,153202,153203],{"class":335},"        show_menu()\n",[68,153205,153206,153209,153211,153213,153215,153218],{"class":70,"line":33260},[68,153207,153208],{"class":335},"        choice ",[68,153210,381],{"class":331},[68,153212,60806],{"class":82},[68,153214,336],{"class":335},[68,153216,153217],{"class":78},"\"请输入操作:\"",[68,153219,342],{"class":335},[68,153221,153222],{"class":70,"line":33271},[68,153223,2606],{"emptyLinePlaceholder":260},[68,153225,153226,153228,153231,153233,153236],{"class":70,"line":33277},[68,153227,2703],{"class":331},[68,153229,153230],{"class":335}," choice ",[68,153232,3155],{"class":331},[68,153234,153235],{"class":78}," \"1\"",[68,153237,3945],{"class":335},[68,153239,153240],{"class":70,"line":33287},[68,153241,153242],{"class":335},"            add_student(students)\n",[68,153244,153245,153248,153250,153252,153255],{"class":70,"line":33292},[68,153246,153247],{"class":331},"        elif",[68,153249,153230],{"class":335},[68,153251,3155],{"class":331},[68,153253,153254],{"class":78}," \"2\"",[68,153256,3945],{"class":335},[68,153258,153259],{"class":70,"line":33298},[68,153260,153261],{"class":335},"            delete_student(students)\n",[68,153263,153264,153266,153268,153270,153273],{"class":70,"line":33347},[68,153265,153247],{"class":331},[68,153267,153230],{"class":335},[68,153269,3155],{"class":331},[68,153271,153272],{"class":78}," \"3\"",[68,153274,3945],{"class":335},[68,153276,153277],{"class":70,"line":33394},[68,153278,153279],{"class":335},"            update_student(students)\n",[68,153281,153282,153284,153286,153288,153291],{"class":70,"line":33399},[68,153283,153247],{"class":331},[68,153285,153230],{"class":335},[68,153287,3155],{"class":331},[68,153289,153290],{"class":78}," \"4\"",[68,153292,3945],{"class":335},[68,153294,153295],{"class":70,"line":33405},[68,153296,153297],{"class":335},"            query_student(students)\n",[68,153299,153300,153302,153304,153306,153309],{"class":70,"line":33424},[68,153301,153247],{"class":331},[68,153303,153230],{"class":335},[68,153305,3155],{"class":331},[68,153307,153308],{"class":78}," \"5\"",[68,153310,3945],{"class":335},[68,153312,153313],{"class":70,"line":33430},[68,153314,153315],{"class":335},"            show_all_students(students)\n",[68,153317,153318,153320,153322,153324,153327],{"class":70,"line":33450},[68,153319,153247],{"class":331},[68,153321,153230],{"class":335},[68,153323,3155],{"class":331},[68,153325,153326],{"class":78}," \"0\"",[68,153328,3945],{"class":335},[68,153330,153331,153333,153335,153338],{"class":70,"line":33456},[68,153332,34851],{"class":82},[68,153334,336],{"class":335},[68,153336,153337],{"class":78},"\"退出系统\"",[68,153339,342],{"class":335},[68,153341,153342],{"class":70,"line":33462},[68,153343,115298],{"class":331},[68,153345,153346,153348],{"class":70,"line":33472},[68,153347,2740],{"class":331},[68,153349,3945],{"class":335},[68,153351,153352,153354,153356,153359],{"class":70,"line":33477},[68,153353,34851],{"class":82},[68,153355,336],{"class":335},[68,153357,153358],{"class":78},"\"输入错误\"",[68,153360,342],{"class":335},[68,153362,153363],{"class":70,"line":33483},[68,153364,2606],{"emptyLinePlaceholder":260},[68,153366,153367],{"class":70,"line":33499},[68,153368,2606],{"emptyLinePlaceholder":260},[68,153370,153371,153373,153375,153377,153379],{"class":70,"line":33544},[68,153372,1738],{"class":331},[68,153374,31421],{"class":82},[68,153376,101759],{"class":331},[68,153378,101762],{"class":78},[68,153380,3945],{"class":335},[68,153382,153383],{"class":70,"line":33550},[68,153384,101769],{"class":335},[19,153386,153387],{},"这个项目串联了：",[23,153389,153390,153393,153396,153399,153402,153404],{},[26,153391,153392],{},"菜单循环。",[26,153394,153395],{},"函数封装。",[26,153397,153398],{},"列表字典。",[26,153400,153401],{},"JSON 读写。",[26,153403,151871],{},[26,153405,153406,28588],{},[65,153407,153408],{},"if __name__ == \"__main__\"",[14,153410,153412],{"id":153411},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153414,153415],{},"可以进一步拆成两个类：",[23,153417,153418,153423],{},[26,153419,153420,153422],{},[65,153421,149712],{},"：表示单个学生。",[26,153424,153425,153427],{},[65,153426,151738],{},"：负责学生增删改查和文件保存。",[19,153429,153430],{},"示意代码：",[58,153432,153434],{"className":30579,"code":153433,"language":30581,"meta":63,"style":63},"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",[65,153435,153436,153446,153450,153454,153458,153466,153473,153479,153485,153491,153495,153503,153509,153519,153529,153539,153549,153553,153557,153563,153571,153579,153587,153595,153603,153611],{"__ignoreMap":63},[68,153437,153438,153440,153442,153444],{"class":70,"line":71},[68,153439,30938],{"class":331},[68,153441,151296],{"class":335},[68,153443,30593],{"class":331},[68,153445,151301],{"class":335},[68,153447,153448],{"class":70,"line":92},[68,153449,2606],{"emptyLinePlaceholder":260},[68,153451,153452],{"class":70,"line":1387},[68,153453,2606],{"emptyLinePlaceholder":260},[68,153455,153456],{"class":70,"line":1402},[68,153457,151314],{"class":74},[68,153459,153460,153462,153464],{"class":70,"line":1408},[68,153461,14899],{"class":331},[68,153463,8103],{"class":74},[68,153465,3945],{"class":335},[68,153467,153468,153471],{"class":70,"line":1422},[68,153469,153470],{"class":335},"    student_id: ",[68,153472,151330],{"class":82},[68,153474,153475,153477],{"class":70,"line":1428},[68,153476,151327],{"class":335},[68,153478,151330],{"class":82},[68,153480,153481,153483],{"class":70,"line":1519},[68,153482,151335],{"class":335},[68,153484,151338],{"class":82},[68,153486,153487,153489],{"class":70,"line":1525},[68,153488,151343],{"class":335},[68,153490,151346],{"class":82},[68,153492,153493],{"class":70,"line":1537},[68,153494,2606],{"emptyLinePlaceholder":260},[68,153496,153497,153499,153501],{"class":70,"line":1819},[68,153498,31002],{"class":331},[68,153500,151494],{"class":74},[68,153502,31008],{"class":335},[68,153504,153505,153507],{"class":70,"line":1824},[68,153506,14957],{"class":331},[68,153508,15777],{"class":335},[68,153510,153511,153513,153515,153517],{"class":70,"line":1830},[68,153512,151507],{"class":78},[68,153514,51638],{"class":335},[68,153516,31024],{"class":82},[68,153518,151514],{"class":335},[68,153520,153521,153523,153525,153527],{"class":70,"line":1835},[68,153522,151519],{"class":78},[68,153524,51638],{"class":335},[68,153526,31024],{"class":82},[68,153528,151526],{"class":335},[68,153530,153531,153533,153535,153537],{"class":70,"line":1849},[68,153532,151531],{"class":78},[68,153534,51638],{"class":335},[68,153536,31024],{"class":82},[68,153538,151538],{"class":335},[68,153540,153541,153543,153545,153547],{"class":70,"line":1854},[68,153542,151543],{"class":78},[68,153544,51638],{"class":335},[68,153546,31024],{"class":82},[68,153548,151550],{"class":335},[68,153550,153551],{"class":70,"line":1860},[68,153552,2735],{"class":335},[68,153554,153555],{"class":70,"line":1881},[68,153556,2606],{"emptyLinePlaceholder":260},[68,153558,153559,153561],{"class":70,"line":1886},[68,153560,151158],{"class":74},[68,153562,151161],{"class":82},[68,153564,153565,153567,153569],{"class":70,"line":1900},[68,153566,31002],{"class":331},[68,153568,151571],{"class":74},[68,153570,151574],{"class":335},[68,153572,153573,153575,153577],{"class":70,"line":1905},[68,153574,14957],{"class":331},[68,153576,151178],{"class":82},[68,153578,151583],{"class":335},[68,153580,153581,153583,153585],{"class":70,"line":1934},[68,153582,151588],{"class":335},[68,153584,151591],{"class":78},[68,153586,88037],{"class":335},[68,153588,153589,153591,153593],{"class":70,"line":1939},[68,153590,151588],{"class":335},[68,153592,62880],{"class":78},[68,153594,88037],{"class":335},[68,153596,153597,153599,153601],{"class":70,"line":1956},[68,153598,151588],{"class":335},[68,153600,69325],{"class":78},[68,153602,88037],{"class":335},[68,153604,153605,153607,153609],{"class":70,"line":1961},[68,153606,151588],{"class":335},[68,153608,151616],{"class":78},[68,153610,88037],{"class":335},[68,153612,153613],{"class":70,"line":1966},[68,153614,38327],{"class":335},[19,153616,153617],{},"管理器示意：",[58,153619,153621],{"className":30579,"code":153620,"language":30581,"meta":63,"style":63},"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",[65,153622,153623,153632,153640,153651,153655,153665,153678,153689,153696,153702,153706,153715,153724,153730,153737],{"__ignoreMap":63},[68,153624,153625,153627,153630],{"class":70,"line":71},[68,153626,14899],{"class":331},[68,153628,153629],{"class":74}," StudentManager",[68,153631,3945],{"class":335},[68,153633,153634,153636,153638],{"class":70,"line":92},[68,153635,31002],{"class":331},[68,153637,31005],{"class":82},[68,153639,31008],{"class":335},[68,153641,153642,153644,153647,153649],{"class":70,"line":1387},[68,153643,31046],{"class":82},[68,153645,153646],{"class":335},".students ",[68,153648,381],{"class":331},[68,153650,52039],{"class":335},[68,153652,153653],{"class":70,"line":1402},[68,153654,2606],{"emptyLinePlaceholder":260},[68,153656,153657,153659,153662],{"class":70,"line":1408},[68,153658,31002],{"class":331},[68,153660,153661],{"class":74}," find_by_id",[68,153663,153664],{"class":335},"(self, student_id):\n",[68,153666,153667,153669,153671,153673,153675],{"class":70,"line":1422},[68,153668,3609],{"class":331},[68,153670,152281],{"class":335},[68,153672,26247],{"class":331},[68,153674,39074],{"class":82},[68,153676,153677],{"class":335},".students:\n",[68,153679,153680,153682,153685,153687],{"class":70,"line":1428},[68,153681,4848],{"class":331},[68,153683,153684],{"class":335}," student.student_id ",[68,153686,3155],{"class":331},[68,153688,152302],{"class":335},[68,153690,153691,153694],{"class":70,"line":1519},[68,153692,153693],{"class":331},"                return",[68,153695,152309],{"class":335},[68,153697,153698,153700],{"class":70,"line":1525},[68,153699,14957],{"class":331},[68,153701,152316],{"class":82},[68,153703,153704],{"class":70,"line":1537},[68,153705,2606],{"emptyLinePlaceholder":260},[68,153707,153708,153710,153712],{"class":70,"line":1819},[68,153709,31002],{"class":331},[68,153711,138],{"class":74},[68,153713,153714],{"class":335},"(self, student):\n",[68,153716,153717,153719,153721],{"class":70,"line":1824},[68,153718,2703],{"class":331},[68,153720,39074],{"class":82},[68,153722,153723],{"class":335},".find_by_id(student.student_id):\n",[68,153725,153726,153728],{"class":70,"line":1830},[68,153727,15937],{"class":331},[68,153729,126004],{"class":82},[68,153731,153732,153734],{"class":70,"line":1835},[68,153733,31046],{"class":82},[68,153735,153736],{"class":335},".students.append(student)\n",[68,153738,153739,153741],{"class":70,"line":1849},[68,153740,14957],{"class":331},[68,153742,153743],{"class":82}," True\n",[19,153745,153746],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153748,153750],{"id":153749},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[301,153752,153754],{"id":153753},"_1251-数据结构","12.5.1 数据结构",[58,153756,153758],{"className":30579,"code":153757,"language":30581,"meta":63,"style":63},"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",[65,153759,153760,153768,153799,153829,153858,153887],{"__ignoreMap":63},[68,153761,153762,153764,153766],{"class":70,"line":71},[68,153763,148609],{"class":335},[68,153765,381],{"class":331},[68,153767,55648],{"class":335},[68,153769,153770,153772,153774,153776,153778,153780,153783,153785,153788,153790,153792,153794,153797],{"class":70,"line":92},[68,153771,148529],{"class":335},[68,153773,148141],{"class":78},[68,153775,51638],{"class":335},[68,153777,148752],{"class":78},[68,153779,12640],{"class":335},[68,153781,153782],{"class":78},"\"category\"",[68,153784,51638],{"class":335},[68,153786,153787],{"class":78},"\"手机\"",[68,153789,12640],{"class":335},[68,153791,84285],{"class":78},[68,153793,51638],{"class":335},[68,153795,153796],{"class":82},"12000",[68,153798,5136],{"class":335},[68,153800,153801,153803,153805,153807,153809,153811,153813,153815,153818,153820,153822,153824,153827],{"class":70,"line":1387},[68,153802,148529],{"class":335},[68,153804,148141],{"class":78},[68,153806,51638],{"class":335},[68,153808,148752],{"class":78},[68,153810,12640],{"class":335},[68,153812,153782],{"class":78},[68,153814,51638],{"class":335},[68,153816,153817],{"class":78},"\"电脑\"",[68,153819,12640],{"class":335},[68,153821,84285],{"class":78},[68,153823,51638],{"class":335},[68,153825,153826],{"class":82},"18000",[68,153828,5136],{"class":335},[68,153830,153831,153833,153835,153837,153839,153841,153843,153845,153847,153849,153851,153853,153856],{"class":70,"line":1402},[68,153832,148529],{"class":335},[68,153834,148141],{"class":78},[68,153836,51638],{"class":335},[68,153838,148773],{"class":78},[68,153840,12640],{"class":335},[68,153842,153782],{"class":78},[68,153844,51638],{"class":335},[68,153846,153787],{"class":78},[68,153848,12640],{"class":335},[68,153850,84285],{"class":78},[68,153852,51638],{"class":335},[68,153854,153855],{"class":82},"15000",[68,153857,5136],{"class":335},[68,153859,153860,153862,153864,153866,153868,153870,153872,153874,153876,153878,153880,153882,153885],{"class":70,"line":1408},[68,153861,148529],{"class":335},[68,153863,148141],{"class":78},[68,153865,51638],{"class":335},[68,153867,148773],{"class":78},[68,153869,12640],{"class":335},[68,153871,153782],{"class":78},[68,153873,51638],{"class":335},[68,153875,153817],{"class":78},[68,153877,12640],{"class":335},[68,153879,84285],{"class":78},[68,153881,51638],{"class":335},[68,153883,153884],{"class":82},"16000",[68,153886,5136],{"class":335},[68,153888,153889],{"class":70,"line":1422},[68,153890,33447],{"class":335},[301,153892,153894],{"id":153893},"_1252-按日期统计","12.5.2 按日期统计",[58,153896,153898],{"className":30579,"code":153897,"language":30581,"meta":63,"style":63},"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",[65,153899,153900,153909,153913,153924,153938,153951,153970,153974],{"__ignoreMap":63},[68,153901,153902,153905,153907],{"class":70,"line":71},[68,153903,153904],{"class":335},"daily_total ",[68,153906,381],{"class":331},[68,153908,88069],{"class":335},[68,153910,153911],{"class":70,"line":92},[68,153912,2606],{"emptyLinePlaceholder":260},[68,153914,153915,153917,153919,153921],{"class":70,"line":1387},[68,153916,3231],{"class":331},[68,153918,148353],{"class":335},[68,153920,26247],{"class":331},[68,153922,153923],{"class":335}," sales:\n",[68,153925,153926,153929,153931,153934,153936],{"class":70,"line":1402},[68,153927,153928],{"class":335},"    date ",[68,153930,381],{"class":331},[68,153932,153933],{"class":335}," item[",[68,153935,148141],{"class":78},[68,153937,33447],{"class":335},[68,153939,153940,153943,153945,153947,153949],{"class":70,"line":1408},[68,153941,153942],{"class":335},"    amount ",[68,153944,381],{"class":331},[68,153946,153933],{"class":335},[68,153948,84285],{"class":78},[68,153950,33447],{"class":335},[68,153952,153953,153956,153958,153961,153963,153965,153967],{"class":70,"line":1422},[68,153954,153955],{"class":335},"    daily_total[date] ",[68,153957,381],{"class":331},[68,153959,153960],{"class":335}," daily_total.get(date, ",[68,153962,525],{"class":82},[68,153964,13919],{"class":335},[68,153966,814],{"class":331},[68,153968,153969],{"class":335}," amount\n",[68,153971,153972],{"class":70,"line":1428},[68,153973,2606],{"emptyLinePlaceholder":260},[68,153975,153976,153978],{"class":70,"line":1519},[68,153977,30616],{"class":82},[68,153979,153980],{"class":335},"(daily_total)\n",[301,153982,153984],{"id":153983},"_1253-按类别统计","12.5.3 按类别统计",[58,153986,153988],{"className":30579,"code":153987,"language":30581,"meta":63,"style":63},"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",[65,153989,153990,153999,154003,154013,154026,154038,154056,154060],{"__ignoreMap":63},[68,153991,153992,153995,153997],{"class":70,"line":71},[68,153993,153994],{"class":335},"category_total ",[68,153996,381],{"class":331},[68,153998,88069],{"class":335},[68,154000,154001],{"class":70,"line":92},[68,154002,2606],{"emptyLinePlaceholder":260},[68,154004,154005,154007,154009,154011],{"class":70,"line":1387},[68,154006,3231],{"class":331},[68,154008,148353],{"class":335},[68,154010,26247],{"class":331},[68,154012,153923],{"class":335},[68,154014,154015,154018,154020,154022,154024],{"class":70,"line":1402},[68,154016,154017],{"class":335},"    category ",[68,154019,381],{"class":331},[68,154021,153933],{"class":335},[68,154023,153782],{"class":78},[68,154025,33447],{"class":335},[68,154027,154028,154030,154032,154034,154036],{"class":70,"line":1408},[68,154029,153942],{"class":335},[68,154031,381],{"class":331},[68,154033,153933],{"class":335},[68,154035,84285],{"class":78},[68,154037,33447],{"class":335},[68,154039,154040,154043,154045,154048,154050,154052,154054],{"class":70,"line":1422},[68,154041,154042],{"class":335},"    category_total[category] ",[68,154044,381],{"class":331},[68,154046,154047],{"class":335}," category_total.get(category, ",[68,154049,525],{"class":82},[68,154051,13919],{"class":335},[68,154053,814],{"class":331},[68,154055,153969],{"class":335},[68,154057,154058],{"class":70,"line":1428},[68,154059,2606],{"emptyLinePlaceholder":260},[68,154061,154062,154064],{"class":70,"line":1519},[68,154063,30616],{"class":82},[68,154065,154066],{"class":335},"(category_total)\n",[301,154068,154070],{"id":154069},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[58,154072,154074],{"className":30579,"code":154073,"language":30581,"meta":63,"style":63},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[65,154075,154076,154101],{"__ignoreMap":63},[68,154077,154078,154081,154083,154085,154088,154091,154094,154097,154099],{"class":70,"line":71},[68,154079,154080],{"class":335},"top_date, top_amount ",[68,154082,381],{"class":331},[68,154084,6156],{"class":82},[68,154086,154087],{"class":335},"(daily_total.items(), ",[68,154089,154090],{"class":5421},"key",[68,154092,154093],{"class":331},"=lambda",[68,154095,154096],{"class":335}," item: item[",[68,154098,551],{"class":82},[68,154100,4863],{"class":335},[68,154102,154103,154105],{"class":70,"line":92},[68,154104,30616],{"class":82},[68,154106,154107],{"class":335},"(top_date, top_amount)\n",[14,154109,154111],{"id":154110},"_126-绘制柱状图","12.6 绘制柱状图",[58,154113,154115],{"className":30579,"code":154114,"language":30581,"meta":63,"style":63},"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",[65,154116,154117,154131,154142,154146,154154,154166,154178,154189,154193,154197,154207,154218,154232,154237,154254,154271,154287,154291],{"__ignoreMap":63},[68,154118,154119,154121,154123,154125,154127,154129],{"class":70,"line":71},[68,154120,30938],{"class":331},[68,154122,147523],{"class":335},[68,154124,30593],{"class":331},[68,154126,147528],{"class":335},[68,154128,31584],{"class":331},[68,154130,147533],{"class":335},[68,154132,154133,154135,154137,154139],{"class":70,"line":92},[68,154134,30938],{"class":331},[68,154136,147382],{"class":335},[68,154138,30593],{"class":331},[68,154140,154141],{"class":335}," Bar\n",[68,154143,154144],{"class":70,"line":1387},[68,154145,2606],{"emptyLinePlaceholder":260},[68,154147,154148,154150,154152],{"class":70,"line":1402},[68,154149,153994],{"class":335},[68,154151,381],{"class":331},[68,154153,15777],{"class":335},[68,154155,154156,154159,154161,154164],{"class":70,"line":1408},[68,154157,154158],{"class":78},"    \"手机\"",[68,154160,51638],{"class":335},[68,154162,154163],{"class":82},"27000",[68,154165,31667],{"class":335},[68,154167,154168,154171,154173,154176],{"class":70,"line":1422},[68,154169,154170],{"class":78},"    \"电脑\"",[68,154172,51638],{"class":335},[68,154174,154175],{"class":82},"34000",[68,154177,31667],{"class":335},[68,154179,154180,154183,154185,154187],{"class":70,"line":1428},[68,154181,154182],{"class":78},"    \"耳机\"",[68,154184,51638],{"class":335},[68,154186,124596],{"class":82},[68,154188,31667],{"class":335},[68,154190,154191],{"class":70,"line":1519},[68,154192,1772],{"class":335},[68,154194,154195],{"class":70,"line":1525},[68,154196,2606],{"emptyLinePlaceholder":260},[68,154198,154199,154202,154204],{"class":70,"line":1537},[68,154200,154201],{"class":335},"bar ",[68,154203,381],{"class":331},[68,154205,154206],{"class":335}," Bar()\n",[68,154208,154209,154212,154215],{"class":70,"line":1819},[68,154210,154211],{"class":335},"bar.add_xaxis(",[68,154213,154214],{"class":82},"list",[68,154216,154217],{"class":335},"(category_total.keys()))\n",[68,154219,154220,154223,154225,154227,154229],{"class":70,"line":1824},[68,154221,154222],{"class":335},"bar.add_yaxis(",[68,154224,147439],{"class":78},[68,154226,12640],{"class":335},[68,154228,154214],{"class":82},[68,154230,154231],{"class":335},"(category_total.values()))\n",[68,154233,154234],{"class":70,"line":1830},[68,154235,154236],{"class":335},"bar.set_global_opts(\n",[68,154238,154239,154241,154243,154245,154247,154249,154252],{"class":70,"line":1835},[68,154240,147617],{"class":5421},[68,154242,381],{"class":331},[68,154244,147622],{"class":335},[68,154246,51608],{"class":5421},[68,154248,381],{"class":331},[68,154250,154251],{"class":78},"\"品类销售额\"",[68,154253,38248],{"class":335},[68,154255,154256,154258,154260,154262,154264,154266,154269],{"class":70,"line":1849},[68,154257,147636],{"class":5421},[68,154259,381],{"class":331},[68,154261,147641],{"class":335},[68,154263,80011],{"class":5421},[68,154265,381],{"class":331},[68,154267,154268],{"class":78},"\"品类\"",[68,154270,38248],{"class":335},[68,154272,154273,154275,154277,154279,154281,154283,154285],{"class":70,"line":1854},[68,154274,147655],{"class":5421},[68,154276,381],{"class":331},[68,154278,147641],{"class":335},[68,154280,80011],{"class":5421},[68,154282,381],{"class":331},[68,154284,147439],{"class":78},[68,154286,38248],{"class":335},[68,154288,154289],{"class":70,"line":1860},[68,154290,342],{"class":335},[68,154292,154293,154296,154299],{"class":70,"line":1881},[68,154294,154295],{"class":335},"bar.render(",[68,154297,154298],{"class":78},"\"category_sales.html\"",[68,154300,342],{"class":335},[14,154302,154304],{"id":154303},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154306,154307],{},"时间线适合展示不同日期、月份、年份的数据变化。",[58,154309,154311],{"className":30579,"code":154310,"language":30581,"meta":63,"style":63},"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",[65,154312,154313,154327,154338,154342,154350,154374,154397,154422,154426,154430,154440,154444,154455,154464,154474,154488,154519,154524,154528],{"__ignoreMap":63},[68,154314,154315,154317,154319,154321,154323,154325],{"class":70,"line":71},[68,154316,30938],{"class":331},[68,154318,147523],{"class":335},[68,154320,30593],{"class":331},[68,154322,147528],{"class":335},[68,154324,31584],{"class":331},[68,154326,147533],{"class":335},[68,154328,154329,154331,154333,154335],{"class":70,"line":92},[68,154330,30938],{"class":331},[68,154332,147382],{"class":335},[68,154334,30593],{"class":331},[68,154336,154337],{"class":335}," Bar, Timeline\n",[68,154339,154340],{"class":70,"line":1387},[68,154341,2606],{"emptyLinePlaceholder":260},[68,154343,154344,154346,154348],{"class":70,"line":1402},[68,154345,101858],{"class":335},[68,154347,381],{"class":331},[68,154349,15777],{"class":335},[68,154351,154352,154355,154358,154360,154362,154364,154366,154368,154370,154372],{"class":70,"line":1408},[68,154353,154354],{"class":78},"    \"2024-10-01\"",[68,154356,154357],{"class":335},": {",[68,154359,153787],{"class":78},[68,154361,51638],{"class":335},[68,154363,153796],{"class":82},[68,154365,12640],{"class":335},[68,154367,153817],{"class":78},[68,154369,51638],{"class":335},[68,154371,153826],{"class":82},[68,154373,5136],{"class":335},[68,154375,154376,154379,154381,154383,154385,154387,154389,154391,154393,154395],{"class":70,"line":1422},[68,154377,154378],{"class":78},"    \"2024-10-02\"",[68,154380,154357],{"class":335},[68,154382,153787],{"class":78},[68,154384,51638],{"class":335},[68,154386,153855],{"class":82},[68,154388,12640],{"class":335},[68,154390,153817],{"class":78},[68,154392,51638],{"class":335},[68,154394,153884],{"class":82},[68,154396,5136],{"class":335},[68,154398,154399,154402,154404,154406,154408,154411,154413,154415,154417,154420],{"class":70,"line":1428},[68,154400,154401],{"class":78},"    \"2024-10-03\"",[68,154403,154357],{"class":335},[68,154405,153787],{"class":78},[68,154407,51638],{"class":335},[68,154409,154410],{"class":82},"17000",[68,154412,12640],{"class":335},[68,154414,153817],{"class":78},[68,154416,51638],{"class":335},[68,154418,154419],{"class":82},"19000",[68,154421,5136],{"class":335},[68,154423,154424],{"class":70,"line":1519},[68,154425,1772],{"class":335},[68,154427,154428],{"class":70,"line":1525},[68,154429,2606],{"emptyLinePlaceholder":260},[68,154431,154432,154435,154437],{"class":70,"line":1537},[68,154433,154434],{"class":335},"timeline ",[68,154436,381],{"class":331},[68,154438,154439],{"class":335}," Timeline()\n",[68,154441,154442],{"class":70,"line":1819},[68,154443,2606],{"emptyLinePlaceholder":260},[68,154445,154446,154448,154451,154453],{"class":70,"line":1824},[68,154447,3231],{"class":331},[68,154449,154450],{"class":335}," date, category_data ",[68,154452,26247],{"class":331},[68,154454,149292],{"class":335},[68,154456,154457,154460,154462],{"class":70,"line":1830},[68,154458,154459],{"class":335},"    bar ",[68,154461,381],{"class":331},[68,154463,154206],{"class":335},[68,154465,154466,154469,154471],{"class":70,"line":1835},[68,154467,154468],{"class":335},"    bar.add_xaxis(",[68,154470,154214],{"class":82},[68,154472,154473],{"class":335},"(category_data.keys()))\n",[68,154475,154476,154479,154481,154483,154485],{"class":70,"line":1849},[68,154477,154478],{"class":335},"    bar.add_yaxis(",[68,154480,147439],{"class":78},[68,154482,12640],{"class":335},[68,154484,154214],{"class":82},[68,154486,154487],{"class":335},"(category_data.values()))\n",[68,154489,154490,154493,154496,154498,154500,154502,154504,154506,154508,154510,154512,154514,154517],{"class":70,"line":1854},[68,154491,154492],{"class":335},"    bar.set_global_opts(",[68,154494,154495],{"class":5421},"title_opts",[68,154497,381],{"class":331},[68,154499,147622],{"class":335},[68,154501,51608],{"class":5421},[68,154503,381],{"class":331},[68,154505,387],{"class":331},[68,154507,584],{"class":78},[68,154509,1229],{"class":82},[68,154511,74127],{"class":335},[68,154513,1279],{"class":82},[68,154515,154516],{"class":78},"销售额\"",[68,154518,30698],{"class":335},[68,154520,154521],{"class":70,"line":1860},[68,154522,154523],{"class":335},"    timeline.add(bar, date)\n",[68,154525,154526],{"class":70,"line":1881},[68,154527,2606],{"emptyLinePlaceholder":260},[68,154529,154530,154533,154536],{"class":70,"line":1886},[68,154531,154532],{"class":335},"timeline.render(",[68,154534,154535],{"class":78},"\"timeline_sales.html\"",[68,154537,342],{"class":335},[14,154539,154541],{"id":154540},"_128-绘制地图","12.8 绘制地图",[19,154543,154544],{},"地图适合展示地区数据。",[58,154546,154548],{"className":30579,"code":154547,"language":30581,"meta":63,"style":63},"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",[65,154549,154550,154564,154575,154579,154587,154600,154612,154625,154638,154642,154646,154656,154671,154676,154693,154712,154716],{"__ignoreMap":63},[68,154551,154552,154554,154556,154558,154560,154562],{"class":70,"line":71},[68,154553,30938],{"class":331},[68,154555,147523],{"class":335},[68,154557,30593],{"class":331},[68,154559,147528],{"class":335},[68,154561,31584],{"class":331},[68,154563,147533],{"class":335},[68,154565,154566,154568,154570,154572],{"class":70,"line":92},[68,154567,30938],{"class":331},[68,154569,147382],{"class":335},[68,154571,30593],{"class":331},[68,154573,154574],{"class":335}," Map\n",[68,154576,154577],{"class":70,"line":1387},[68,154578,2606],{"emptyLinePlaceholder":260},[68,154580,154581,154583,154585],{"class":70,"line":1402},[68,154582,101858],{"class":335},[68,154584,381],{"class":331},[68,154586,55648],{"class":335},[68,154588,154589,154592,154594,154596,154598],{"class":70,"line":1408},[68,154590,154591],{"class":335},"    (",[68,154593,69470],{"class":78},[68,154595,12640],{"class":335},[68,154597,1150],{"class":82},[68,154599,38248],{"class":335},[68,154601,154602,154604,154606,154608,154610],{"class":70,"line":1422},[68,154603,154591],{"class":335},[68,154605,69490],{"class":78},[68,154607,12640],{"class":335},[68,154609,147456],{"class":82},[68,154611,38248],{"class":335},[68,154613,154614,154616,154619,154621,154623],{"class":70,"line":1428},[68,154615,154591],{"class":335},[68,154617,154618],{"class":78},"\"广东\"",[68,154620,12640],{"class":335},[68,154622,1929],{"class":82},[68,154624,38248],{"class":335},[68,154626,154627,154629,154632,154634,154636],{"class":70,"line":1519},[68,154628,154591],{"class":335},[68,154630,154631],{"class":78},"\"浙江\"",[68,154633,12640],{"class":335},[68,154635,147461],{"class":82},[68,154637,38248],{"class":335},[68,154639,154640],{"class":70,"line":1525},[68,154641,33447],{"class":335},[68,154643,154644],{"class":70,"line":1537},[68,154645,2606],{"emptyLinePlaceholder":260},[68,154647,154648,154651,154653],{"class":70,"line":1819},[68,154649,154650],{"class":335},"map_chart ",[68,154652,381],{"class":331},[68,154654,154655],{"class":335}," Map()\n",[68,154657,154658,154661,154663,154666,154669],{"class":70,"line":1824},[68,154659,154660],{"class":335},"map_chart.add(",[68,154662,147439],{"class":78},[68,154664,154665],{"class":335},", data, ",[68,154667,154668],{"class":78},"\"china\"",[68,154670,342],{"class":335},[68,154672,154673],{"class":70,"line":1830},[68,154674,154675],{"class":335},"map_chart.set_global_opts(\n",[68,154677,154678,154680,154682,154684,154686,154688,154691],{"class":70,"line":1835},[68,154679,147617],{"class":5421},[68,154681,381],{"class":331},[68,154683,147622],{"class":335},[68,154685,51608],{"class":5421},[68,154687,381],{"class":331},[68,154689,154690],{"class":78},"\"地区销售额\"",[68,154692,38248],{"class":335},[68,154694,154695,154698,154700,154703,154706,154708,154710],{"class":70,"line":1849},[68,154696,154697],{"class":5421},"    visualmap_opts",[68,154699,381],{"class":331},[68,154701,154702],{"class":335},"opts.VisualMapOpts(",[68,154704,154705],{"class":5421},"max_",[68,154707,381],{"class":331},[68,154709,1929],{"class":82},[68,154711,38248],{"class":335},[68,154713,154714],{"class":70,"line":1854},[68,154715,342],{"class":335},[68,154717,154718,154721,154724],{"class":70,"line":1860},[68,154719,154720],{"class":335},"map_chart.render(",[68,154722,154723],{"class":78},"\"map_sales.html\"",[68,154725,342],{"class":335},[19,154727,154728],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154730,154732],{"id":154731},"_129-项目拆分建议","12.9 项目拆分建议",[19,154734,154735],{},"当代码超过一个文件时，可以这样组织：",[58,154737,154740],{"className":154738,"code":154739,"language":5393,"meta":63},[5391],"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",[65,154741,154739],{"__ignoreMap":63},[19,154743,154744],{},"职责：",[23,154746,154747,154753,154759,154765],{},[26,154748,154749,154752],{},[65,154750,154751],{},"main.py","：程序入口。",[26,154754,154755,154758],{},[65,154756,154757],{},"file_utils.py","：读写 JSON。",[26,154760,154761,154764],{},[65,154762,154763],{},"sales_service.py","：统计销售数据。",[26,154766,154767,154770],{},[65,154768,154769],{},"chart_builder.py","：生成图表。",[14,154772,154774],{"id":154773},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154776,154777],{},"语法基础：",[23,154779,154780,154783,154786,154789],{},[26,154781,154782],{},"会写变量、注释、输入输出。",[26,154784,154785],{},"会使用 int、float、str、bool。",[26,154787,154788],{},"会做类型转换。",[26,154790,154791],{},"会使用 f-string 格式化输出。",[19,154793,154794],{},"流程控制：",[23,154796,154797,154803,154809,154817],{},[26,154798,154799,154800,28588],{},"会写 ",[65,154801,154802],{},"if elif else",[26,154804,154799,154805,101218,154807,28588],{},[65,154806,108863],{},[65,154808,3231],{},[26,154810,154811,154812,101218,154814,28588],{},"理解 ",[65,154813,2259],{},[65,154815,154816],{},"continue",[26,154818,154819],{},"能写嵌套循环。",[19,154821,154822],{},"函数：",[23,154824,154825,154828,154831,154834],{},[26,154826,154827],{},"会定义和调用函数。",[26,154829,154830],{},"理解参数和返回值。",[26,154832,154833],{},"知道局部变量和全局变量。",[26,154835,154836],{},"会使用默认参数、关键字参数、不定长参数。",[19,154838,154839],{},"容器：",[23,154841,154842,154845,154848,154851,154854],{},[26,154843,154844],{},"会使用列表增删改查。",[26,154846,154847],{},"会遍历列表、字典。",[26,154849,154850],{},"会使用切片。",[26,154852,154853],{},"会用集合去重。",[26,154855,154856],{},"会处理列表嵌套字典。",[19,154858,154859],{},"文件和模块：",[23,154861,154862,154865,154868,154871,154874],{},[26,154863,154864],{},"会读写文本文件。",[26,154866,154867],{},"会读写 JSON。",[26,154869,154870],{},"会捕获常见异常。",[26,154872,154873],{},"会导入模块和第三方包。",[26,154875,154876],{},"会创建简单包结构。",[19,154878,154879],{},"项目能力：",[23,154881,154882,154885,154888,154891,154894],{},[26,154883,154884],{},"能把代码拆成函数。",[26,154886,154887],{},"能把数据保存到文件。",[26,154889,154890],{},"能处理用户输入错误。",[26,154892,154893],{},"能写一个完整菜单程序。",[26,154895,154896],{},"能用 pyecharts 生成图表。",[14,154898,154900],{"id":154899},"_1211-推荐练习顺序","12.11 推荐练习顺序",[23,154902,154903,154906,154909,154912,154915,154918,154921,154924],{},[26,154904,154905],{},"猜数字游戏。",[26,154907,154908],{},"ATM 菜单程序。",[26,154910,154911],{},"学生成绩统计。",[26,154913,154914],{},"学生管理系统函数版。",[26,154916,154917],{},"学生管理系统文件持久化版。",[26,154919,154920],{},"学生管理系统面向对象版。",[26,154922,154923],{},"销售数据统计。",[26,154925,154926],{},"销售数据可视化。",[14,154928,154930],{"id":154929},"_1212-常见学习误区","12.12 常见学习误区",[23,154932,154933,154936,154939,154942,154945,154948,154951],{},[26,154934,154935],{},"只看视频不敲代码。",[26,154937,154938],{},"一报错就复制错误去搜，不先读报错位置。",[26,154940,154941],{},"变量名随便写，后续自己看不懂。",[26,154943,154944],{},"所有代码都写在一个文件一个函数里。",[26,154946,154947],{},"不保存练习代码，复习时没有材料。",[26,154949,154950],{},"还没掌握列表字典就急着学框架。",[26,154952,154953],{},"不会读官方文档，只依赖教程。",[14,154955,154957],{"id":154956},"_1213-如何读报错","12.13 如何读报错",[19,154959,154960],{},"报错通常从下往上看最后几行。",[19,154962,15340],{},[58,154964,154967],{"className":154965,"code":154966,"language":5393,"meta":63},[5391],"ValueError: invalid literal for int() with base 10: 'abc'\n",[65,154968,154966],{"__ignoreMap":63},[19,154970,24803],{},[23,154972,154973,154979,154989],{},[26,154974,154975,154976,28588],{},"异常类型是 ",[65,154977,154978],{},"ValueError",[26,154980,107545,154981,154984,154985,154988],{},[65,154982,154983],{},"int()"," 无法把 ",[65,154986,154987],{},"'abc'"," 转成整数。",[26,154990,154991],{},"应该检查输入内容或增加异常处理。",[19,154993,154994],{},"再看文件名和行号：",[58,154996,154999],{"className":154997,"code":154998,"language":5393,"meta":63},[5391],"File \"main.py\", line 10, in \u003Cmodule>\n",[65,155000,154998],{"__ignoreMap":63},[19,155002,155003,155004,155006],{},"表示错误发生在 ",[65,155005,154751],{}," 第 10 行。",[14,155008,155010],{"id":155009},"_1214-后续学习方向","12.14 后续学习方向",[19,155012,155013],{},"Python 基础完成后，可以按兴趣选择方向：",[23,155015,155016,155028,155037,155049,155060,155069,155079],{},[26,155017,155018,155019,546,155022,546,155025,28588],{},"自动化办公：",[65,155020,155021],{},"openpyxl",[65,155023,155024],{},"python-docx",[65,155026,155027],{},"pdfplumber",[26,155029,155030,155031,546,155033,546,155035,28588],{},"数据分析：",[65,155032,100827],{},[65,155034,146329],{},[65,155036,146337],{},[26,155038,155039,155040,546,155043,546,155046,28588],{},"Web 后端：",[65,155041,155042],{},"Flask",[65,155044,155045],{},"FastAPI",[65,155047,155048],{},"Django",[26,155050,155051,155052,546,155054,546,155057,28588],{},"爬虫：",[65,155053,146314],{},[65,155055,155056],{},"BeautifulSoup",[65,155058,155059],{},"Scrapy",[26,155061,155062,155063,546,155065,155068],{},"测试开发：",[65,155064,146361],{},[65,155066,155067],{},"selenium","、接口测试。",[26,155070,155071,155072,546,155074,546,155076,28588],{},"人工智能：",[65,155073,100827],{},[65,155075,146329],{},[65,155077,155078],{},"pytorch",[26,155080,155081,155082,546,155084,546,155087,28588],{},"运维脚本：",[65,155083,145930],{},[65,155085,155086],{},"subprocess",[65,155088,155089],{},"paramiko",[19,155091,155092],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155094,155096],{"id":155095},"_1215-结课练习","12.15 结课练习",[23,155098,155099,155102,155105,155108,155111,155114,155117,155120],{},[26,155100,155101],{},"完成函数版学生管理系统。",[26,155103,155104],{},"给学生管理系统增加 JSON 持久化。",[26,155106,155107],{},"给学生管理系统增加异常处理。",[26,155109,155110],{},"把学生管理系统改成面向对象版。",[26,155112,155113],{},"使用 pyecharts 绘制学生成绩柱状图。",[26,155115,155116],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[26,155118,155119],{},"按品类统计销售额并绘制柱状图。",[26,155121,155122],{},"写一份自己的 Python 学习路线图。",[250,155124,155125],{},"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":63,"searchDepth":92,"depth":92,"links":155127},[155128,155129,155132,155133,155134,155140,155141,155142,155143,155144,155145,155146,155147,155148,155149],{"id":151844,"depth":92,"text":151845},{"id":151894,"depth":92,"text":151895,"children":155130},[155131],{"id":151898,"depth":1387,"text":151899},{"id":151937,"depth":92,"text":151938},{"id":153411,"depth":92,"text":153412},{"id":153749,"depth":92,"text":153750,"children":155135},[155136,155137,155138,155139],{"id":153753,"depth":1387,"text":153754},{"id":153893,"depth":1387,"text":153894},{"id":153983,"depth":1387,"text":153984},{"id":154069,"depth":1387,"text":154070},{"id":154110,"depth":92,"text":154111},{"id":154303,"depth":92,"text":154304},{"id":154540,"depth":92,"text":154541},{"id":154731,"depth":92,"text":154732},{"id":154773,"depth":92,"text":154774},{"id":154899,"depth":92,"text":154900},{"id":154929,"depth":92,"text":154930},{"id":154956,"depth":92,"text":154957},{"id":155009,"depth":92,"text":155010},{"id":155095,"depth":92,"text":155096},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151836,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155156,"title":155157,"body":155158,"description":257,"extension":258,"meta":157627,"navigation":260,"path":157628,"seo":157629,"stem":157630,"__hash__":157631},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155159,"toc":157602},[155160,155163,155167,155170,155173,155193,155196,155219,155222,155225,155247,155250,155272,155276,155279,155319,155322,155443,155447,155450,155490,155493,155517,155520,155524,155527,155541,155574,155577,155612,155615,155638,155641,155674,155677,155679,155685,155760,155763,155769,155786,155826,155830,155833,155879,155881,155919,155922,155957,155960,155995,155998,156030,156033,156052,156056,156060,156173,156175,156250,156254,156300,156303,156329,156338,156342,156345,156408,156416,156444,156448,156488,156553,156557,156560,156599,156602,156647,156650,156711,156715,156742,156745,156773,156776,156780,156784,156849,156852,156890,156893,156925,156929,157028,157032,157035,157108,157111,157159,157163,157169,157209,157212,157259,157262,157311,157315,157317,157331,157333,157514,157518,157545,157565,157572,157576,157593,157599],[10,155161,155157],{"id":155162},"_2-基础语法变量与字符串",[14,155164,155166],{"id":155165},"_21-注释","2.1 注释",[19,155168,155169],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155171,155172],{},"单行注释：",[58,155174,155176],{"className":30579,"code":155175,"language":30581,"meta":63,"style":63},"# 这是单行注释\nprint(\"hello\")\n",[65,155177,155178,155183],{"__ignoreMap":63},[68,155179,155180],{"class":70,"line":71},[68,155181,155182],{"class":393},"# 这是单行注释\n",[68,155184,155185,155187,155189,155191],{"class":70,"line":92},[68,155186,30616],{"class":82},[68,155188,336],{"class":335},[68,155190,6049],{"class":78},[68,155192,342],{"class":335},[19,155194,155195],{},"多行说明常用三引号：",[58,155197,155199],{"className":30579,"code":155198,"language":30581,"meta":63,"style":63},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[65,155200,155201,155205,155210,155215],{"__ignoreMap":63},[68,155202,155203],{"class":70,"line":71},[68,155204,95899],{"class":78},[68,155206,155207],{"class":70,"line":92},[68,155208,155209],{"class":78},"这是多行说明。\n",[68,155211,155212],{"class":70,"line":1387},[68,155213,155214],{"class":78},"常用于文件顶部说明、函数说明等。\n",[68,155216,155217],{"class":70,"line":1402},[68,155218,95899],{"class":78},[19,155220,155221],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155223,155224],{},"不好：",[58,155226,155228],{"className":30579,"code":155227,"language":30581,"meta":63,"style":63},"# age 加 1\nage = age + 1\n",[65,155229,155230,155235],{"__ignoreMap":63},[68,155231,155232],{"class":70,"line":71},[68,155233,155234],{"class":393},"# age 加 1\n",[68,155236,155237,155239,155241,155243,155245],{"class":70,"line":92},[68,155238,146690],{"class":335},[68,155240,381],{"class":331},[68,155242,15912],{"class":335},[68,155244,814],{"class":331},[68,155246,55900],{"class":82},[19,155248,155249],{},"较好：",[58,155251,155253],{"className":30579,"code":155252,"language":30581,"meta":63,"style":63},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[65,155254,155255,155260],{"__ignoreMap":63},[68,155256,155257],{"class":70,"line":71},[68,155258,155259],{"class":393},"# 用户过完生日后，年龄增加一岁\n",[68,155261,155262,155264,155266,155268,155270],{"class":70,"line":92},[68,155263,146690],{"class":335},[68,155265,381],{"class":331},[68,155267,15912],{"class":335},[68,155269,814],{"class":331},[68,155271,55900],{"class":82},[14,155273,155275],{"id":155274},"_22-字面量","2.2 字面量",[19,155277,155278],{},"字面量就是代码中直接写出来的数据。",[58,155280,155282],{"className":30579,"code":155281,"language":30581,"meta":63,"style":63},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[65,155283,155284,155291,155298,155305,155312],{"__ignoreMap":63},[68,155285,155286,155288],{"class":70,"line":71},[68,155287,644],{"class":82},[68,155289,155290],{"class":393},"          # 整数\n",[68,155292,155293,155295],{"class":70,"line":92},[68,155294,384],{"class":82},[68,155296,155297],{"class":393},"         # 小数\n",[68,155299,155300,155302],{"class":70,"line":1387},[68,155301,6049],{"class":78},[68,155303,155304],{"class":393},"      # 字符串\n",[68,155306,155307,155309],{"class":70,"line":1402},[68,155308,31677],{"class":82},[68,155310,155311],{"class":393},"         # 布尔值\n",[68,155313,155314,155316],{"class":70,"line":1408},[68,155315,95887],{"class":82},[68,155317,155318],{"class":393},"         # 空值\n",[19,155320,155321],{},"常见字面量类型：",[471,155323,155324,155334],{},[474,155325,155326],{},[477,155327,155328,155330,155332],{},[480,155329,23942],{},[480,155331,27696],{},[480,155333,26073],{},[518,155335,155336,155347,155358,155369,155381,155393,155405,155418,155430],{},[477,155337,155338,155340,155344],{},[523,155339,339],{},[523,155341,155342],{},[65,155343,644],{},[523,155345,155346],{},"整数",[477,155348,155349,155351,155355],{},[523,155350,375],{},[523,155352,155353],{},[65,155354,384],{},[523,155356,155357],{},"浮点数",[477,155359,155360,155362,155366],{},[523,155361,1507],{},[523,155363,155364],{},[65,155365,6049],{},[523,155367,155368],{},"字符串",[477,155370,155371,155373,155379],{},[523,155372,1562],{},[523,155374,155375,546,155377],{},[65,155376,31677],{},[65,155378,34188],{},[523,155380,66216],{},[477,155382,155383,155386,155390],{},[523,155384,155385],{},"NoneType",[523,155387,155388],{},[65,155389,95887],{},[523,155391,155392],{},"空值",[477,155394,155395,155397,155402],{},[523,155396,154214],{},[523,155398,155399],{},[65,155400,155401],{},"[1, 2, 3]",[523,155403,155404],{},"列表",[477,155406,155407,155410,155415],{},[523,155408,155409],{},"tuple",[523,155411,155412],{},[65,155413,155414],{},"(1, 2, 3)",[523,155416,155417],{},"元组",[477,155419,155420,155422,155427],{},[523,155421,114746],{},[523,155423,155424],{},[65,155425,155426],{},"{\"name\": \"张三\"}",[523,155428,155429],{},"字典",[477,155431,155432,155435,155440],{},[523,155433,155434],{},"set",[523,155436,155437],{},[65,155438,155439],{},"{1, 2, 3}",[523,155441,155442],{},"集合",[14,155444,155446],{"id":155445},"_23-变量","2.3 变量",[19,155448,155449],{},"变量是保存数据的名字。",[58,155451,155453],{"className":30579,"code":155452,"language":30581,"meta":63,"style":63},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[65,155454,155455,155463,155471,155481],{"__ignoreMap":63},[68,155456,155457,155459,155461],{"class":70,"line":71},[68,155458,146680],{"class":335},[68,155460,381],{"class":331},[68,155462,149497],{"class":78},[68,155464,155465,155467,155469],{"class":70,"line":92},[68,155466,146690],{"class":335},[68,155468,381],{"class":331},[68,155470,146695],{"class":82},[68,155472,155473,155476,155478],{"class":70,"line":1387},[68,155474,155475],{"class":335},"height ",[68,155477,381],{"class":331},[68,155479,155480],{"class":82}," 1.75\n",[68,155482,155483,155486,155488],{"class":70,"line":1402},[68,155484,155485],{"class":335},"is_student ",[68,155487,381],{"class":331},[68,155489,153743],{"class":82},[19,155491,155492],{},"Python 的变量不需要提前声明类型：",[58,155494,155496],{"className":30579,"code":155495,"language":30581,"meta":63,"style":63},"score = 100\nscore = \"满分\"\n",[65,155497,155498,155508],{"__ignoreMap":63},[68,155499,155500,155503,155505],{"class":70,"line":71},[68,155501,155502],{"class":335},"score ",[68,155504,381],{"class":331},[68,155506,155507],{"class":82}," 100\n",[68,155509,155510,155512,155514],{"class":70,"line":92},[68,155511,155502],{"class":335},[68,155513,381],{"class":331},[68,155515,155516],{"class":78}," \"满分\"\n",[19,155518,155519],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155521,155523],{"id":155522},"_24-变量命名规则","2.4 变量命名规则",[19,155525,155526],{},"硬性规则：",[23,155528,155529,155532,155535,155538],{},[26,155530,155531],{},"只能由字母、数字、下划线组成。",[26,155533,155534],{},"不能以数字开头。",[26,155536,155537],{},"不能使用 Python 关键字。",[26,155539,155540],{},"区分大小写。",[58,155542,155544],{"className":30579,"code":155543,"language":30581,"meta":63,"style":63},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[65,155545,155546,155555,155564],{"__ignoreMap":63},[68,155547,155548,155551,155553],{"class":70,"line":71},[68,155549,155550],{"class":335},"user_name ",[68,155552,381],{"class":331},[68,155554,146685],{"class":78},[68,155556,155557,155560,155562],{"class":70,"line":92},[68,155558,155559],{"class":335},"age2 ",[68,155561,381],{"class":331},[68,155563,146695],{"class":82},[68,155565,155566,155569,155571],{"class":70,"line":1387},[68,155567,155568],{"class":335},"_token ",[68,155570,381],{"class":331},[68,155572,155573],{"class":78}," \"abc\"\n",[19,155575,155576],{},"错误写法：",[58,155578,155580],{"className":30579,"code":155579,"language":30581,"meta":63,"style":63},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[65,155581,155582,155591,155603],{"__ignoreMap":63},[68,155583,155584,155587,155589],{"class":70,"line":71},[68,155585,155586],{"class":77604},"2age",[68,155588,13769],{"class":331},[68,155590,146695],{"class":82},[68,155592,155593,155595,155597,155599,155601],{"class":70,"line":92},[68,155594,131780],{"class":335},[68,155596,865],{"class":331},[68,155598,146680],{"class":335},[68,155600,381],{"class":331},[68,155602,146685],{"class":78},[68,155604,155605,155607,155609],{"class":70,"line":1387},[68,155606,14899],{"class":331},[68,155608,13769],{"class":331},[68,155610,155611],{"class":78}," \"一班\"\n",[19,155613,155614],{},"查看关键字：",[58,155616,155618],{"className":30579,"code":155617,"language":30581,"meta":63,"style":63},"import keyword\n\nprint(keyword.kwlist)\n",[65,155619,155620,155627,155631],{"__ignoreMap":63},[68,155621,155622,155624],{"class":70,"line":71},[68,155623,30593],{"class":331},[68,155625,155626],{"class":335}," keyword\n",[68,155628,155629],{"class":70,"line":92},[68,155630,2606],{"emptyLinePlaceholder":260},[68,155632,155633,155635],{"class":70,"line":1387},[68,155634,30616],{"class":82},[68,155636,155637],{"class":335},"(keyword.kwlist)\n",[19,155639,155640],{},"推荐命名风格：",[58,155642,155644],{"className":30579,"code":155643,"language":30581,"meta":63,"style":63},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[65,155645,155646,155655,155665],{"__ignoreMap":63},[68,155647,155648,155651,155653],{"class":70,"line":71},[68,155649,155650],{"class":335},"student_name ",[68,155652,381],{"class":331},[68,155654,149497],{"class":78},[68,155656,155657,155660,155662],{"class":70,"line":92},[68,155658,155659],{"class":335},"total_price ",[68,155661,381],{"class":331},[68,155663,155664],{"class":82}," 99.8\n",[68,155666,155667,155670,155672],{"class":70,"line":1387},[68,155668,155669],{"class":335},"is_finished ",[68,155671,381],{"class":331},[68,155673,126004],{"class":82},[19,155675,155676],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155678,50933],{"id":50932},[19,155680,104566,155681,155684],{},[65,155682,155683],{},"type()"," 查看数据类型：",[58,155686,155688],{"className":30579,"code":155687,"language":30581,"meta":63,"style":63},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[65,155689,155690,155704,155718,155732,155746],{"__ignoreMap":63},[68,155691,155692,155694,155696,155698,155700,155702],{"class":70,"line":71},[68,155693,30616],{"class":82},[68,155695,336],{"class":335},[68,155697,103307],{"class":82},[68,155699,336],{"class":335},[68,155701,644],{"class":82},[68,155703,30698],{"class":335},[68,155705,155706,155708,155710,155712,155714,155716],{"class":70,"line":92},[68,155707,30616],{"class":82},[68,155709,336],{"class":335},[68,155711,103307],{"class":82},[68,155713,336],{"class":335},[68,155715,384],{"class":82},[68,155717,30698],{"class":335},[68,155719,155720,155722,155724,155726,155728,155730],{"class":70,"line":1387},[68,155721,30616],{"class":82},[68,155723,336],{"class":335},[68,155725,103307],{"class":82},[68,155727,336],{"class":335},[68,155729,6049],{"class":78},[68,155731,30698],{"class":335},[68,155733,155734,155736,155738,155740,155742,155744],{"class":70,"line":1402},[68,155735,30616],{"class":82},[68,155737,336],{"class":335},[68,155739,103307],{"class":82},[68,155741,336],{"class":335},[68,155743,31677],{"class":82},[68,155745,30698],{"class":335},[68,155747,155748,155750,155752,155754,155756,155758],{"class":70,"line":1408},[68,155749,30616],{"class":82},[68,155751,336],{"class":335},[68,155753,103307],{"class":82},[68,155755,336],{"class":335},[68,155757,95887],{"class":82},[68,155759,30698],{"class":335},[19,155761,155762],{},"输出类似：",[58,155764,155767],{"className":155765,"code":155766,"language":5393,"meta":63},[5391],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[65,155768,155766],{"__ignoreMap":63},[19,155770,9230,155771,107483,155773,155775,155776,155778,155779,21705,155781,155778,155783,155785],{},[65,155772,1562],{},[65,155774,339],{}," 的子类，",[65,155777,31677],{}," 可以当作 ",[65,155780,551],{},[65,155782,34188],{},[65,155784,525],{},"，但业务代码中不要滥用。",[58,155787,155789],{"className":30579,"code":155788,"language":30581,"meta":63,"style":63},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[65,155790,155791,155809],{"__ignoreMap":63},[68,155792,155793,155795,155797,155799,155801,155803,155806],{"class":70,"line":71},[68,155794,30616],{"class":82},[68,155796,336],{"class":335},[68,155798,31677],{"class":82},[68,155800,45767],{"class":331},[68,155802,25322],{"class":82},[68,155804,155805],{"class":335},")   ",[68,155807,155808],{"class":393},"# 2\n",[68,155810,155811,155813,155815,155817,155819,155821,155823],{"class":70,"line":92},[68,155812,30616],{"class":82},[68,155814,336],{"class":335},[68,155816,34188],{"class":82},[68,155818,45767],{"class":331},[68,155820,25322],{"class":82},[68,155822,46009],{"class":335},[68,155824,155825],{"class":393},"# 1\n",[14,155827,155829],{"id":155828},"_26-类型转换","2.6 类型转换",[19,155831,155832],{},"常用转换函数：",[58,155834,155836],{"className":30579,"code":155835,"language":30581,"meta":63,"style":63},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[65,155837,155838,155848,155859,155869],{"__ignoreMap":63},[68,155839,155840,155842,155844,155846],{"class":70,"line":71},[68,155841,339],{"class":82},[68,155843,336],{"class":335},[68,155845,54517],{"class":78},[68,155847,342],{"class":335},[68,155849,155850,155852,155854,155857],{"class":70,"line":92},[68,155851,375],{"class":82},[68,155853,336],{"class":335},[68,155855,155856],{"class":78},"\"3.14\"",[68,155858,342],{"class":335},[68,155860,155861,155863,155865,155867],{"class":70,"line":1387},[68,155862,1507],{"class":82},[68,155864,336],{"class":335},[68,155866,644],{"class":82},[68,155868,342],{"class":335},[68,155870,155871,155873,155875,155877],{"class":70,"line":1402},[68,155872,1562],{"class":82},[68,155874,336],{"class":335},[68,155876,551],{"class":82},[68,155878,342],{"class":335},[19,155880,15340],{},[58,155882,155884],{"className":30579,"code":155883,"language":30581,"meta":63,"style":63},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[65,155885,155886,155895,155906],{"__ignoreMap":63},[68,155887,155888,155890,155892],{"class":70,"line":71},[68,155889,146690],{"class":335},[68,155891,381],{"class":331},[68,155893,155894],{"class":78}," \"18\"\n",[68,155896,155897,155899,155901,155903],{"class":70,"line":92},[68,155898,146690],{"class":335},[68,155900,381],{"class":331},[68,155902,2588],{"class":82},[68,155904,155905],{"class":335},"(age)\n",[68,155907,155908,155910,155913,155915,155917],{"class":70,"line":1387},[68,155909,30616],{"class":82},[68,155911,155912],{"class":335},"(age ",[68,155914,814],{"class":331},[68,155916,25322],{"class":82},[68,155918,342],{"class":335},[19,155920,155921],{},"输入得到的内容永远是字符串：",[58,155923,155925],{"className":30579,"code":155924,"language":30581,"meta":63,"style":63},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[65,155926,155927,155943],{"__ignoreMap":63},[68,155928,155929,155932,155934,155936,155938,155941],{"class":70,"line":71},[68,155930,155931],{"class":335},"num ",[68,155933,381],{"class":331},[68,155935,60806],{"class":82},[68,155937,336],{"class":335},[68,155939,155940],{"class":78},"\"请输入数字:\"",[68,155942,342],{"class":335},[68,155944,155945,155947,155949,155951,155954],{"class":70,"line":92},[68,155946,30616],{"class":82},[68,155948,336],{"class":335},[68,155950,103307],{"class":82},[68,155952,155953],{"class":335},"(num))  ",[68,155955,155956],{"class":393},"# str\n",[19,155958,155959],{},"如果要做数学运算，必须转换：",[58,155961,155963],{"className":30579,"code":155962,"language":30581,"meta":63,"style":63},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[65,155964,155965,155983],{"__ignoreMap":63},[68,155966,155967,155969,155971,155973,155975,155977,155979,155981],{"class":70,"line":71},[68,155968,155931],{"class":335},[68,155970,381],{"class":331},[68,155972,2588],{"class":82},[68,155974,336],{"class":335},[68,155976,54022],{"class":82},[68,155978,336],{"class":335},[68,155980,155940],{"class":78},[68,155982,30698],{"class":335},[68,155984,155985,155987,155989,155991,155993],{"class":70,"line":92},[68,155986,30616],{"class":82},[68,155988,45820],{"class":335},[68,155990,814],{"class":331},[68,155992,2244],{"class":82},[68,155994,342],{"class":335},[19,155996,155997],{},"常见错误：",[58,155999,156001],{"className":30579,"code":156000,"language":30581,"meta":63,"style":63},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[65,156002,156003,156016],{"__ignoreMap":63},[68,156004,156005,156007,156009,156011,156013],{"class":70,"line":71},[68,156006,339],{"class":82},[68,156008,336],{"class":335},[68,156010,155856],{"class":78},[68,156012,155805],{"class":335},[68,156014,156015],{"class":393},"# 错误\n",[68,156017,156018,156020,156022,156025,156028],{"class":70,"line":92},[68,156019,339],{"class":82},[68,156021,336],{"class":335},[68,156023,156024],{"class":78},"\"abc\"",[68,156026,156027],{"class":335},")    ",[68,156029,156015],{"class":393},[19,156031,156032],{},"正确写法：",[58,156034,156036],{"className":30579,"code":156035,"language":30581,"meta":63,"style":63},"num = float(\"3.14\")\n",[65,156037,156038],{"__ignoreMap":63},[68,156039,156040,156042,156044,156046,156048,156050],{"class":70,"line":71},[68,156041,155931],{"class":335},[68,156043,381],{"class":331},[68,156045,109997],{"class":82},[68,156047,336],{"class":335},[68,156049,155856],{"class":78},[68,156051,342],{"class":335},[14,156053,156055],{"id":156054},"_27-运算符","2.7 运算符",[301,156057,156059],{"id":156058},"_271-算术运算符","2.7.1 算术运算符",[471,156061,156062,156073],{},[474,156063,156064],{},[477,156065,156066,156069,156071],{},[480,156067,156068],{},"运算符",[480,156070,26073],{},[480,156072,27696],{},[518,156074,156075,156089,156103,156117,156131,156145,156159],{},[477,156076,156077,156081,156084],{},[523,156078,156079],{},[65,156080,814],{},[523,156082,156083],{},"加法",[523,156085,156086],{},[65,156087,156088],{},"1 + 2",[477,156090,156091,156095,156098],{},[523,156092,156093],{},[65,156094,865],{},[523,156096,156097],{},"减法",[523,156099,156100],{},[65,156101,156102],{},"5 - 3",[477,156104,156105,156109,156112],{},[523,156106,156107],{},[65,156108,788],{},[523,156110,156111],{},"乘法",[523,156113,156114],{},[65,156115,156116],{},"2 * 3",[477,156118,156119,156123,156126],{},[523,156120,156121],{},[65,156122,917],{},[523,156124,156125],{},"除法，结果是浮点数",[523,156127,156128],{},[65,156129,156130],{},"5 \u002F 2",[477,156132,156133,156137,156140],{},[523,156134,156135],{},[65,156136,33530],{},[523,156138,156139],{},"整除",[523,156141,156142],{},[65,156143,156144],{},"5 \u002F\u002F 2",[477,156146,156147,156151,156154],{},[523,156148,156149],{},[65,156150,661],{},[523,156152,156153],{},"取余",[523,156155,156156],{},[65,156157,156158],{},"5 % 2",[477,156160,156161,156165,156168],{},[523,156162,156163],{},[65,156164,10866],{},[523,156166,156167],{},"幂运算",[523,156169,156170],{},[65,156171,156172],{},"2 ** 3",[19,156174,15340],{},[58,156176,156178],{"className":30579,"code":156177,"language":30581,"meta":63,"style":63},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[65,156179,156180,156198,156215,156232],{"__ignoreMap":63},[68,156181,156182,156184,156186,156188,156191,156193,156195],{"class":70,"line":71},[68,156183,30616],{"class":82},[68,156185,336],{"class":335},[68,156187,652],{"class":82},[68,156189,156190],{"class":331}," \u002F",[68,156192,14960],{"class":82},[68,156194,155805],{"class":335},[68,156196,156197],{"class":393},"# 2.5\n",[68,156199,156200,156202,156204,156206,156209,156211,156213],{"class":70,"line":92},[68,156201,30616],{"class":82},[68,156203,336],{"class":335},[68,156205,652],{"class":82},[68,156207,156208],{"class":331}," \u002F\u002F",[68,156210,14960],{"class":82},[68,156212,46009],{"class":335},[68,156214,155808],{"class":393},[68,156216,156217,156219,156221,156223,156226,156228,156230],{"class":70,"line":1387},[68,156218,30616],{"class":82},[68,156220,336],{"class":335},[68,156222,652],{"class":82},[68,156224,156225],{"class":331}," %",[68,156227,14960],{"class":82},[68,156229,155805],{"class":335},[68,156231,155825],{"class":393},[68,156233,156234,156236,156238,156240,156243,156245,156247],{"class":70,"line":1402},[68,156235,30616],{"class":82},[68,156237,336],{"class":335},[68,156239,412],{"class":82},[68,156241,156242],{"class":331}," **",[68,156244,78271],{"class":82},[68,156246,46009],{"class":335},[68,156248,156249],{"class":393},"# 8\n",[301,156251,156253],{"id":156252},"_272-赋值运算符","2.7.2 赋值运算符",[58,156255,156257],{"className":30579,"code":156256,"language":30581,"meta":63,"style":63},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[65,156258,156259,156267,156275,156283,156291],{"__ignoreMap":63},[68,156260,156261,156263,156265],{"class":70,"line":71},[68,156262,155931],{"class":335},[68,156264,381],{"class":331},[68,156266,58629],{"class":82},[68,156268,156269,156271,156273],{"class":70,"line":92},[68,156270,155931],{"class":335},[68,156272,9682],{"class":331},[68,156274,54628],{"class":82},[68,156276,156277,156279,156281],{"class":70,"line":1387},[68,156278,155931],{"class":335},[68,156280,150396],{"class":331},[68,156282,47924],{"class":82},[68,156284,156285,156287,156289],{"class":70,"line":1402},[68,156286,155931],{"class":335},[68,156288,137344],{"class":331},[68,156290,120233],{"class":82},[68,156292,156293,156295,156298],{"class":70,"line":1408},[68,156294,155931],{"class":335},[68,156296,156297],{"class":331},"\u002F=",[68,156299,47924],{"class":82},[19,156301,156302],{},"等价关系：",[58,156304,156306],{"className":30579,"code":156305,"language":30581,"meta":63,"style":63},"num += 1\nnum = num + 1\n",[65,156307,156308,156316],{"__ignoreMap":63},[68,156309,156310,156312,156314],{"class":70,"line":71},[68,156311,155931],{"class":335},[68,156313,9682],{"class":331},[68,156315,55900],{"class":82},[68,156317,156318,156320,156322,156325,156327],{"class":70,"line":92},[68,156319,155931],{"class":335},[68,156321,381],{"class":331},[68,156323,156324],{"class":335}," num ",[68,156326,814],{"class":331},[68,156328,55900],{"class":82},[19,156330,156331,156332,101218,156335,28588],{},"Python 没有 ",[65,156333,156334],{},"num++",[65,156336,156337],{},"num--",[301,156339,156341],{"id":156340},"_273-比较运算符","2.7.3 比较运算符",[19,156343,156344],{},"比较运算结果是布尔值。",[58,156346,156348],{"className":30579,"code":156347,"language":30581,"meta":63,"style":63},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[65,156349,156350,156364,156379,156393],{"__ignoreMap":63},[68,156351,156352,156354,156356,156358,156360,156362],{"class":70,"line":71},[68,156353,30616],{"class":82},[68,156355,336],{"class":335},[68,156357,779],{"class":82},[68,156359,26426],{"class":331},[68,156361,2354],{"class":82},[68,156363,342],{"class":335},[68,156365,156366,156368,156370,156372,156375,156377],{"class":70,"line":92},[68,156367,30616],{"class":82},[68,156369,336],{"class":335},[68,156371,779],{"class":82},[68,156373,156374],{"class":331}," >=",[68,156376,2244],{"class":82},[68,156378,342],{"class":335},[68,156380,156381,156383,156385,156387,156389,156391],{"class":70,"line":1387},[68,156382,30616],{"class":82},[68,156384,336],{"class":335},[68,156386,779],{"class":82},[68,156388,101759],{"class":331},[68,156390,2289],{"class":82},[68,156392,342],{"class":335},[68,156394,156395,156397,156399,156401,156404,156406],{"class":70,"line":1402},[68,156396,30616],{"class":82},[68,156398,336],{"class":335},[68,156400,779],{"class":82},[68,156402,156403],{"class":331}," !=",[68,156405,2289],{"class":82},[68,156407,342],{"class":335},[19,156409,156410,156411,156413,156414,28588],{},"注意：判断相等用 ",[65,156412,3155],{},"，赋值用 ",[65,156415,381],{},[58,156417,156419],{"className":30579,"code":156418,"language":30581,"meta":63,"style":63},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[65,156420,156421,156433],{"__ignoreMap":63},[68,156422,156423,156425,156427,156430],{"class":70,"line":71},[68,156424,146690],{"class":335},[68,156426,381],{"class":331},[68,156428,156429],{"class":82}," 18",[68,156431,156432],{"class":393},"       # 赋值\n",[68,156434,156435,156437,156439,156441],{"class":70,"line":92},[68,156436,146690],{"class":335},[68,156438,3155],{"class":331},[68,156440,156429],{"class":82},[68,156442,156443],{"class":393},"      # 判断是否相等\n",[301,156445,156447],{"id":156446},"_274-逻辑运算符","2.7.4 逻辑运算符",[471,156449,156450,156458],{},[474,156451,156452],{},[477,156453,156454,156456],{},[480,156455,156068],{},[480,156457,26073],{},[518,156459,156460,156469,156478],{},[477,156461,156462,156466],{},[523,156463,156464],{},[65,156465,30663],{},[523,156467,156468],{},"并且",[477,156470,156471,156475],{},[523,156472,156473],{},[65,156474,115290],{},[523,156476,156477],{},"或者",[477,156479,156480,156485],{},[523,156481,156482],{},[65,156483,156484],{},"not",[523,156486,156487],{},"取反",[58,156489,156491],{"className":30579,"code":156490,"language":30581,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[65,156492,156493,156501,156510,156514,156529,156543],{"__ignoreMap":63},[68,156494,156495,156497,156499],{"class":70,"line":71},[68,156496,146690],{"class":335},[68,156498,381],{"class":331},[68,156500,88266],{"class":82},[68,156502,156503,156506,156508],{"class":70,"line":92},[68,156504,156505],{"class":335},"has_ticket ",[68,156507,381],{"class":331},[68,156509,153743],{"class":82},[68,156511,156512],{"class":70,"line":1387},[68,156513,2606],{"emptyLinePlaceholder":260},[68,156515,156516,156518,156520,156522,156524,156526],{"class":70,"line":1402},[68,156517,30616],{"class":82},[68,156519,155912],{"class":335},[68,156521,1917],{"class":331},[68,156523,156429],{"class":82},[68,156525,120626],{"class":331},[68,156527,156528],{"class":335}," has_ticket)\n",[68,156530,156531,156533,156535,156537,156539,156541],{"class":70,"line":1408},[68,156532,30616],{"class":82},[68,156534,155912],{"class":335},[68,156536,1243],{"class":331},[68,156538,156429],{"class":82},[68,156540,114401],{"class":331},[68,156542,156528],{"class":335},[68,156544,156545,156547,156549,156551],{"class":70,"line":1422},[68,156546,30616],{"class":82},[68,156548,336],{"class":335},[68,156550,156484],{"class":331},[68,156552,156528],{"class":335},[14,156554,156556],{"id":156555},"_28-字符串定义","2.8 字符串定义",[19,156558,156559],{},"三种常见写法：",[58,156561,156563],{"className":30579,"code":156562,"language":30581,"meta":63,"style":63},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[65,156564,156565,156575,156584,156594],{"__ignoreMap":63},[68,156566,156567,156570,156572],{"class":70,"line":71},[68,156568,156569],{"class":335},"name1 ",[68,156571,381],{"class":331},[68,156573,156574],{"class":78}," '小明'\n",[68,156576,156577,156580,156582],{"class":70,"line":92},[68,156578,156579],{"class":335},"name2 ",[68,156581,381],{"class":331},[68,156583,149497],{"class":78},[68,156585,156586,156589,156591],{"class":70,"line":1387},[68,156587,156588],{"class":335},"text ",[68,156590,381],{"class":331},[68,156592,156593],{"class":78}," \"\"\"这是多行字符串\n",[68,156595,156596],{"class":70,"line":1402},[68,156597,156598],{"class":78},"可以换行\"\"\"\n",[19,156600,156601],{},"字符串中包含引号：",[58,156603,156605],{"className":30579,"code":156604,"language":30581,"meta":63,"style":63},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[65,156606,156607,156617,156627],{"__ignoreMap":63},[68,156608,156609,156612,156614],{"class":70,"line":71},[68,156610,156611],{"class":335},"msg ",[68,156613,381],{"class":331},[68,156615,156616],{"class":78}," \"他说:'你好'\"\n",[68,156618,156619,156622,156624],{"class":70,"line":92},[68,156620,156621],{"class":335},"msg2 ",[68,156623,381],{"class":331},[68,156625,156626],{"class":78}," '他说:\"你好\"'\n",[68,156628,156629,156632,156634,156637,156640,156643,156645],{"class":70,"line":1387},[68,156630,156631],{"class":335},"msg3 ",[68,156633,381],{"class":331},[68,156635,156636],{"class":78}," \"他说:",[68,156638,156639],{"class":82},"\\\"",[68,156641,156642],{"class":78},"你好",[68,156644,156639],{"class":82},[68,156646,25337],{"class":78},[19,156648,156649],{},"常见转义字符：",[471,156651,156652,156661],{},[474,156653,156654],{},[477,156655,156656,156659],{},[480,156657,156658],{},"写法",[480,156660,100901],{},[518,156662,156663,156673,156682,156692,156701],{},[477,156664,156665,156670],{},[523,156666,156667],{},[65,156668,156669],{},"\\n",[523,156671,156672],{},"换行",[477,156674,156675,156679],{},[523,156676,156677],{},[65,156678,1438],{},[523,156680,156681],{},"制表符",[477,156683,156684,156689],{},[523,156685,156686],{},[65,156687,156688],{},"\\\\",[523,156690,156691],{},"反斜杠",[477,156693,156694,156698],{},[523,156695,156696],{},[65,156697,156639],{},[523,156699,156700],{},"双引号",[477,156702,156703,156708],{},[523,156704,156705],{},[65,156706,156707],{},"\\'",[523,156709,156710],{},"单引号",[14,156712,156714],{"id":156713},"_29-字符串拼接","2.9 字符串拼接",[58,156716,156718],{"className":30579,"code":156717,"language":30581,"meta":63,"style":63},"name = \"小明\"\nprint(\"你好，\" + name)\n",[65,156719,156720,156728],{"__ignoreMap":63},[68,156721,156722,156724,156726],{"class":70,"line":71},[68,156723,146680],{"class":335},[68,156725,381],{"class":331},[68,156727,149497],{"class":78},[68,156729,156730,156732,156734,156737,156739],{"class":70,"line":92},[68,156731,30616],{"class":82},[68,156733,336],{"class":335},[68,156735,156736],{"class":78},"\"你好，\"",[68,156738,45767],{"class":331},[68,156740,156741],{"class":335}," name)\n",[19,156743,156744],{},"字符串只能和字符串拼接：",[58,156746,156748],{"className":30579,"code":156747,"language":30581,"meta":63,"style":63},"age = 18\nprint(\"年龄:\" + str(age))\n",[65,156749,156750,156758],{"__ignoreMap":63},[68,156751,156752,156754,156756],{"class":70,"line":71},[68,156753,146690],{"class":335},[68,156755,381],{"class":331},[68,156757,146695],{"class":82},[68,156759,156760,156762,156764,156766,156768,156770],{"class":70,"line":92},[68,156761,30616],{"class":82},[68,156763,336],{"class":335},[68,156765,146661],{"class":78},[68,156767,45767],{"class":331},[68,156769,74120],{"class":82},[68,156771,156772],{"class":335},"(age))\n",[19,156774,156775],{},"更推荐使用格式化字符串。",[14,156777,156779],{"id":156778},"_210-字符串格式化","2.10 字符串格式化",[301,156781,156783],{"id":156782},"_2101-百分号格式化","2.10.1 百分号格式化",[58,156785,156787],{"className":30579,"code":156786,"language":30581,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[65,156788,156789,156797,156805,156814,156818],{"__ignoreMap":63},[68,156790,156791,156793,156795],{"class":70,"line":71},[68,156792,146680],{"class":335},[68,156794,381],{"class":331},[68,156796,149497],{"class":78},[68,156798,156799,156801,156803],{"class":70,"line":92},[68,156800,146690],{"class":335},[68,156802,381],{"class":331},[68,156804,146695],{"class":82},[68,156806,156807,156809,156811],{"class":70,"line":1387},[68,156808,155502],{"class":335},[68,156810,381],{"class":331},[68,156812,156813],{"class":82}," 95.5\n",[68,156815,156816],{"class":70,"line":1402},[68,156817,2606],{"emptyLinePlaceholder":260},[68,156819,156820,156822,156824,156827,156830,156833,156836,156839,156842,156844,156846],{"class":70,"line":1408},[68,156821,30616],{"class":82},[68,156823,336],{"class":335},[68,156825,156826],{"class":78},"\"姓名:",[68,156828,156829],{"class":82},"%s",[68,156831,156832],{"class":78}," 年龄:",[68,156834,156835],{"class":82},"%d",[68,156837,156838],{"class":78}," 分数:",[68,156840,156841],{"class":82},"%.1f",[68,156843,584],{"class":78},[68,156845,156225],{"class":331},[68,156847,156848],{"class":335}," (name, age, score))\n",[19,156850,156851],{},"常用占位符：",[471,156853,156854,156863],{},[474,156855,156856],{},[477,156857,156858,156861],{},[480,156859,156860],{},"占位符",[480,156862,26073],{},[518,156864,156865,156873,156881],{},[477,156866,156867,156871],{},[523,156868,156869],{},[65,156870,156829],{},[523,156872,155368],{},[477,156874,156875,156879],{},[523,156876,156877],{},[65,156878,156835],{},[523,156880,155346],{},[477,156882,156883,156888],{},[523,156884,156885],{},[65,156886,156887],{},"%f",[523,156889,155357],{},[19,156891,156892],{},"精度控制：",[58,156894,156896],{"className":30579,"code":156895,"language":30581,"meta":63,"style":63},"price = 12.3456\nprint(\"%.2f\" % price)\n",[65,156897,156898,156907],{"__ignoreMap":63},[68,156899,156900,156902,156904],{"class":70,"line":71},[68,156901,146825],{"class":335},[68,156903,381],{"class":331},[68,156905,156906],{"class":82}," 12.3456\n",[68,156908,156909,156911,156913,156915,156918,156920,156922],{"class":70,"line":92},[68,156910,30616],{"class":82},[68,156912,336],{"class":335},[68,156914,584],{"class":78},[68,156916,156917],{"class":82},"%.2f",[68,156919,584],{"class":78},[68,156921,156225],{"class":331},[68,156923,156924],{"class":335}," price)\n",[301,156926,156928],{"id":156927},"_2102-format方法","2.10.2 format方法",[58,156930,156932],{"className":30579,"code":156931,"language":30581,"meta":63,"style":63},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[65,156933,156934,156942,156950,156954,156973,156993],{"__ignoreMap":63},[68,156935,156936,156938,156940],{"class":70,"line":71},[68,156937,146680],{"class":335},[68,156939,381],{"class":331},[68,156941,149497],{"class":78},[68,156943,156944,156946,156948],{"class":70,"line":92},[68,156945,146690],{"class":335},[68,156947,381],{"class":331},[68,156949,146695],{"class":82},[68,156951,156952],{"class":70,"line":1387},[68,156953,2606],{"emptyLinePlaceholder":260},[68,156955,156956,156958,156960,156962,156964,156966,156968,156970],{"class":70,"line":1402},[68,156957,30616],{"class":82},[68,156959,336],{"class":335},[68,156961,156826],{"class":78},[68,156963,32660],{"class":82},[68,156965,156832],{"class":78},[68,156967,32660],{"class":82},[68,156969,584],{"class":78},[68,156971,156972],{"class":335},".format(name, age))\n",[68,156974,156975,156977,156979,156981,156984,156986,156989,156991],{"class":70,"line":1408},[68,156976,30616],{"class":82},[68,156978,336],{"class":335},[68,156980,156826],{"class":78},[68,156982,156983],{"class":82},"{0}",[68,156985,156832],{"class":78},[68,156987,156988],{"class":82},"{1}",[68,156990,584],{"class":78},[68,156992,156972],{"class":335},[68,156994,156995,156997,156999,157001,157004,157006,157009,157011,157014,157016,157018,157021,157023,157025],{"class":70,"line":1422},[68,156996,30616],{"class":82},[68,156998,336],{"class":335},[68,157000,156826],{"class":78},[68,157002,157003],{"class":82},"{name}",[68,157005,156832],{"class":78},[68,157007,157008],{"class":82},"{age}",[68,157010,584],{"class":78},[68,157012,157013],{"class":335},".format(",[68,157015,80011],{"class":5421},[68,157017,381],{"class":331},[68,157019,157020],{"class":335},"name, ",[68,157022,70422],{"class":5421},[68,157024,381],{"class":331},[68,157026,157027],{"class":335},"age))\n",[301,157029,157031],{"id":157030},"_2103-f-string","2.10.3 f-string",[19,157033,157034],{},"推荐写法：",[58,157036,157038],{"className":30579,"code":157037,"language":30581,"meta":63,"style":63},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[65,157039,157040,157048,157056,157064,157068],{"__ignoreMap":63},[68,157041,157042,157044,157046],{"class":70,"line":71},[68,157043,146680],{"class":335},[68,157045,381],{"class":331},[68,157047,149497],{"class":78},[68,157049,157050,157052,157054],{"class":70,"line":92},[68,157051,146690],{"class":335},[68,157053,381],{"class":331},[68,157055,146695],{"class":82},[68,157057,157058,157060,157062],{"class":70,"line":1387},[68,157059,155502],{"class":335},[68,157061,381],{"class":331},[68,157063,156813],{"class":82},[68,157065,157066],{"class":70,"line":1402},[68,157067,2606],{"emptyLinePlaceholder":260},[68,157069,157070,157072,157074,157076,157078,157080,157082,157084,157086,157088,157090,157092,157094,157096,157099,157102,157104,157106],{"class":70,"line":1408},[68,157071,30616],{"class":82},[68,157073,336],{"class":335},[68,157075,387],{"class":331},[68,157077,156826],{"class":78},[68,157079,1229],{"class":82},[68,157081,80011],{"class":335},[68,157083,1279],{"class":82},[68,157085,156832],{"class":78},[68,157087,1229],{"class":82},[68,157089,70422],{"class":335},[68,157091,1279],{"class":82},[68,157093,156838],{"class":78},[68,157095,1229],{"class":82},[68,157097,157098],{"class":335},"score",[68,157100,157101],{"class":331},":.1f",[68,157103,1279],{"class":82},[68,157105,584],{"class":78},[68,157107,342],{"class":335},[19,157109,157110],{},"表达式也可以放进去：",[58,157112,157114],{"className":30579,"code":157113,"language":30581,"meta":63,"style":63},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[65,157115,157116,157124,157132],{"__ignoreMap":63},[68,157117,157118,157120,157122],{"class":70,"line":71},[68,157119,146825],{"class":335},[68,157121,381],{"class":331},[68,157123,146830],{"class":82},[68,157125,157126,157128,157130],{"class":70,"line":92},[68,157127,146835],{"class":335},[68,157129,381],{"class":331},[68,157131,54628],{"class":82},[68,157133,157134,157136,157138,157140,157143,157145,157147,157149,157152,157154,157157],{"class":70,"line":1387},[68,157135,30616],{"class":82},[68,157137,336],{"class":335},[68,157139,387],{"class":331},[68,157141,157142],{"class":78},"\"总价:",[68,157144,1229],{"class":82},[68,157146,146825],{"class":335},[68,157148,788],{"class":331},[68,157150,157151],{"class":335}," count",[68,157153,1279],{"class":82},[68,157155,157156],{"class":78},"元\"",[68,157158,342],{"class":335},[14,157160,157162],{"id":157161},"_211-input输入","2.11 input输入",[19,157164,157165,157168],{},[65,157166,157167],{},"input()"," 会暂停程序，等待用户输入。",[58,157170,157172],{"className":30579,"code":157171,"language":30581,"meta":63,"style":63},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[65,157173,157174,157188],{"__ignoreMap":63},[68,157175,157176,157178,157180,157182,157184,157186],{"class":70,"line":71},[68,157177,146680],{"class":335},[68,157179,381],{"class":331},[68,157181,60806],{"class":82},[68,157183,336],{"class":335},[68,157185,152523],{"class":78},[68,157187,342],{"class":335},[68,157189,157190,157192,157194,157196,157199,157201,157203,157205,157207],{"class":70,"line":92},[68,157191,30616],{"class":82},[68,157193,336],{"class":335},[68,157195,387],{"class":331},[68,157197,157198],{"class":78},"\"你好，",[68,157200,1229],{"class":82},[68,157202,80011],{"class":335},[68,157204,1279],{"class":82},[68,157206,584],{"class":78},[68,157208,342],{"class":335},[19,157210,157211],{},"输入整数：",[58,157213,157215],{"className":30579,"code":157214,"language":30581,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[65,157216,157217,157235],{"__ignoreMap":63},[68,157218,157219,157221,157223,157225,157227,157229,157231,157233],{"class":70,"line":71},[68,157220,146690],{"class":335},[68,157222,381],{"class":331},[68,157224,2588],{"class":82},[68,157226,336],{"class":335},[68,157228,54022],{"class":82},[68,157230,336],{"class":335},[68,157232,152538],{"class":78},[68,157234,30698],{"class":335},[68,157236,157237,157239,157241,157243,157246,157248,157250,157252,157255,157257],{"class":70,"line":92},[68,157238,30616],{"class":82},[68,157240,336],{"class":335},[68,157242,387],{"class":331},[68,157244,157245],{"class":78},"\"明年你",[68,157247,1229],{"class":82},[68,157249,146690],{"class":335},[68,157251,814],{"class":331},[68,157253,157254],{"class":82}," 1}",[68,157256,149548],{"class":78},[68,157258,342],{"class":335},[19,157260,157261],{},"输入小数：",[58,157263,157265],{"className":30579,"code":157264,"language":30581,"meta":63,"style":63},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[65,157266,157267,157286],{"__ignoreMap":63},[68,157268,157269,157271,157273,157275,157277,157279,157281,157284],{"class":70,"line":71},[68,157270,155475],{"class":335},[68,157272,381],{"class":331},[68,157274,109997],{"class":82},[68,157276,336],{"class":335},[68,157278,54022],{"class":82},[68,157280,336],{"class":335},[68,157282,157283],{"class":78},"\"请输入身高:\"",[68,157285,30698],{"class":335},[68,157287,157288,157290,157292,157294,157297,157299,157301,157304,157306,157309],{"class":70,"line":92},[68,157289,30616],{"class":82},[68,157291,336],{"class":335},[68,157293,387],{"class":331},[68,157295,157296],{"class":78},"\"身高:",[68,157298,1229],{"class":82},[68,157300,25185],{"class":335},[68,157302,157303],{"class":331},":.2f",[68,157305,1279],{"class":82},[68,157307,157308],{"class":78},"米\"",[68,157310,342],{"class":335},[14,157312,157314],{"id":157313},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157316,123489],{},[23,157318,157319,157322,157325,157328],{},[26,157320,157321],{},"输入商品单价。",[26,157323,157324],{},"输入购买数量。",[26,157326,157327],{},"输入折扣，例如 0.8 表示八折。",[26,157329,157330],{},"输出最终金额，保留两位小数。",[19,157332,10240],{},[58,157334,157336],{"className":30579,"code":157335,"language":30581,"meta":63,"style":63},"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",[65,157337,157338,157357,157376,157396,157400,157420,157424,157447,157468,157490],{"__ignoreMap":63},[68,157339,157340,157342,157344,157346,157348,157350,157352,157355],{"class":70,"line":71},[68,157341,146825],{"class":335},[68,157343,381],{"class":331},[68,157345,109997],{"class":82},[68,157347,336],{"class":335},[68,157349,54022],{"class":82},[68,157351,336],{"class":335},[68,157353,157354],{"class":78},"\"请输入商品单价:\"",[68,157356,30698],{"class":335},[68,157358,157359,157361,157363,157365,157367,157369,157371,157374],{"class":70,"line":92},[68,157360,146835],{"class":335},[68,157362,381],{"class":331},[68,157364,2588],{"class":82},[68,157366,336],{"class":335},[68,157368,54022],{"class":82},[68,157370,336],{"class":335},[68,157372,157373],{"class":78},"\"请输入购买数量:\"",[68,157375,30698],{"class":335},[68,157377,157378,157381,157383,157385,157387,157389,157391,157394],{"class":70,"line":1387},[68,157379,157380],{"class":335},"discount ",[68,157382,381],{"class":331},[68,157384,109997],{"class":82},[68,157386,336],{"class":335},[68,157388,54022],{"class":82},[68,157390,336],{"class":335},[68,157392,157393],{"class":78},"\"请输入折扣:\"",[68,157395,30698],{"class":335},[68,157397,157398],{"class":70,"line":1402},[68,157399,2606],{"emptyLinePlaceholder":260},[68,157401,157402,157405,157407,157410,157412,157415,157417],{"class":70,"line":1408},[68,157403,157404],{"class":335},"total ",[68,157406,381],{"class":331},[68,157408,157409],{"class":335}," price ",[68,157411,788],{"class":331},[68,157413,157414],{"class":335}," count ",[68,157416,788],{"class":331},[68,157418,157419],{"class":335}," discount\n",[68,157421,157422],{"class":70,"line":1422},[68,157423,2606],{"emptyLinePlaceholder":260},[68,157425,157426,157428,157430,157432,157435,157437,157439,157441,157443,157445],{"class":70,"line":1428},[68,157427,30616],{"class":82},[68,157429,336],{"class":335},[68,157431,387],{"class":331},[68,157433,157434],{"class":78},"\"商品单价:",[68,157436,1229],{"class":82},[68,157438,80016],{"class":335},[68,157440,157303],{"class":331},[68,157442,1279],{"class":82},[68,157444,584],{"class":78},[68,157446,342],{"class":335},[68,157448,157449,157451,157453,157455,157458,157460,157462,157464,157466],{"class":70,"line":1519},[68,157450,30616],{"class":82},[68,157452,336],{"class":335},[68,157454,387],{"class":331},[68,157456,157457],{"class":78},"\"购买数量:",[68,157459,1229],{"class":82},[68,157461,84635],{"class":335},[68,157463,1279],{"class":82},[68,157465,584],{"class":78},[68,157467,342],{"class":335},[68,157469,157470,157472,157474,157476,157479,157481,157484,157486,157488],{"class":70,"line":1525},[68,157471,30616],{"class":82},[68,157473,336],{"class":335},[68,157475,387],{"class":331},[68,157477,157478],{"class":78},"\"折扣:",[68,157480,1229],{"class":82},[68,157482,157483],{"class":335},"discount",[68,157485,1279],{"class":82},[68,157487,584],{"class":78},[68,157489,342],{"class":335},[68,157491,157492,157494,157496,157498,157501,157503,157506,157508,157510,157512],{"class":70,"line":1537},[68,157493,30616],{"class":82},[68,157495,336],{"class":335},[68,157497,387],{"class":331},[68,157499,157500],{"class":78},"\"应付金额:",[68,157502,1229],{"class":82},[68,157504,157505],{"class":335},"total",[68,157507,157303],{"class":331},[68,157509,1279],{"class":82},[68,157511,157156],{"class":78},[68,157513,342],{"class":335},[14,157515,157517],{"id":157516},"_213-易错点","2.13 易错点",[23,157519,157520,157525,157531,157539,157542],{},[26,157521,157522,157524],{},[65,157523,157167],{}," 的结果是字符串，做运算前要转换。",[26,157526,157527,157528,28588],{},"字符串拼接时，数字要先 ",[65,157529,157530],{},"str()",[26,157532,157533,157535,157536,157538],{},[65,157534,381],{}," 是赋值，",[65,157537,3155],{}," 是比较。",[26,157540,157541],{},"Python 没有自增自减运算符。",[26,157543,157544],{},"浮点数计算可能有精度误差：",[58,157546,157548],{"className":30579,"code":157547,"language":30581,"meta":63,"style":63},"print(0.1 + 0.2)\n",[65,157549,157550],{"__ignoreMap":63},[68,157551,157552,157554,157556,157558,157560,157563],{"class":70,"line":71},[68,157553,30616],{"class":82},[68,157555,336],{"class":335},[68,157557,86411],{"class":82},[68,157559,45767],{"class":331},[68,157561,157562],{"class":82}," 0.2",[68,157564,342],{"class":335},[19,157566,157567,157568,157571],{},"金额计算如果要求严格，可以后续学习 ",[65,157569,157570],{},"decimal"," 模块。",[14,157573,157575],{"id":157574},"_214-本章练习","2.14 本章练习",[23,157577,157578,157581,157584,157587,157590],{},[26,157579,157580],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[26,157582,157583],{},"输入圆的半径，计算面积，保留两位小数。",[26,157585,157586],{},"输入工资和奖金，计算总收入。",[26,157588,157589],{},"输入摄氏温度，转换为华氏温度。",[26,157591,157592],{},"写一个 BMI 计算程序：",[58,157594,157597],{"className":157595,"code":157596,"language":5393,"meta":63},[5391],"BMI = 体重kg \u002F 身高m ** 2\n",[65,157598,157596],{"__ignoreMap":63},[250,157600,157601],{},"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":63,"searchDepth":92,"depth":92,"links":157603},[157604,157605,157606,157607,157608,157609,157610,157616,157617,157618,157623,157624,157625,157626],{"id":155165,"depth":92,"text":155166},{"id":155274,"depth":92,"text":155275},{"id":155445,"depth":92,"text":155446},{"id":155522,"depth":92,"text":155523},{"id":50932,"depth":92,"text":50933},{"id":155828,"depth":92,"text":155829},{"id":156054,"depth":92,"text":156055,"children":157611},[157612,157613,157614,157615],{"id":156058,"depth":1387,"text":156059},{"id":156252,"depth":1387,"text":156253},{"id":156340,"depth":1387,"text":156341},{"id":156446,"depth":1387,"text":156447},{"id":156555,"depth":92,"text":156556},{"id":156713,"depth":92,"text":156714},{"id":156778,"depth":92,"text":156779,"children":157619},[157620,157621,157622],{"id":156782,"depth":1387,"text":156783},{"id":156927,"depth":1387,"text":156928},{"id":157030,"depth":1387,"text":157031},{"id":157161,"depth":92,"text":157162},{"id":157313,"depth":92,"text":157314},{"id":157516,"depth":92,"text":157517},{"id":157574,"depth":92,"text":157575},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155157,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157633,"title":157634,"body":157635,"description":257,"extension":258,"meta":159271,"navigation":260,"path":159272,"seo":159273,"stem":159274,"__hash__":159275},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157636,"toc":159252},[157637,157640,157644,157647,157662,157665,157693,157697,157747,157749,157765,157768,157794,157797,157801,157868,157871,157887,157891,157894,158012,158015,158022,158071,158077,158081,158084,158197,158200,158204,158208,158211,158261,158265,158268,158318,158322,158325,158363,158367,158370,158416,158419,158454,158458,158463,158466,158512,158514,158581,158585,158591,158702,158711,158715,158717,158728,158730,158896,158900,158902,158916,158918,159132,159136,159155,159172,159175,159221,159225,159249],[10,157638,157634],{"id":157639},"_3-判断语句",[14,157641,157643],{"id":157642},"_31-布尔值","3.1 布尔值",[19,157645,157646],{},"判断语句依赖布尔值：",[58,157648,157650],{"className":30579,"code":157649,"language":30581,"meta":63,"style":63},"True\nFalse\n",[65,157651,157652,157657],{"__ignoreMap":63},[68,157653,157654],{"class":70,"line":71},[68,157655,157656],{"class":82},"True\n",[68,157658,157659],{"class":70,"line":92},[68,157660,157661],{"class":82},"False\n",[19,157663,157664],{},"比较表达式会产生布尔值：",[58,157666,157668],{"className":30579,"code":157667,"language":30581,"meta":63,"style":63},"age = 18\nprint(age >= 18)  # True\n",[65,157669,157670,157678],{"__ignoreMap":63},[68,157671,157672,157674,157676],{"class":70,"line":71},[68,157673,146690],{"class":335},[68,157675,381],{"class":331},[68,157677,146695],{"class":82},[68,157679,157680,157682,157684,157686,157688,157690],{"class":70,"line":92},[68,157681,30616],{"class":82},[68,157683,155912],{"class":335},[68,157685,1917],{"class":331},[68,157687,156429],{"class":82},[68,157689,46009],{"class":335},[68,157691,157692],{"class":393},"# True\n",[14,157694,157696],{"id":157695},"_32-if基础语法","3.2 if基础语法",[58,157698,157700],{"className":30579,"code":157699,"language":30581,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[65,157701,157702,157720,157724,157736],{"__ignoreMap":63},[68,157703,157704,157706,157708,157710,157712,157714,157716,157718],{"class":70,"line":71},[68,157705,146690],{"class":335},[68,157707,381],{"class":331},[68,157709,2588],{"class":82},[68,157711,336],{"class":335},[68,157713,54022],{"class":82},[68,157715,336],{"class":335},[68,157717,152538],{"class":78},[68,157719,30698],{"class":335},[68,157721,157722],{"class":70,"line":92},[68,157723,2606],{"emptyLinePlaceholder":260},[68,157725,157726,157728,157730,157732,157734],{"class":70,"line":1387},[68,157727,1738],{"class":331},[68,157729,15912],{"class":335},[68,157731,1917],{"class":331},[68,157733,156429],{"class":82},[68,157735,3945],{"class":335},[68,157737,157738,157740,157742,157745],{"class":70,"line":1402},[68,157739,31500],{"class":82},[68,157741,336],{"class":335},[68,157743,157744],{"class":78},"\"可以进入网吧\"",[68,157746,342],{"class":335},[19,157748,9230],{},[23,157750,157751,157756,157759,157762],{},[26,157752,157753,157755],{},[65,157754,1738],{}," 后面是条件表达式。",[26,157757,157758],{},"条件后面必须写冒号。",[26,157760,157761],{},"条件成立时执行缩进代码块。",[26,157763,157764],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157766,157767],{},"错误示例：",[58,157769,157771],{"className":30579,"code":157770,"language":30581,"meta":63,"style":63},"if age >= 18\n    print(\"可以进入\")\n",[65,157772,157773,157783],{"__ignoreMap":63},[68,157774,157775,157777,157779,157781],{"class":70,"line":71},[68,157776,1738],{"class":331},[68,157778,15912],{"class":335},[68,157780,1917],{"class":331},[68,157782,146695],{"class":82},[68,157784,157785,157787,157789,157792],{"class":70,"line":92},[68,157786,31500],{"class":82},[68,157788,336],{"class":335},[68,157790,157791],{"class":78},"\"可以进入\"",[68,157793,342],{"class":335},[19,157795,157796],{},"缺少冒号。",[14,157798,157800],{"id":157799},"_33-if-else","3.3 if else",[58,157802,157804],{"className":30579,"code":157803,"language":30581,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[65,157805,157806,157824,157828,157840,157851,157857],{"__ignoreMap":63},[68,157807,157808,157810,157812,157814,157816,157818,157820,157822],{"class":70,"line":71},[68,157809,146690],{"class":335},[68,157811,381],{"class":331},[68,157813,2588],{"class":82},[68,157815,336],{"class":335},[68,157817,54022],{"class":82},[68,157819,336],{"class":335},[68,157821,152538],{"class":78},[68,157823,30698],{"class":335},[68,157825,157826],{"class":70,"line":92},[68,157827,2606],{"emptyLinePlaceholder":260},[68,157829,157830,157832,157834,157836,157838],{"class":70,"line":1387},[68,157831,1738],{"class":331},[68,157833,15912],{"class":335},[68,157835,1917],{"class":331},[68,157837,156429],{"class":82},[68,157839,3945],{"class":335},[68,157841,157842,157844,157846,157849],{"class":70,"line":1402},[68,157843,31500],{"class":82},[68,157845,336],{"class":335},[68,157847,157848],{"class":78},"\"成年人\"",[68,157850,342],{"class":335},[68,157852,157853,157855],{"class":70,"line":1408},[68,157854,1908],{"class":331},[68,157856,3945],{"class":335},[68,157858,157859,157861,157863,157866],{"class":70,"line":1422},[68,157860,31500],{"class":82},[68,157862,336],{"class":335},[68,157864,157865],{"class":78},"\"未成年人\"",[68,157867,342],{"class":335},[19,157869,157870],{},"执行逻辑：",[23,157872,157873,157879,157884],{},[26,157874,157875,157876,157878],{},"条件成立，执行 ",[65,157877,1738],{}," 代码块。",[26,157880,157881,157882,157878],{},"条件不成立，执行 ",[65,157883,1908],{},[26,157885,157886],{},"两个代码块只会执行其中一个。",[14,157888,157890],{"id":157889},"_34-if-elif-else","3.4 if elif else",[19,157892,157893],{},"多条件判断：",[58,157895,157897],{"className":30579,"code":157896,"language":30581,"meta":63,"style":63},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[65,157898,157899,157917,157921,157935,157946,157960,157971,157984,157995,158001],{"__ignoreMap":63},[68,157900,157901,157903,157905,157907,157909,157911,157913,157915],{"class":70,"line":71},[68,157902,155502],{"class":335},[68,157904,381],{"class":331},[68,157906,2588],{"class":82},[68,157908,336],{"class":335},[68,157910,54022],{"class":82},[68,157912,336],{"class":335},[68,157914,152553],{"class":78},[68,157916,30698],{"class":335},[68,157918,157919],{"class":70,"line":92},[68,157920,2606],{"emptyLinePlaceholder":260},[68,157922,157923,157925,157928,157930,157933],{"class":70,"line":1387},[68,157924,1738],{"class":331},[68,157926,157927],{"class":335}," score ",[68,157929,1917],{"class":331},[68,157931,157932],{"class":82}," 90",[68,157934,3945],{"class":335},[68,157936,157937,157939,157941,157944],{"class":70,"line":1402},[68,157938,31500],{"class":82},[68,157940,336],{"class":335},[68,157942,157943],{"class":78},"\"优秀\"",[68,157945,342],{"class":335},[68,157947,157948,157951,157953,157955,157958],{"class":70,"line":1408},[68,157949,157950],{"class":331},"elif",[68,157952,157927],{"class":335},[68,157954,1917],{"class":331},[68,157956,157957],{"class":82}," 80",[68,157959,3945],{"class":335},[68,157961,157962,157964,157966,157969],{"class":70,"line":1422},[68,157963,31500],{"class":82},[68,157965,336],{"class":335},[68,157967,157968],{"class":78},"\"良好\"",[68,157970,342],{"class":335},[68,157972,157973,157975,157977,157979,157982],{"class":70,"line":1428},[68,157974,157950],{"class":331},[68,157976,157927],{"class":335},[68,157978,1917],{"class":331},[68,157980,157981],{"class":82}," 60",[68,157983,3945],{"class":335},[68,157985,157986,157988,157990,157993],{"class":70,"line":1519},[68,157987,31500],{"class":82},[68,157989,336],{"class":335},[68,157991,157992],{"class":78},"\"及格\"",[68,157994,342],{"class":335},[68,157996,157997,157999],{"class":70,"line":1525},[68,157998,1908],{"class":331},[68,158000,3945],{"class":335},[68,158002,158003,158005,158007,158010],{"class":70,"line":1537},[68,158004,31500],{"class":82},[68,158006,336],{"class":335},[68,158008,158009],{"class":78},"\"不及格\"",[68,158011,342],{"class":335},[19,158013,158014],{},"注意判断顺序很重要。",[19,158016,158017,158018,158021],{},"如果把 ",[65,158019,158020],{},"score >= 60"," 放在最前面：",[58,158023,158025],{"className":30579,"code":158024,"language":30581,"meta":63,"style":63},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[65,158026,158027,158039,158049,158061],{"__ignoreMap":63},[68,158028,158029,158031,158033,158035,158037],{"class":70,"line":71},[68,158030,1738],{"class":331},[68,158032,157927],{"class":335},[68,158034,1917],{"class":331},[68,158036,157981],{"class":82},[68,158038,3945],{"class":335},[68,158040,158041,158043,158045,158047],{"class":70,"line":92},[68,158042,31500],{"class":82},[68,158044,336],{"class":335},[68,158046,157992],{"class":78},[68,158048,342],{"class":335},[68,158050,158051,158053,158055,158057,158059],{"class":70,"line":1387},[68,158052,157950],{"class":331},[68,158054,157927],{"class":335},[68,158056,1917],{"class":331},[68,158058,157932],{"class":82},[68,158060,3945],{"class":335},[68,158062,158063,158065,158067,158069],{"class":70,"line":1402},[68,158064,31500],{"class":82},[68,158066,336],{"class":335},[68,158068,157943],{"class":78},[68,158070,342],{"class":335},[19,158072,158073,158074,158076],{},"成绩 95 会先满足 ",[65,158075,158020],{},"，后面的优秀分支就不会执行。",[14,158078,158080],{"id":158079},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158082,158083],{},"嵌套判断就是在一个判断内部再写判断。",[58,158085,158087],{"className":30579,"code":158086,"language":30581,"meta":63,"style":63},"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",[65,158088,158089,158107,158122,158126,158138,158152,158162,158169,158180,158186],{"__ignoreMap":63},[68,158090,158091,158093,158095,158097,158099,158101,158103,158105],{"class":70,"line":71},[68,158092,146690],{"class":335},[68,158094,381],{"class":331},[68,158096,2588],{"class":82},[68,158098,336],{"class":335},[68,158100,54022],{"class":82},[68,158102,336],{"class":335},[68,158104,152538],{"class":78},[68,158106,30698],{"class":335},[68,158108,158109,158111,158113,158115,158117,158120],{"class":70,"line":92},[68,158110,156505],{"class":335},[68,158112,381],{"class":331},[68,158114,60806],{"class":82},[68,158116,336],{"class":335},[68,158118,158119],{"class":78},"\"是否有票(y\u002Fn):\"",[68,158121,342],{"class":335},[68,158123,158124],{"class":70,"line":1387},[68,158125,2606],{"emptyLinePlaceholder":260},[68,158127,158128,158130,158132,158134,158136],{"class":70,"line":1402},[68,158129,1738],{"class":331},[68,158131,15912],{"class":335},[68,158133,1917],{"class":331},[68,158135,156429],{"class":82},[68,158137,3945],{"class":335},[68,158139,158140,158142,158145,158147,158150],{"class":70,"line":1408},[68,158141,3307],{"class":331},[68,158143,158144],{"class":335}," has_ticket ",[68,158146,3155],{"class":331},[68,158148,158149],{"class":78}," \"y\"",[68,158151,3945],{"class":335},[68,158153,158154,158156,158158,158160],{"class":70,"line":1422},[68,158155,32652],{"class":82},[68,158157,336],{"class":335},[68,158159,157791],{"class":78},[68,158161,342],{"class":335},[68,158163,158164,158167],{"class":70,"line":1428},[68,158165,158166],{"class":331},"    else",[68,158168,3945],{"class":335},[68,158170,158171,158173,158175,158178],{"class":70,"line":1519},[68,158172,32652],{"class":82},[68,158174,336],{"class":335},[68,158176,158177],{"class":78},"\"请先买票\"",[68,158179,342],{"class":335},[68,158181,158182,158184],{"class":70,"line":1525},[68,158183,1908],{"class":331},[68,158185,3945],{"class":335},[68,158187,158188,158190,158192,158195],{"class":70,"line":1537},[68,158189,31500],{"class":82},[68,158191,336],{"class":335},[68,158193,158194],{"class":78},"\"未成年人禁止进入\"",[68,158196,342],{"class":335},[19,158198,158199],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158201,158203],{"id":158202},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[301,158205,158207],{"id":158206},"_361-and","3.6.1 and",[19,158209,158210],{},"两个条件都成立才成立。",[58,158212,158214],{"className":30579,"code":158213,"language":30581,"meta":63,"style":63},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[65,158215,158216,158224,158232,158236,158251],{"__ignoreMap":63},[68,158217,158218,158220,158222],{"class":70,"line":71},[68,158219,146690],{"class":335},[68,158221,381],{"class":331},[68,158223,88266],{"class":82},[68,158225,158226,158228,158230],{"class":70,"line":92},[68,158227,156505],{"class":335},[68,158229,381],{"class":331},[68,158231,153743],{"class":82},[68,158233,158234],{"class":70,"line":1387},[68,158235,2606],{"emptyLinePlaceholder":260},[68,158237,158238,158240,158242,158244,158246,158248],{"class":70,"line":1402},[68,158239,1738],{"class":331},[68,158241,15912],{"class":335},[68,158243,1917],{"class":331},[68,158245,156429],{"class":82},[68,158247,120626],{"class":331},[68,158249,158250],{"class":335}," has_ticket:\n",[68,158252,158253,158255,158257,158259],{"class":70,"line":1408},[68,158254,31500],{"class":82},[68,158256,336],{"class":335},[68,158258,157791],{"class":78},[68,158260,342],{"class":335},[301,158262,158264],{"id":158263},"_362-or","3.6.2 or",[19,158266,158267],{},"只要一个条件成立就成立。",[58,158269,158271],{"className":30579,"code":158270,"language":30581,"meta":63,"style":63},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[65,158272,158273,158282,158291,158295,158307],{"__ignoreMap":63},[68,158274,158275,158278,158280],{"class":70,"line":71},[68,158276,158277],{"class":335},"is_vip ",[68,158279,381],{"class":331},[68,158281,126004],{"class":82},[68,158283,158284,158287,158289],{"class":70,"line":92},[68,158285,158286],{"class":335},"coupon ",[68,158288,381],{"class":331},[68,158290,153743],{"class":82},[68,158292,158293],{"class":70,"line":1387},[68,158294,2606],{"emptyLinePlaceholder":260},[68,158296,158297,158299,158302,158304],{"class":70,"line":1402},[68,158298,1738],{"class":331},[68,158300,158301],{"class":335}," is_vip ",[68,158303,115290],{"class":331},[68,158305,158306],{"class":335}," coupon:\n",[68,158308,158309,158311,158313,158316],{"class":70,"line":1408},[68,158310,31500],{"class":82},[68,158312,336],{"class":335},[68,158314,158315],{"class":78},"\"可以享受优惠\"",[68,158317,342],{"class":335},[301,158319,158321],{"id":158320},"_363-not","3.6.3 not",[19,158323,158324],{},"取反。",[58,158326,158328],{"className":30579,"code":158327,"language":30581,"meta":63,"style":63},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[65,158329,158330,158339,158343,158352],{"__ignoreMap":63},[68,158331,158332,158335,158337],{"class":70,"line":71},[68,158333,158334],{"class":335},"is_closed ",[68,158336,381],{"class":331},[68,158338,126004],{"class":82},[68,158340,158341],{"class":70,"line":92},[68,158342,2606],{"emptyLinePlaceholder":260},[68,158344,158345,158347,158349],{"class":70,"line":1387},[68,158346,1738],{"class":331},[68,158348,39131],{"class":331},[68,158350,158351],{"class":335}," is_closed:\n",[68,158353,158354,158356,158358,158361],{"class":70,"line":1402},[68,158355,31500],{"class":82},[68,158357,336],{"class":335},[68,158359,158360],{"class":78},"\"店铺营业中\"",[68,158362,342],{"class":335},[14,158364,158366],{"id":158365},"_37-链式比较","3.7 链式比较",[19,158368,158369],{},"Python 支持链式比较：",[58,158371,158373],{"className":30579,"code":158372,"language":30581,"meta":63,"style":63},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[65,158374,158375,158384,158388,158405],{"__ignoreMap":63},[68,158376,158377,158379,158381],{"class":70,"line":71},[68,158378,155502],{"class":335},[68,158380,381],{"class":331},[68,158382,158383],{"class":82}," 85\n",[68,158385,158386],{"class":70,"line":92},[68,158387,2606],{"emptyLinePlaceholder":260},[68,158389,158390,158392,158394,158397,158399,158401,158403],{"class":70,"line":1387},[68,158391,1738],{"class":331},[68,158393,4299],{"class":82},[68,158395,158396],{"class":331}," \u003C=",[68,158398,157927],{"class":335},[68,158400,1795],{"class":331},[68,158402,5959],{"class":82},[68,158404,3945],{"class":335},[68,158406,158407,158409,158411,158414],{"class":70,"line":1402},[68,158408,31500],{"class":82},[68,158410,336],{"class":335},[68,158412,158413],{"class":78},"\"成绩合法\"",[68,158415,342],{"class":335},[19,158417,158418],{},"等价于：",[58,158420,158422],{"className":30579,"code":158421,"language":30581,"meta":63,"style":63},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[65,158423,158424,158444],{"__ignoreMap":63},[68,158425,158426,158428,158430,158432,158434,158436,158438,158440,158442],{"class":70,"line":71},[68,158427,1738],{"class":331},[68,158429,157927],{"class":335},[68,158431,1917],{"class":331},[68,158433,4299],{"class":82},[68,158435,120626],{"class":331},[68,158437,157927],{"class":335},[68,158439,1795],{"class":331},[68,158441,5959],{"class":82},[68,158443,3945],{"class":335},[68,158445,158446,158448,158450,158452],{"class":70,"line":92},[68,158447,31500],{"class":82},[68,158449,336],{"class":335},[68,158451,158413],{"class":78},[68,158453,342],{"class":335},[14,158455,158457],{"id":158456},"_38-真值和假值","3.8 真值和假值",[19,158459,116667,158460,158462],{},[65,158461,1738],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158464,158465],{},"假值：",[58,158467,158469],{"className":30579,"code":158468,"language":30581,"meta":63,"style":63},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[65,158470,158471,158475,158480,158484,158488,158493,158497,158501,158506],{"__ignoreMap":63},[68,158472,158473],{"class":70,"line":71},[68,158474,157661],{"class":82},[68,158476,158477],{"class":70,"line":92},[68,158478,158479],{"class":82},"None\n",[68,158481,158482],{"class":70,"line":1387},[68,158483,3291],{"class":82},[68,158485,158486],{"class":70,"line":1402},[68,158487,32543],{"class":82},[68,158489,158490],{"class":70,"line":1408},[68,158491,158492],{"class":78},"\"\"\n",[68,158494,158495],{"class":70,"line":1422},[68,158496,32558],{"class":335},[68,158498,158499],{"class":70,"line":1428},[68,158500,2182],{"class":335},[68,158502,158503],{"class":70,"line":1519},[68,158504,158505],{"class":335},"{}\n",[68,158507,158508,158510],{"class":70,"line":1525},[68,158509,155434],{"class":82},[68,158511,2182],{"class":335},[19,158513,15340],{},[58,158515,158517],{"className":30579,"code":158516,"language":30581,"meta":63,"style":63},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[65,158518,158519,158533,158537,158544,158564,158570],{"__ignoreMap":63},[68,158520,158521,158523,158525,158527,158529,158531],{"class":70,"line":71},[68,158522,146680],{"class":335},[68,158524,381],{"class":331},[68,158526,60806],{"class":82},[68,158528,336],{"class":335},[68,158530,152523],{"class":78},[68,158532,342],{"class":335},[68,158534,158535],{"class":70,"line":92},[68,158536,2606],{"emptyLinePlaceholder":260},[68,158538,158539,158541],{"class":70,"line":1387},[68,158540,1738],{"class":331},[68,158542,158543],{"class":335}," name:\n",[68,158545,158546,158548,158550,158552,158554,158556,158558,158560,158562],{"class":70,"line":1402},[68,158547,31500],{"class":82},[68,158549,336],{"class":335},[68,158551,387],{"class":331},[68,158553,157198],{"class":78},[68,158555,1229],{"class":82},[68,158557,80011],{"class":335},[68,158559,1279],{"class":82},[68,158561,584],{"class":78},[68,158563,342],{"class":335},[68,158565,158566,158568],{"class":70,"line":1408},[68,158567,1908],{"class":331},[68,158569,3945],{"class":335},[68,158571,158572,158574,158576,158579],{"class":70,"line":1422},[68,158573,31500],{"class":82},[68,158575,336],{"class":335},[68,158577,158578],{"class":78},"\"姓名不能为空\"",[68,158580,342],{"class":335},[14,158582,158584],{"id":158583},"_39-match语句","3.9 match语句",[19,158586,158587,158588,158590],{},"Python 3.10 开始支持 ",[65,158589,71466],{},"。它适合处理固定选项。",[58,158592,158594],{"className":30579,"code":158593,"language":30581,"meta":63,"style":63},"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",[65,158595,158596,158612,158616,158623,158633,158644,158653,158664,158673,158684,158691],{"__ignoreMap":63},[68,158597,158598,158601,158603,158605,158607,158610],{"class":70,"line":71},[68,158599,158600],{"class":335},"command ",[68,158602,381],{"class":331},[68,158604,60806],{"class":82},[68,158606,336],{"class":335},[68,158608,158609],{"class":78},"\"请输入命令:\"",[68,158611,342],{"class":335},[68,158613,158614],{"class":70,"line":92},[68,158615,2606],{"emptyLinePlaceholder":260},[68,158617,158618,158620],{"class":70,"line":1387},[68,158619,71466],{"class":331},[68,158621,158622],{"class":335}," command:\n",[68,158624,158625,158628,158631],{"class":70,"line":1402},[68,158626,158627],{"class":331},"    case",[68,158629,158630],{"class":78}," \"start\"",[68,158632,3945],{"class":335},[68,158634,158635,158637,158639,158642],{"class":70,"line":1408},[68,158636,32652],{"class":82},[68,158638,336],{"class":335},[68,158640,158641],{"class":78},"\"启动\"",[68,158643,342],{"class":335},[68,158645,158646,158648,158651],{"class":70,"line":1422},[68,158647,158627],{"class":331},[68,158649,158650],{"class":78}," \"stop\"",[68,158652,3945],{"class":335},[68,158654,158655,158657,158659,158662],{"class":70,"line":1428},[68,158656,32652],{"class":82},[68,158658,336],{"class":335},[68,158660,158661],{"class":78},"\"停止\"",[68,158663,342],{"class":335},[68,158665,158666,158668,158671],{"class":70,"line":1519},[68,158667,158627],{"class":331},[68,158669,158670],{"class":78}," \"restart\"",[68,158672,3945],{"class":335},[68,158674,158675,158677,158679,158682],{"class":70,"line":1525},[68,158676,32652],{"class":82},[68,158678,336],{"class":335},[68,158680,158681],{"class":78},"\"重启\"",[68,158683,342],{"class":335},[68,158685,158686,158688],{"class":70,"line":1537},[68,158687,158627],{"class":331},[68,158689,158690],{"class":335}," _:\n",[68,158692,158693,158695,158697,158700],{"class":70,"line":1819},[68,158694,32652],{"class":82},[68,158696,336],{"class":335},[68,158698,158699],{"class":78},"\"未知命令\"",[68,158701,342],{"class":335},[19,158703,158704,158705,158707,158708,158710],{},"入门阶段掌握 ",[65,158706,154802],{}," 更重要，",[65,158709,71466],{}," 可以作为补充。",[14,158712,158714],{"id":158713},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158716,123489],{},[23,158718,158719,158722,158725],{},[26,158720,158721],{},"输入成绩。",[26,158723,158724],{},"判断成绩是否合法。",[26,158726,158727],{},"输出等级。",[19,158729,10240],{},[58,158731,158733],{"className":30579,"code":158732,"language":30581,"meta":63,"style":63},"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",[65,158734,158735,158753,158757,158775,158786,158798,158809,158821,158832,158845,158856,158868,158879,158885],{"__ignoreMap":63},[68,158736,158737,158739,158741,158743,158745,158747,158749,158751],{"class":70,"line":71},[68,158738,155502],{"class":335},[68,158740,381],{"class":331},[68,158742,109997],{"class":82},[68,158744,336],{"class":335},[68,158746,54022],{"class":82},[68,158748,336],{"class":335},[68,158750,152553],{"class":78},[68,158752,30698],{"class":335},[68,158754,158755],{"class":70,"line":92},[68,158756,2606],{"emptyLinePlaceholder":260},[68,158758,158759,158761,158763,158765,158767,158769,158771,158773],{"class":70,"line":1387},[68,158760,1738],{"class":331},[68,158762,39131],{"class":331},[68,158764,4299],{"class":82},[68,158766,158396],{"class":331},[68,158768,157927],{"class":335},[68,158770,1795],{"class":331},[68,158772,5959],{"class":82},[68,158774,3945],{"class":335},[68,158776,158777,158779,158781,158784],{"class":70,"line":1402},[68,158778,31500],{"class":82},[68,158780,336],{"class":335},[68,158782,158783],{"class":78},"\"成绩不合法\"",[68,158785,342],{"class":335},[68,158787,158788,158790,158792,158794,158796],{"class":70,"line":1408},[68,158789,157950],{"class":331},[68,158791,157927],{"class":335},[68,158793,1917],{"class":331},[68,158795,157932],{"class":82},[68,158797,3945],{"class":335},[68,158799,158800,158802,158804,158807],{"class":70,"line":1422},[68,158801,31500],{"class":82},[68,158803,336],{"class":335},[68,158805,158806],{"class":78},"\"等级:A\"",[68,158808,342],{"class":335},[68,158810,158811,158813,158815,158817,158819],{"class":70,"line":1428},[68,158812,157950],{"class":331},[68,158814,157927],{"class":335},[68,158816,1917],{"class":331},[68,158818,157957],{"class":82},[68,158820,3945],{"class":335},[68,158822,158823,158825,158827,158830],{"class":70,"line":1519},[68,158824,31500],{"class":82},[68,158826,336],{"class":335},[68,158828,158829],{"class":78},"\"等级:B\"",[68,158831,342],{"class":335},[68,158833,158834,158836,158838,158840,158843],{"class":70,"line":1525},[68,158835,157950],{"class":331},[68,158837,157927],{"class":335},[68,158839,1917],{"class":331},[68,158841,158842],{"class":82}," 70",[68,158844,3945],{"class":335},[68,158846,158847,158849,158851,158854],{"class":70,"line":1537},[68,158848,31500],{"class":82},[68,158850,336],{"class":335},[68,158852,158853],{"class":78},"\"等级:C\"",[68,158855,342],{"class":335},[68,158857,158858,158860,158862,158864,158866],{"class":70,"line":1819},[68,158859,157950],{"class":331},[68,158861,157927],{"class":335},[68,158863,1917],{"class":331},[68,158865,157981],{"class":82},[68,158867,3945],{"class":335},[68,158869,158870,158872,158874,158877],{"class":70,"line":1824},[68,158871,31500],{"class":82},[68,158873,336],{"class":335},[68,158875,158876],{"class":78},"\"等级:D\"",[68,158878,342],{"class":335},[68,158880,158881,158883],{"class":70,"line":1830},[68,158882,1908],{"class":331},[68,158884,3945],{"class":335},[68,158886,158887,158889,158891,158894],{"class":70,"line":1835},[68,158888,31500],{"class":82},[68,158890,336],{"class":335},[68,158892,158893],{"class":78},"\"等级:E\"",[68,158895,342],{"class":335},[14,158897,158899],{"id":158898},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158901,123489],{},[23,158903,158904,158907,158910,158913],{},[26,158905,158906],{},"输入消费金额。",[26,158908,158909],{},"输入会员等级，普通、银卡、金卡。",[26,158911,158912],{},"普通不打折，银卡 9 折，金卡 8 折。",[26,158914,158915],{},"满 500 再减 50。",[19,158917,10240],{},[58,158919,158921],{"className":30579,"code":158920,"language":30581,"meta":63,"style":63},"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",[65,158922,158923,158943,158959,158963,158971,158975,158989,158999,159012,159021,159034,159042,159048,159059,159063,159077,159081,159095,159105,159109],{"__ignoreMap":63},[68,158924,158925,158928,158930,158932,158934,158936,158938,158941],{"class":70,"line":71},[68,158926,158927],{"class":335},"amount ",[68,158929,381],{"class":331},[68,158931,109997],{"class":82},[68,158933,336],{"class":335},[68,158935,54022],{"class":82},[68,158937,336],{"class":335},[68,158939,158940],{"class":78},"\"请输入消费金额:\"",[68,158942,30698],{"class":335},[68,158944,158945,158948,158950,158952,158954,158957],{"class":70,"line":92},[68,158946,158947],{"class":335},"level ",[68,158949,381],{"class":331},[68,158951,60806],{"class":82},[68,158953,336],{"class":335},[68,158955,158956],{"class":78},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[68,158958,342],{"class":335},[68,158960,158961],{"class":70,"line":1387},[68,158962,2606],{"emptyLinePlaceholder":260},[68,158964,158965,158967,158969],{"class":70,"line":1402},[68,158966,157380],{"class":335},[68,158968,381],{"class":331},[68,158970,55900],{"class":82},[68,158972,158973],{"class":70,"line":1408},[68,158974,2606],{"emptyLinePlaceholder":260},[68,158976,158977,158979,158982,158984,158987],{"class":70,"line":1422},[68,158978,1738],{"class":331},[68,158980,158981],{"class":335}," level ",[68,158983,3155],{"class":331},[68,158985,158986],{"class":78}," \"银卡\"",[68,158988,3945],{"class":335},[68,158990,158991,158994,158996],{"class":70,"line":1428},[68,158992,158993],{"class":335},"    discount ",[68,158995,381],{"class":331},[68,158997,158998],{"class":82}," 0.9\n",[68,159000,159001,159003,159005,159007,159010],{"class":70,"line":1519},[68,159002,157950],{"class":331},[68,159004,158981],{"class":335},[68,159006,3155],{"class":331},[68,159008,159009],{"class":78}," \"金卡\"",[68,159011,3945],{"class":335},[68,159013,159014,159016,159018],{"class":70,"line":1525},[68,159015,158993],{"class":335},[68,159017,381],{"class":331},[68,159019,159020],{"class":82}," 0.8\n",[68,159022,159023,159025,159027,159029,159032],{"class":70,"line":1537},[68,159024,157950],{"class":331},[68,159026,158981],{"class":335},[68,159028,3155],{"class":331},[68,159030,159031],{"class":78}," \"普通\"",[68,159033,3945],{"class":335},[68,159035,159036,159038,159040],{"class":70,"line":1819},[68,159037,158993],{"class":335},[68,159039,381],{"class":331},[68,159041,55900],{"class":82},[68,159043,159044,159046],{"class":70,"line":1824},[68,159045,1908],{"class":331},[68,159047,3945],{"class":335},[68,159049,159050,159052,159054,159057],{"class":70,"line":1830},[68,159051,31500],{"class":82},[68,159053,336],{"class":335},[68,159055,159056],{"class":78},"\"会员等级输入错误，按普通会员计算\"",[68,159058,342],{"class":335},[68,159060,159061],{"class":70,"line":1835},[68,159062,2606],{"emptyLinePlaceholder":260},[68,159064,159065,159068,159070,159073,159075],{"class":70,"line":1849},[68,159066,159067],{"class":335},"pay ",[68,159069,381],{"class":331},[68,159071,159072],{"class":335}," amount ",[68,159074,788],{"class":331},[68,159076,157419],{"class":335},[68,159078,159079],{"class":70,"line":1854},[68,159080,2606],{"emptyLinePlaceholder":260},[68,159082,159083,159085,159088,159090,159093],{"class":70,"line":1860},[68,159084,1738],{"class":331},[68,159086,159087],{"class":335}," pay ",[68,159089,1917],{"class":331},[68,159091,159092],{"class":82}," 500",[68,159094,3945],{"class":335},[68,159096,159097,159100,159102],{"class":70,"line":1881},[68,159098,159099],{"class":335},"    pay ",[68,159101,150396],{"class":331},[68,159103,159104],{"class":82}," 50\n",[68,159106,159107],{"class":70,"line":1886},[68,159108,2606],{"emptyLinePlaceholder":260},[68,159110,159111,159113,159115,159117,159119,159121,159124,159126,159128,159130],{"class":70,"line":1900},[68,159112,30616],{"class":82},[68,159114,336],{"class":335},[68,159116,387],{"class":331},[68,159118,157500],{"class":78},[68,159120,1229],{"class":82},[68,159122,159123],{"class":335},"pay",[68,159125,157303],{"class":331},[68,159127,1279],{"class":82},[68,159129,157156],{"class":78},[68,159131,342],{"class":335},[14,159133,159135],{"id":159134},"_312-易错点","3.12 易错点",[23,159137,159138,159141,159144,159147,159152],{},[26,159139,159140],{},"冒号不能漏。",[26,159142,159143],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[26,159145,159146],{},"多分支判断要注意顺序。",[26,159148,159149,159150,28588],{},"判断相等用 ",[65,159151,3155],{},[26,159153,159154],{},"字符串比较区分大小写：",[58,159156,159158],{"className":30579,"code":159157,"language":30581,"meta":63,"style":63},"\"Y\" == \"y\"  # False\n",[65,159159,159160],{"__ignoreMap":63},[68,159161,159162,159165,159167,159169],{"class":70,"line":71},[68,159163,159164],{"class":78},"\"Y\"",[68,159166,101759],{"class":331},[68,159168,158149],{"class":78},[68,159170,159171],{"class":393},"  # False\n",[19,159173,159174],{},"可转换后再判断：",[58,159176,159178],{"className":30579,"code":159177,"language":30581,"meta":63,"style":63},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[65,159179,159180,159197,159210],{"__ignoreMap":63},[68,159181,159182,159185,159187,159189,159191,159194],{"class":70,"line":71},[68,159183,159184],{"class":335},"answer ",[68,159186,381],{"class":331},[68,159188,60806],{"class":82},[68,159190,336],{"class":335},[68,159192,159193],{"class":78},"\"是否继续(y\u002Fn):\"",[68,159195,159196],{"class":335},").lower()\n",[68,159198,159199,159201,159204,159206,159208],{"class":70,"line":92},[68,159200,1738],{"class":331},[68,159202,159203],{"class":335}," answer ",[68,159205,3155],{"class":331},[68,159207,158149],{"class":78},[68,159209,3945],{"class":335},[68,159211,159212,159214,159216,159219],{"class":70,"line":1387},[68,159213,31500],{"class":82},[68,159215,336],{"class":335},[68,159217,159218],{"class":78},"\"继续\"",[68,159220,342],{"class":335},[14,159222,159224],{"id":159223},"_313-本章练习","3.13 本章练习",[23,159226,159227,159230,159233,159236,159246],{},[26,159228,159229],{},"输入年龄，判断是否成年。",[26,159231,159232],{},"输入年份，判断是否为闰年。",[26,159234,159235],{},"输入三个数字，输出最大值。",[26,159237,159238,159239,159242,159243,159245],{},"写登录判断：用户名是 ",[65,159240,159241],{},"admin"," 且密码是 ",[65,159244,15289],{}," 才登录成功。",[26,159247,159248],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[250,159250,159251],{},"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":63,"searchDepth":92,"depth":92,"links":159253},[159254,159255,159256,159257,159258,159259,159264,159265,159266,159267,159268,159269,159270],{"id":157642,"depth":92,"text":157643},{"id":157695,"depth":92,"text":157696},{"id":157799,"depth":92,"text":157800},{"id":157889,"depth":92,"text":157890},{"id":158079,"depth":92,"text":158080},{"id":158202,"depth":92,"text":158203,"children":159260},[159261,159262,159263],{"id":158206,"depth":1387,"text":158207},{"id":158263,"depth":1387,"text":158264},{"id":158320,"depth":1387,"text":158321},{"id":158365,"depth":92,"text":158366},{"id":158456,"depth":92,"text":158457},{"id":158583,"depth":92,"text":158584},{"id":158713,"depth":92,"text":158714},{"id":158898,"depth":92,"text":158899},{"id":159134,"depth":92,"text":159135},{"id":159223,"depth":92,"text":159224},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157634,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159277,"title":159278,"body":159279,"description":257,"extension":258,"meta":161048,"navigation":260,"path":161049,"seo":161050,"stem":161051,"__hash__":161052},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159280,"toc":161028},[159281,159284,159288,159294,159297,159314,159318,159320,159337,159339,159384,159386,159403,159407,159410,159476,159479,159497,159501,159662,159671,159675,159679,159684,159731,159733,159739,159743,159748,159795,159797,159803,159807,159812,159848,159851,159898,159902,159908,159966,159971,160002,160007,160011,160066,160069,160141,160144,160203,160207,160210,160285,160288,160292,160398,160401,160427,160431,160443,160512,160515,160607,160611,160613,160624,160626,160756,160760,160962,160970,160974,161004,161008,161025],[10,159282,159278],{"id":159283},"_4-循环语句",[14,159285,159287],{"id":159286},"_41-为什么需要循环","4.1 为什么需要循环",[19,159289,159290,159291,159293],{},"如果要输出 1 到 100，不应该写 100 行 ",[65,159292,146616],{},"，而应该用循环。",[19,159295,159296],{},"循环适合处理重复任务：",[23,159298,159299,159302,159305,159308,159311],{},[26,159300,159301],{},"重复输出。",[26,159303,159304],{},"重复输入。",[26,159306,159307],{},"遍历数据。",[26,159309,159310],{},"持续执行菜单。",[26,159312,159313],{},"批量处理文件或数据。",[14,159315,159317],{"id":159316},"_42-while循环","4.2 while循环",[19,159319,5387],{},[58,159321,159323],{"className":30579,"code":159322,"language":30581,"meta":63,"style":63},"while 条件:\n    循环体\n",[65,159324,159325,159332],{"__ignoreMap":63},[68,159326,159327,159329],{"class":70,"line":71},[68,159328,108863],{"class":331},[68,159330,159331],{"class":335}," 条件:\n",[68,159333,159334],{"class":70,"line":92},[68,159335,159336],{"class":335},"    循环体\n",[19,159338,15340],{},[58,159340,159342],{"className":30579,"code":159341,"language":30581,"meta":63,"style":63},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[65,159343,159344,159352,159356,159368,159375],{"__ignoreMap":63},[68,159345,159346,159348,159350],{"class":70,"line":71},[68,159347,100349],{"class":335},[68,159349,381],{"class":331},[68,159351,55900],{"class":82},[68,159353,159354],{"class":70,"line":92},[68,159355,2606],{"emptyLinePlaceholder":260},[68,159357,159358,159360,159362,159364,159366],{"class":70,"line":1387},[68,159359,108863],{"class":331},[68,159361,9643],{"class":335},[68,159363,1795],{"class":331},[68,159365,2354],{"class":82},[68,159367,3945],{"class":335},[68,159369,159370,159372],{"class":70,"line":1402},[68,159371,31500],{"class":82},[68,159373,159374],{"class":335},"(i)\n",[68,159376,159377,159380,159382],{"class":70,"line":1408},[68,159378,159379],{"class":335},"    i ",[68,159381,9682],{"class":331},[68,159383,55900],{"class":82},[19,159385,81130],{},[23,159387,159388,159394,159397,159400],{},[26,159389,159390,159391,28588],{},"判断条件 ",[65,159392,159393],{},"i \u003C= 5",[26,159395,159396],{},"条件成立，执行循环体。",[26,159398,159399],{},"执行完后回到条件判断。",[26,159401,159402],{},"条件不成立，退出循环。",[14,159404,159406],{"id":159405},"_43-while累加","4.3 while累加",[19,159408,159409],{},"计算 1 到 100 的和：",[58,159411,159413],{"className":30579,"code":159412,"language":30581,"meta":63,"style":63},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[65,159414,159415,159423,159431,159435,159447,159457,159465,159469],{"__ignoreMap":63},[68,159416,159417,159419,159421],{"class":70,"line":71},[68,159418,100349],{"class":335},[68,159420,381],{"class":331},[68,159422,55900],{"class":82},[68,159424,159425,159427,159429],{"class":70,"line":92},[68,159426,157404],{"class":335},[68,159428,381],{"class":331},[68,159430,47534],{"class":82},[68,159432,159433],{"class":70,"line":1387},[68,159434,2606],{"emptyLinePlaceholder":260},[68,159436,159437,159439,159441,159443,159445],{"class":70,"line":1402},[68,159438,108863],{"class":331},[68,159440,9643],{"class":335},[68,159442,1795],{"class":331},[68,159444,5959],{"class":82},[68,159446,3945],{"class":335},[68,159448,159449,159452,159454],{"class":70,"line":1408},[68,159450,159451],{"class":335},"    total ",[68,159453,9682],{"class":331},[68,159455,159456],{"class":335}," i\n",[68,159458,159459,159461,159463],{"class":70,"line":1422},[68,159460,159379],{"class":335},[68,159462,9682],{"class":331},[68,159464,55900],{"class":82},[68,159466,159467],{"class":70,"line":1428},[68,159468,2606],{"emptyLinePlaceholder":260},[68,159470,159471,159473],{"class":70,"line":1519},[68,159472,30616],{"class":82},[68,159474,159475],{"class":335},"(total)\n",[19,159477,159478],{},"核心思想：",[23,159480,159481,159486,159491],{},[26,159482,159483,159485],{},[65,159484,774],{}," 控制循环次数。",[26,159487,159488,159490],{},[65,159489,157505],{}," 保存累加结果。",[26,159492,159493,159494,159496],{},"每轮循环都要更新 ",[65,159495,774],{},"，否则可能死循环。",[14,159498,159500],{"id":159499},"_44-while猜数字","4.4 while猜数字",[58,159502,159504],{"className":30579,"code":159503,"language":30581,"meta":63,"style":63},"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",[65,159505,159506,159512,159516,159533,159541,159545,159553,159573,159582,159586,159598,159609,159619,159630,159636,159658],{"__ignoreMap":63},[68,159507,159508,159510],{"class":70,"line":71},[68,159509,30593],{"class":331},[68,159511,45529],{"class":335},[68,159513,159514],{"class":70,"line":92},[68,159515,2606],{"emptyLinePlaceholder":260},[68,159517,159518,159520,159522,159525,159527,159529,159531],{"class":70,"line":1387},[68,159519,159184],{"class":335},[68,159521,381],{"class":331},[68,159523,159524],{"class":335}," random.randint(",[68,159526,551],{"class":82},[68,159528,12640],{"class":335},[68,159530,644],{"class":82},[68,159532,342],{"class":335},[68,159534,159535,159537,159539],{"class":70,"line":1402},[68,159536,146835],{"class":335},[68,159538,381],{"class":331},[68,159540,47534],{"class":82},[68,159542,159543],{"class":70,"line":1408},[68,159544,2606],{"emptyLinePlaceholder":260},[68,159546,159547,159549,159551],{"class":70,"line":1422},[68,159548,108863],{"class":331},[68,159550,95493],{"class":82},[68,159552,3945],{"class":335},[68,159554,159555,159558,159560,159562,159564,159566,159568,159571],{"class":70,"line":1428},[68,159556,159557],{"class":335},"    guess ",[68,159559,381],{"class":331},[68,159561,2588],{"class":82},[68,159563,336],{"class":335},[68,159565,54022],{"class":82},[68,159567,336],{"class":335},[68,159569,159570],{"class":78},"\"请输入1到100之间的数字:\"",[68,159572,30698],{"class":335},[68,159574,159575,159578,159580],{"class":70,"line":1519},[68,159576,159577],{"class":335},"    count ",[68,159579,9682],{"class":331},[68,159581,55900],{"class":82},[68,159583,159584],{"class":70,"line":1525},[68,159585,2606],{"emptyLinePlaceholder":260},[68,159587,159588,159590,159593,159595],{"class":70,"line":1537},[68,159589,3307],{"class":331},[68,159591,159592],{"class":335}," guess ",[68,159594,1293],{"class":331},[68,159596,159597],{"class":335}," answer:\n",[68,159599,159600,159602,159604,159607],{"class":70,"line":1819},[68,159601,32652],{"class":82},[68,159603,336],{"class":335},[68,159605,159606],{"class":78},"\"猜大了\"",[68,159608,342],{"class":335},[68,159610,159611,159613,159615,159617],{"class":70,"line":1824},[68,159612,39494],{"class":331},[68,159614,159592],{"class":335},[68,159616,1243],{"class":331},[68,159618,159597],{"class":335},[68,159620,159621,159623,159625,159628],{"class":70,"line":1830},[68,159622,32652],{"class":82},[68,159624,336],{"class":335},[68,159626,159627],{"class":78},"\"猜小了\"",[68,159629,342],{"class":335},[68,159631,159632,159634],{"class":70,"line":1835},[68,159633,158166],{"class":331},[68,159635,3945],{"class":335},[68,159637,159638,159640,159642,159644,159647,159649,159651,159653,159656],{"class":70,"line":1849},[68,159639,32652],{"class":82},[68,159641,336],{"class":335},[68,159643,387],{"class":331},[68,159645,159646],{"class":78},"\"猜对了，一共猜了",[68,159648,1229],{"class":82},[68,159650,84635],{"class":335},[68,159652,1279],{"class":82},[68,159654,159655],{"class":78},"次\"",[68,159657,342],{"class":335},[68,159659,159660],{"class":70,"line":1854},[68,159661,31828],{"class":331},[19,159663,159664,159667,159668,159670],{},[65,159665,159666],{},"while True"," 表示无限循环，通常配合 ",[65,159669,2259],{}," 使用。",[14,159672,159674],{"id":159673},"_45-break和continue","4.5 break和continue",[301,159676,159678],{"id":159677},"_451-break","4.5.1 break",[19,159680,159681,159683],{},[65,159682,2259],{}," 直接结束整个循环。",[58,159685,159687],{"className":30579,"code":159686,"language":30581,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[65,159688,159689,159709,159721,159725],{"__ignoreMap":63},[68,159690,159691,159693,159695,159697,159699,159701,159703,159705,159707],{"class":70,"line":71},[68,159692,3231],{"class":331},[68,159694,9643],{"class":335},[68,159696,26247],{"class":331},[68,159698,32644],{"class":82},[68,159700,336],{"class":335},[68,159702,551],{"class":82},[68,159704,12640],{"class":335},[68,159706,677],{"class":82},[68,159708,30987],{"class":335},[68,159710,159711,159713,159715,159717,159719],{"class":70,"line":92},[68,159712,3307],{"class":331},[68,159714,9643],{"class":335},[68,159716,3155],{"class":331},[68,159718,78271],{"class":82},[68,159720,3945],{"class":335},[68,159722,159723],{"class":70,"line":1387},[68,159724,31828],{"class":331},[68,159726,159727,159729],{"class":70,"line":1402},[68,159728,31500],{"class":82},[68,159730,159374],{"class":335},[19,159732,146601],{},[58,159734,159737],{"className":159735,"code":159736,"language":5393,"meta":63},[5391],"1\n2\n",[65,159738,159736],{"__ignoreMap":63},[301,159740,159742],{"id":159741},"_452-continue","4.5.2 continue",[19,159744,159745,159747],{},[65,159746,154816],{}," 跳过本轮剩余代码，进入下一轮循环。",[58,159749,159751],{"className":30579,"code":159750,"language":30581,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[65,159752,159753,159773,159785,159789],{"__ignoreMap":63},[68,159754,159755,159757,159759,159761,159763,159765,159767,159769,159771],{"class":70,"line":71},[68,159756,3231],{"class":331},[68,159758,9643],{"class":335},[68,159760,26247],{"class":331},[68,159762,32644],{"class":82},[68,159764,336],{"class":335},[68,159766,551],{"class":82},[68,159768,12640],{"class":335},[68,159770,677],{"class":82},[68,159772,30987],{"class":335},[68,159774,159775,159777,159779,159781,159783],{"class":70,"line":92},[68,159776,3307],{"class":331},[68,159778,9643],{"class":335},[68,159780,3155],{"class":331},[68,159782,78271],{"class":82},[68,159784,3945],{"class":335},[68,159786,159787],{"class":70,"line":1387},[68,159788,148656],{"class":331},[68,159790,159791,159793],{"class":70,"line":1402},[68,159792,31500],{"class":82},[68,159794,159374],{"class":335},[19,159796,146601],{},[58,159798,159801],{"className":159799,"code":159800,"language":5393,"meta":63},[5391],"1\n2\n4\n5\n",[65,159802,159800],{"__ignoreMap":63},[14,159804,159806],{"id":159805},"_46-for循环","4.6 for循环",[19,159808,159809,159811],{},[65,159810,3231],{}," 常用于遍历序列。",[58,159813,159815],{"className":30579,"code":159814,"language":30581,"meta":63,"style":63},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[65,159816,159817,159826,159830,159841],{"__ignoreMap":63},[68,159818,159819,159821,159823],{"class":70,"line":71},[68,159820,146680],{"class":335},[68,159822,381],{"class":331},[68,159824,159825],{"class":78}," \"python\"\n",[68,159827,159828],{"class":70,"line":92},[68,159829,2606],{"emptyLinePlaceholder":260},[68,159831,159832,159834,159837,159839],{"class":70,"line":1387},[68,159833,3231],{"class":331},[68,159835,159836],{"class":335}," ch ",[68,159838,26247],{"class":331},[68,159840,158543],{"class":335},[68,159842,159843,159845],{"class":70,"line":1402},[68,159844,31500],{"class":82},[68,159846,159847],{"class":335},"(ch)\n",[19,159849,159850],{},"遍历列表：",[58,159852,159854],{"className":30579,"code":159853,"language":30581,"meta":63,"style":63},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[65,159855,159856,159878,159882,159892],{"__ignoreMap":63},[68,159857,159858,159861,159863,159865,159867,159869,159871,159873,159876],{"class":70,"line":71},[68,159859,159860],{"class":335},"students ",[68,159862,381],{"class":331},[68,159864,52427],{"class":335},[68,159866,150032],{"class":78},[68,159868,12640],{"class":335},[68,159870,151080],{"class":78},[68,159872,12640],{"class":335},[68,159874,159875],{"class":78},"\"小刚\"",[68,159877,33447],{"class":335},[68,159879,159880],{"class":70,"line":92},[68,159881,2606],{"emptyLinePlaceholder":260},[68,159883,159884,159886,159888,159890],{"class":70,"line":1387},[68,159885,3231],{"class":331},[68,159887,152281],{"class":335},[68,159889,26247],{"class":331},[68,159891,152286],{"class":335},[68,159893,159894,159896],{"class":70,"line":1402},[68,159895,31500],{"class":82},[68,159897,150186],{"class":335},[14,159899,159901],{"id":159900},"_47-range函数","4.7 range函数",[19,159903,159904,159907],{},[65,159905,159906],{},"range()"," 用于生成整数序列。",[58,159909,159911],{"className":30579,"code":159910,"language":30581,"meta":63,"style":63},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[65,159912,159913,159927,159945],{"__ignoreMap":63},[68,159914,159915,159917,159919,159921,159924],{"class":70,"line":71},[68,159916,33617],{"class":82},[68,159918,336],{"class":335},[68,159920,652],{"class":82},[68,159922,159923],{"class":335},")          ",[68,159925,159926],{"class":393},"# 0,1,2,3,4\n",[68,159928,159929,159931,159933,159935,159937,159939,159942],{"class":70,"line":92},[68,159930,33617],{"class":82},[68,159932,336],{"class":335},[68,159934,551],{"class":82},[68,159936,12640],{"class":335},[68,159938,652],{"class":82},[68,159940,159941],{"class":335},")       ",[68,159943,159944],{"class":393},"# 1,2,3,4\n",[68,159946,159947,159949,159951,159953,159955,159957,159959,159961,159963],{"class":70,"line":1387},[68,159948,33617],{"class":82},[68,159950,336],{"class":335},[68,159952,551],{"class":82},[68,159954,12640],{"class":335},[68,159956,779],{"class":82},[68,159958,12640],{"class":335},[68,159960,412],{"class":82},[68,159962,155805],{"class":335},[68,159964,159965],{"class":393},"# 1,3,5,7,9\n",[19,159967,159968,159969,24822],{},"配合 ",[65,159970,3231],{},[58,159972,159974],{"className":30579,"code":159973,"language":30581,"meta":63,"style":63},"for i in range(1, 6):\n    print(i)\n",[65,159975,159976,159996],{"__ignoreMap":63},[68,159977,159978,159980,159982,159984,159986,159988,159990,159992,159994],{"class":70,"line":71},[68,159979,3231],{"class":331},[68,159981,9643],{"class":335},[68,159983,26247],{"class":331},[68,159985,32644],{"class":82},[68,159987,336],{"class":335},[68,159989,551],{"class":82},[68,159991,12640],{"class":335},[68,159993,677],{"class":82},[68,159995,30987],{"class":335},[68,159997,159998,160000],{"class":70,"line":92},[68,159999,31500],{"class":82},[68,160001,159374],{"class":335},[19,160003,9230,160004,160006],{},[65,160005,33617],{}," 的结束值不包含在内。",[14,160008,160010],{"id":160009},"_48-for循环求和","4.8 for循环求和",[58,160012,160014],{"className":30579,"code":160013,"language":30581,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[65,160015,160016,160024,160028,160048,160056,160060],{"__ignoreMap":63},[68,160017,160018,160020,160022],{"class":70,"line":71},[68,160019,157404],{"class":335},[68,160021,381],{"class":331},[68,160023,47534],{"class":82},[68,160025,160026],{"class":70,"line":92},[68,160027,2606],{"emptyLinePlaceholder":260},[68,160029,160030,160032,160034,160036,160038,160040,160042,160044,160046],{"class":70,"line":1387},[68,160031,3231],{"class":331},[68,160033,9643],{"class":335},[68,160035,26247],{"class":331},[68,160037,32644],{"class":82},[68,160039,336],{"class":335},[68,160041,551],{"class":82},[68,160043,12640],{"class":335},[68,160045,670],{"class":82},[68,160047,30987],{"class":335},[68,160049,160050,160052,160054],{"class":70,"line":1402},[68,160051,159451],{"class":335},[68,160053,9682],{"class":331},[68,160055,159456],{"class":335},[68,160057,160058],{"class":70,"line":1408},[68,160059,2606],{"emptyLinePlaceholder":260},[68,160061,160062,160064],{"class":70,"line":1422},[68,160063,30616],{"class":82},[68,160065,159475],{"class":335},[19,160067,160068],{},"求偶数和：",[58,160070,160072],{"className":30579,"code":160071,"language":30581,"meta":63,"style":63},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[65,160073,160074,160082,160086,160106,160122,160131,160135],{"__ignoreMap":63},[68,160075,160076,160078,160080],{"class":70,"line":71},[68,160077,157404],{"class":335},[68,160079,381],{"class":331},[68,160081,47534],{"class":82},[68,160083,160084],{"class":70,"line":92},[68,160085,2606],{"emptyLinePlaceholder":260},[68,160087,160088,160090,160092,160094,160096,160098,160100,160102,160104],{"class":70,"line":1387},[68,160089,3231],{"class":331},[68,160091,9643],{"class":335},[68,160093,26247],{"class":331},[68,160095,32644],{"class":82},[68,160097,336],{"class":335},[68,160099,551],{"class":82},[68,160101,12640],{"class":335},[68,160103,670],{"class":82},[68,160105,30987],{"class":335},[68,160107,160108,160110,160112,160114,160116,160118,160120],{"class":70,"line":1402},[68,160109,3307],{"class":331},[68,160111,9643],{"class":335},[68,160113,661],{"class":331},[68,160115,14960],{"class":82},[68,160117,101759],{"class":331},[68,160119,4299],{"class":82},[68,160121,3945],{"class":335},[68,160123,160124,160127,160129],{"class":70,"line":1408},[68,160125,160126],{"class":335},"        total ",[68,160128,9682],{"class":331},[68,160130,159456],{"class":335},[68,160132,160133],{"class":70,"line":1422},[68,160134,2606],{"emptyLinePlaceholder":260},[68,160136,160137,160139],{"class":70,"line":1428},[68,160138,30616],{"class":82},[68,160140,159475],{"class":335},[19,160142,160143],{},"也可以：",[58,160145,160147],{"className":30579,"code":160146,"language":30581,"meta":63,"style":63},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[65,160148,160149,160157,160161,160185,160193,160197],{"__ignoreMap":63},[68,160150,160151,160153,160155],{"class":70,"line":71},[68,160152,157404],{"class":335},[68,160154,381],{"class":331},[68,160156,47534],{"class":82},[68,160158,160159],{"class":70,"line":92},[68,160160,2606],{"emptyLinePlaceholder":260},[68,160162,160163,160165,160167,160169,160171,160173,160175,160177,160179,160181,160183],{"class":70,"line":1387},[68,160164,3231],{"class":331},[68,160166,9643],{"class":335},[68,160168,26247],{"class":331},[68,160170,32644],{"class":82},[68,160172,336],{"class":335},[68,160174,412],{"class":82},[68,160176,12640],{"class":335},[68,160178,670],{"class":82},[68,160180,12640],{"class":335},[68,160182,412],{"class":82},[68,160184,30987],{"class":335},[68,160186,160187,160189,160191],{"class":70,"line":1402},[68,160188,159451],{"class":335},[68,160190,9682],{"class":331},[68,160192,159456],{"class":335},[68,160194,160195],{"class":70,"line":1408},[68,160196,2606],{"emptyLinePlaceholder":260},[68,160198,160199,160201],{"class":70,"line":1422},[68,160200,30616],{"class":82},[68,160202,159475],{"class":335},[14,160204,160206],{"id":160205},"_49-循环嵌套","4.9 循环嵌套",[19,160208,160209],{},"嵌套循环就是循环里面再写循环。",[58,160211,160213],{"className":30579,"code":160212,"language":30581,"meta":63,"style":63},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[65,160214,160215,160235,160255],{"__ignoreMap":63},[68,160216,160217,160219,160221,160223,160225,160227,160229,160231,160233],{"class":70,"line":71},[68,160218,3231],{"class":331},[68,160220,9643],{"class":335},[68,160222,26247],{"class":331},[68,160224,32644],{"class":82},[68,160226,336],{"class":335},[68,160228,551],{"class":82},[68,160230,12640],{"class":335},[68,160232,626],{"class":82},[68,160234,30987],{"class":335},[68,160236,160237,160239,160241,160243,160245,160247,160249,160251,160253],{"class":70,"line":92},[68,160238,3407],{"class":331},[68,160240,9705],{"class":335},[68,160242,26247],{"class":331},[68,160244,32644],{"class":82},[68,160246,336],{"class":335},[68,160248,551],{"class":82},[68,160250,12640],{"class":335},[68,160252,626],{"class":82},[68,160254,30987],{"class":335},[68,160256,160257,160259,160261,160263,160266,160268,160270,160272,160275,160277,160279,160281,160283],{"class":70,"line":1387},[68,160258,32652],{"class":82},[68,160260,336],{"class":335},[68,160262,387],{"class":331},[68,160264,160265],{"class":78},"\"i=",[68,160267,1229],{"class":82},[68,160269,774],{"class":335},[68,160271,1279],{"class":82},[68,160273,160274],{"class":78},", j=",[68,160276,1229],{"class":82},[68,160278,800],{"class":335},[68,160280,1279],{"class":82},[68,160282,584],{"class":78},[68,160284,342],{"class":335},[19,160286,160287],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160289,160291],{"id":160290},"_410-九九乘法表","4.10 九九乘法表",[58,160293,160295],{"className":30579,"code":160294,"language":30581,"meta":63,"style":63},"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",[65,160296,160297,160317,160340,160392],{"__ignoreMap":63},[68,160298,160299,160301,160303,160305,160307,160309,160311,160313,160315],{"class":70,"line":71},[68,160300,3231],{"class":331},[68,160302,9643],{"class":335},[68,160304,26247],{"class":331},[68,160306,32644],{"class":82},[68,160308,336],{"class":335},[68,160310,551],{"class":82},[68,160312,12640],{"class":335},[68,160314,779],{"class":82},[68,160316,30987],{"class":335},[68,160318,160319,160321,160323,160325,160327,160329,160331,160334,160336,160338],{"class":70,"line":92},[68,160320,3407],{"class":331},[68,160322,9705],{"class":335},[68,160324,26247],{"class":331},[68,160326,32644],{"class":82},[68,160328,336],{"class":335},[68,160330,551],{"class":82},[68,160332,160333],{"class":335},", i ",[68,160335,814],{"class":331},[68,160337,25322],{"class":82},[68,160339,30987],{"class":335},[68,160341,160342,160344,160346,160348,160350,160352,160354,160356,160358,160360,160362,160364,160366,160368,160370,160372,160374,160376,160378,160380,160382,160384,160386,160388,160390],{"class":70,"line":1387},[68,160343,32652],{"class":82},[68,160345,336],{"class":335},[68,160347,387],{"class":331},[68,160349,584],{"class":78},[68,160351,1229],{"class":82},[68,160353,800],{"class":335},[68,160355,1279],{"class":82},[68,160357,788],{"class":78},[68,160359,1229],{"class":82},[68,160361,774],{"class":335},[68,160363,1279],{"class":82},[68,160365,381],{"class":78},[68,160367,1229],{"class":82},[68,160369,100349],{"class":335},[68,160371,788],{"class":331},[68,160373,3616],{"class":335},[68,160375,1279],{"class":82},[68,160377,584],{"class":78},[68,160379,12640],{"class":335},[68,160381,46002],{"class":5421},[68,160383,381],{"class":331},[68,160385,584],{"class":78},[68,160387,1438],{"class":82},[68,160389,584],{"class":78},[68,160391,342],{"class":335},[68,160393,160394,160396],{"class":70,"line":1402},[68,160395,31500],{"class":82},[68,160397,2182],{"class":335},[19,160399,160400],{},"关键点：",[23,160402,160403,160409,160415,160421],{},[26,160404,160405,160406,160408],{},"外层 ",[65,160407,774],{}," 控制行。",[26,160410,160411,160412,160414],{},"内层 ",[65,160413,800],{}," 控制列。",[26,160416,160417,160418,160420],{},"每行结束后用 ",[65,160419,146616],{}," 换行。",[26,160422,160423,160426],{},[65,160424,160425],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160428,160430],{"id":160429},"_411-循环else","4.11 循环else",[19,160432,160433,160434,160436,160437,160439,160440,160442],{},"Python 的循环可以带 ",[65,160435,1908],{},"。当循环正常结束时执行 ",[65,160438,1908],{},"，如果被 ",[65,160441,2259],{}," 打断，则不执行。",[58,160444,160446],{"className":30579,"code":160445,"language":30581,"meta":63,"style":63},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[65,160447,160448,160468,160480,160491,160495,160501],{"__ignoreMap":63},[68,160449,160450,160452,160454,160456,160458,160460,160462,160464,160466],{"class":70,"line":71},[68,160451,3231],{"class":331},[68,160453,9643],{"class":335},[68,160455,26247],{"class":331},[68,160457,32644],{"class":82},[68,160459,336],{"class":335},[68,160461,551],{"class":82},[68,160463,12640],{"class":335},[68,160465,677],{"class":82},[68,160467,30987],{"class":335},[68,160469,160470,160472,160474,160476,160478],{"class":70,"line":92},[68,160471,3307],{"class":331},[68,160473,9643],{"class":335},[68,160475,3155],{"class":331},[68,160477,2244],{"class":82},[68,160479,3945],{"class":335},[68,160481,160482,160484,160486,160489],{"class":70,"line":1387},[68,160483,32652],{"class":82},[68,160485,336],{"class":335},[68,160487,160488],{"class":78},"\"找到了\"",[68,160490,342],{"class":335},[68,160492,160493],{"class":70,"line":1402},[68,160494,31828],{"class":331},[68,160496,160497,160499],{"class":70,"line":1408},[68,160498,1908],{"class":331},[68,160500,3945],{"class":335},[68,160502,160503,160505,160507,160510],{"class":70,"line":1422},[68,160504,31500],{"class":82},[68,160506,336],{"class":335},[68,160508,160509],{"class":78},"\"没找到\"",[68,160511,342],{"class":335},[19,160513,160514],{},"常用于搜索。",[58,160516,160518],{"className":30579,"code":160517,"language":30581,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[65,160519,160520,160541,160550,160554,160566,160577,160587,160591,160597],{"__ignoreMap":63},[68,160521,160522,160525,160527,160529,160531,160533,160535,160537,160539],{"class":70,"line":71},[68,160523,160524],{"class":335},"names ",[68,160526,381],{"class":331},[68,160528,52427],{"class":335},[68,160530,150032],{"class":78},[68,160532,12640],{"class":335},[68,160534,151080],{"class":78},[68,160536,12640],{"class":335},[68,160538,159875],{"class":78},[68,160540,33447],{"class":335},[68,160542,160543,160545,160547],{"class":70,"line":92},[68,160544,111778],{"class":335},[68,160546,381],{"class":331},[68,160548,160549],{"class":78}," \"小李\"\n",[68,160551,160552],{"class":70,"line":1387},[68,160553,2606],{"emptyLinePlaceholder":260},[68,160555,160556,160558,160561,160563],{"class":70,"line":1402},[68,160557,3231],{"class":331},[68,160559,160560],{"class":335}," name ",[68,160562,26247],{"class":331},[68,160564,160565],{"class":335}," names:\n",[68,160567,160568,160570,160572,160574],{"class":70,"line":1408},[68,160569,3307],{"class":331},[68,160571,160560],{"class":335},[68,160573,3155],{"class":331},[68,160575,160576],{"class":335}," target:\n",[68,160578,160579,160581,160583,160585],{"class":70,"line":1422},[68,160580,32652],{"class":82},[68,160582,336],{"class":335},[68,160584,160488],{"class":78},[68,160586,342],{"class":335},[68,160588,160589],{"class":70,"line":1428},[68,160590,31828],{"class":331},[68,160592,160593,160595],{"class":70,"line":1519},[68,160594,1908],{"class":331},[68,160596,3945],{"class":335},[68,160598,160599,160601,160603,160605],{"class":70,"line":1525},[68,160600,31500],{"class":82},[68,160602,336],{"class":335},[68,160604,160509],{"class":78},[68,160606,342],{"class":335},[14,160608,160610],{"id":160609},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160612,123489],{},[23,160614,160615,160618,160621],{},[26,160616,160617],{},"用户最多输入 3 次密码。",[26,160619,160620],{},"密码正确则登录成功。",[26,160622,160623],{},"3 次都错误则锁定账号。",[19,160625,10240],{},[58,160627,160629],{"className":30579,"code":160628,"language":30581,"meta":63,"style":63},"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",[65,160630,160631,160641,160645,160661,160677,160681,160693,160704,160708,160714,160739,160745],{"__ignoreMap":63},[68,160632,160633,160636,160638],{"class":70,"line":71},[68,160634,160635],{"class":335},"password ",[68,160637,381],{"class":331},[68,160639,160640],{"class":78}," \"123456\"\n",[68,160642,160643],{"class":70,"line":92},[68,160644,2606],{"emptyLinePlaceholder":260},[68,160646,160647,160649,160651,160653,160655,160657,160659],{"class":70,"line":1387},[68,160648,3231],{"class":331},[68,160650,9643],{"class":335},[68,160652,26247],{"class":331},[68,160654,32644],{"class":82},[68,160656,336],{"class":335},[68,160658,406],{"class":82},[68,160660,30987],{"class":335},[68,160662,160663,160666,160668,160670,160672,160675],{"class":70,"line":1402},[68,160664,160665],{"class":335},"    user_password ",[68,160667,381],{"class":331},[68,160669,60806],{"class":82},[68,160671,336],{"class":335},[68,160673,160674],{"class":78},"\"请输入密码:\"",[68,160676,342],{"class":335},[68,160678,160679],{"class":70,"line":1408},[68,160680,2606],{"emptyLinePlaceholder":260},[68,160682,160683,160685,160688,160690],{"class":70,"line":1422},[68,160684,3307],{"class":331},[68,160686,160687],{"class":335}," user_password ",[68,160689,3155],{"class":331},[68,160691,160692],{"class":335}," password:\n",[68,160694,160695,160697,160699,160702],{"class":70,"line":1428},[68,160696,32652],{"class":82},[68,160698,336],{"class":335},[68,160700,160701],{"class":78},"\"登录成功\"",[68,160703,342],{"class":335},[68,160705,160706],{"class":70,"line":1519},[68,160707,31828],{"class":331},[68,160709,160710,160712],{"class":70,"line":1525},[68,160711,158166],{"class":331},[68,160713,3945],{"class":335},[68,160715,160716,160718,160720,160722,160725,160728,160730,160732,160734,160737],{"class":70,"line":1537},[68,160717,32652],{"class":82},[68,160719,336],{"class":335},[68,160721,387],{"class":331},[68,160723,160724],{"class":78},"\"密码错误，还剩",[68,160726,160727],{"class":82},"{2",[68,160729,52472],{"class":331},[68,160731,3238],{"class":335},[68,160733,1279],{"class":82},[68,160735,160736],{"class":78},"次机会\"",[68,160738,342],{"class":335},[68,160740,160741,160743],{"class":70,"line":1819},[68,160742,1908],{"class":331},[68,160744,3945],{"class":335},[68,160746,160747,160749,160751,160754],{"class":70,"line":1824},[68,160748,31500],{"class":82},[68,160750,336],{"class":335},[68,160752,160753],{"class":78},"\"账号已锁定\"",[68,160755,342],{"class":335},[14,160757,160759],{"id":160758},"_413-小案例菜单程序","4.13 小案例：菜单程序",[58,160761,160763],{"className":30579,"code":160762,"language":30581,"meta":63,"style":63},"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",[65,160764,160765,160773,160784,160795,160806,160817,160828,160832,160847,160851,160863,160874,160886,160897,160909,160920,160932,160942,160946,160952],{"__ignoreMap":63},[68,160766,160767,160769,160771],{"class":70,"line":71},[68,160768,108863],{"class":331},[68,160770,95493],{"class":82},[68,160772,3945],{"class":335},[68,160774,160775,160777,160779,160782],{"class":70,"line":92},[68,160776,31500],{"class":82},[68,160778,336],{"class":335},[68,160780,160781],{"class":78},"\"====== 菜单 ======\"",[68,160783,342],{"class":335},[68,160785,160786,160788,160790,160793],{"class":70,"line":1387},[68,160787,31500],{"class":82},[68,160789,336],{"class":335},[68,160791,160792],{"class":78},"\"1. 查询余额\"",[68,160794,342],{"class":335},[68,160796,160797,160799,160801,160804],{"class":70,"line":1402},[68,160798,31500],{"class":82},[68,160800,336],{"class":335},[68,160802,160803],{"class":78},"\"2. 存款\"",[68,160805,342],{"class":335},[68,160807,160808,160810,160812,160815],{"class":70,"line":1408},[68,160809,31500],{"class":82},[68,160811,336],{"class":335},[68,160813,160814],{"class":78},"\"3. 取款\"",[68,160816,342],{"class":335},[68,160818,160819,160821,160823,160826],{"class":70,"line":1422},[68,160820,31500],{"class":82},[68,160822,336],{"class":335},[68,160824,160825],{"class":78},"\"0. 退出\"",[68,160827,342],{"class":335},[68,160829,160830],{"class":70,"line":1428},[68,160831,2606],{"emptyLinePlaceholder":260},[68,160833,160834,160837,160839,160841,160843,160845],{"class":70,"line":1519},[68,160835,160836],{"class":335},"    choice ",[68,160838,381],{"class":331},[68,160840,60806],{"class":82},[68,160842,336],{"class":335},[68,160844,153217],{"class":78},[68,160846,342],{"class":335},[68,160848,160849],{"class":70,"line":1525},[68,160850,2606],{"emptyLinePlaceholder":260},[68,160852,160853,160855,160857,160859,160861],{"class":70,"line":1537},[68,160854,3307],{"class":331},[68,160856,153230],{"class":335},[68,160858,3155],{"class":331},[68,160860,153235],{"class":78},[68,160862,3945],{"class":335},[68,160864,160865,160867,160869,160872],{"class":70,"line":1819},[68,160866,32652],{"class":82},[68,160868,336],{"class":335},[68,160870,160871],{"class":78},"\"余额为1000元\"",[68,160873,342],{"class":335},[68,160875,160876,160878,160880,160882,160884],{"class":70,"line":1824},[68,160877,39494],{"class":331},[68,160879,153230],{"class":335},[68,160881,3155],{"class":331},[68,160883,153254],{"class":78},[68,160885,3945],{"class":335},[68,160887,160888,160890,160892,160895],{"class":70,"line":1830},[68,160889,32652],{"class":82},[68,160891,336],{"class":335},[68,160893,160894],{"class":78},"\"存款功能\"",[68,160896,342],{"class":335},[68,160898,160899,160901,160903,160905,160907],{"class":70,"line":1835},[68,160900,39494],{"class":331},[68,160902,153230],{"class":335},[68,160904,3155],{"class":331},[68,160906,153272],{"class":78},[68,160908,3945],{"class":335},[68,160910,160911,160913,160915,160918],{"class":70,"line":1849},[68,160912,32652],{"class":82},[68,160914,336],{"class":335},[68,160916,160917],{"class":78},"\"取款功能\"",[68,160919,342],{"class":335},[68,160921,160922,160924,160926,160928,160930],{"class":70,"line":1854},[68,160923,39494],{"class":331},[68,160925,153230],{"class":335},[68,160927,3155],{"class":331},[68,160929,153326],{"class":78},[68,160931,3945],{"class":335},[68,160933,160934,160936,160938,160940],{"class":70,"line":1860},[68,160935,32652],{"class":82},[68,160937,336],{"class":335},[68,160939,153337],{"class":78},[68,160941,342],{"class":335},[68,160943,160944],{"class":70,"line":1881},[68,160945,31828],{"class":331},[68,160947,160948,160950],{"class":70,"line":1886},[68,160949,158166],{"class":331},[68,160951,3945],{"class":335},[68,160953,160954,160956,160958,160960],{"class":70,"line":1900},[68,160955,32652],{"class":82},[68,160957,336],{"class":335},[68,160959,153358],{"class":78},[68,160961,342],{"class":335},[19,160963,160964,160965,160967,160968,28588],{},"菜单类程序通常使用 ",[65,160966,159666],{},"，用户选择退出时 ",[65,160969,2259],{},[14,160971,160973],{"id":160972},"_414-易错点","4.14 易错点",[23,160975,160976,160981,160987,160995,161001],{},[26,160977,160978,160980],{},[65,160979,108863],{}," 循环必须更新控制变量。",[26,160982,160983,160986],{},[65,160984,160985],{},"range(1, 10)"," 不包含 10。",[26,160988,160989,160991,160992,160994],{},[65,160990,2259],{}," 结束整个循环，",[65,160993,154816],{}," 只跳过本轮。",[26,160996,160997,160998,161000],{},"嵌套循环中，",[65,160999,2259],{}," 只跳出当前所在的一层循环。",[26,161002,161003],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161005,161007],{"id":161006},"_415-本章练习","4.15 本章练习",[23,161009,161010,161013,161016,161019,161022],{},[26,161011,161012],{},"输出 1 到 100。",[26,161014,161015],{},"计算 1 到 100 的偶数和。",[26,161017,161018],{},"输出 100 以内能被 3 和 5 同时整除的数。",[26,161020,161021],{},"编写猜数字游戏，限制最多猜 7 次。",[26,161023,161024],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[250,161026,161027],{},"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":63,"searchDepth":92,"depth":92,"links":161029},[161030,161031,161032,161033,161034,161038,161039,161040,161041,161042,161043,161044,161045,161046,161047],{"id":159286,"depth":92,"text":159287},{"id":159316,"depth":92,"text":159317},{"id":159405,"depth":92,"text":159406},{"id":159499,"depth":92,"text":159500},{"id":159673,"depth":92,"text":159674,"children":161035},[161036,161037],{"id":159677,"depth":1387,"text":159678},{"id":159741,"depth":1387,"text":159742},{"id":159805,"depth":92,"text":159806},{"id":159900,"depth":92,"text":159901},{"id":160009,"depth":92,"text":160010},{"id":160205,"depth":92,"text":160206},{"id":160290,"depth":92,"text":160291},{"id":160429,"depth":92,"text":160430},{"id":160609,"depth":92,"text":160610},{"id":160758,"depth":92,"text":160759},{"id":160972,"depth":92,"text":160973},{"id":161006,"depth":92,"text":161007},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159278,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161054,"title":161055,"body":161056,"description":257,"extension":258,"meta":163061,"navigation":260,"path":163062,"seo":163063,"stem":163064,"__hash__":163065},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161057,"toc":163041},[161058,161061,161065,161068,161071,161085,161088,161102,161106,161108,161127,161129,161176,161178,161192,161196,161270,161273,161277,161280,161339,161347,161350,161403,161406,161410,161415,161470,161478,161528,161532,161537,161545,161644,161650,161654,161659,161662,161673,161714,161727,161731,161734,161770,161773,161786,161789,161849,161853,161857,161860,161911,161915,161918,161965,161971,162037,162040,162044,162047,162163,162166,162170,162173,162279,162283,162286,162324,162327,162369,162372,162432,162435,162439,162903,162906,162910,162937,162943,163004,163008,163038],[10,161059,161055],{"id":161060},"_5-函数基础",[14,161062,161064],{"id":161063},"_51-为什么需要函数","5.1 为什么需要函数",[19,161066,161067],{},"函数用于封装一段可以重复使用的代码。",[19,161069,161070],{},"不使用函数的问题：",[23,161072,161073,161076,161079,161082],{},[26,161074,161075],{},"重复代码多。",[26,161077,161078],{},"修改逻辑时容易漏改。",[26,161080,161081],{},"主流程不清晰。",[26,161083,161084],{},"程序越写越长，难以维护。",[19,161086,161087],{},"使用函数后的好处：",[23,161089,161090,161093,161096,161099],{},[26,161091,161092],{},"提高复用性。",[26,161094,161095],{},"提高可读性。",[26,161097,161098],{},"便于调试。",[26,161100,161101],{},"便于分工。",[14,161103,161105],{"id":161104},"_52-函数定义","5.2 函数定义",[19,161107,5387],{},[58,161109,161111],{"className":30579,"code":161110,"language":30581,"meta":63,"style":63},"def 函数名():\n    函数体\n",[65,161112,161113,161122],{"__ignoreMap":63},[68,161114,161115,161117,161120],{"class":70,"line":71},[68,161116,32148],{"class":331},[68,161118,161119],{"class":74}," 函数名",[68,161121,32154],{"class":335},[68,161123,161124],{"class":70,"line":92},[68,161125,161126],{"class":335},"    函数体\n",[19,161128,15340],{},[58,161130,161132],{"className":30579,"code":161131,"language":30581,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[65,161133,161134,161143,161153,161163,161167,161171],{"__ignoreMap":63},[68,161135,161136,161138,161141],{"class":70,"line":71},[68,161137,32148],{"class":331},[68,161139,161140],{"class":74}," say_hello",[68,161142,32154],{"class":335},[68,161144,161145,161147,161149,161151],{"class":70,"line":92},[68,161146,31500],{"class":82},[68,161148,336],{"class":335},[68,161150,6049],{"class":78},[68,161152,342],{"class":335},[68,161154,161155,161157,161159,161161],{"class":70,"line":1387},[68,161156,31500],{"class":82},[68,161158,336],{"class":335},[68,161160,146783],{"class":78},[68,161162,342],{"class":335},[68,161164,161165],{"class":70,"line":1402},[68,161166,2606],{"emptyLinePlaceholder":260},[68,161168,161169],{"class":70,"line":1408},[68,161170,2606],{"emptyLinePlaceholder":260},[68,161172,161173],{"class":70,"line":1422},[68,161174,161175],{"class":335},"say_hello()\n",[19,161177,9230],{},[23,161179,161180,161183,161186,161189],{},[26,161181,161182],{},"函数必须先定义，再调用。",[26,161184,161185],{},"函数名遵循变量命名规则。",[26,161187,161188],{},"函数体需要缩进。",[26,161190,161191],{},"函数不调用就不会执行。",[14,161193,161195],{"id":161194},"_53-函数调用","5.3 函数调用",[58,161197,161199],{"className":30579,"code":161198,"language":30581,"meta":63,"style":63},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[65,161200,161201,161210,161221,161232,161243,161253,161257,161261,161266],{"__ignoreMap":63},[68,161202,161203,161205,161208],{"class":70,"line":71},[68,161204,32148],{"class":331},[68,161206,161207],{"class":74}," print_menu",[68,161209,32154],{"class":335},[68,161211,161212,161214,161216,161219],{"class":70,"line":92},[68,161213,31500],{"class":82},[68,161215,336],{"class":335},[68,161217,161218],{"class":78},"\"1. 查询\"",[68,161220,342],{"class":335},[68,161222,161223,161225,161227,161230],{"class":70,"line":1387},[68,161224,31500],{"class":82},[68,161226,336],{"class":335},[68,161228,161229],{"class":78},"\"2. 添加\"",[68,161231,342],{"class":335},[68,161233,161234,161236,161238,161241],{"class":70,"line":1402},[68,161235,31500],{"class":82},[68,161237,336],{"class":335},[68,161239,161240],{"class":78},"\"3. 删除\"",[68,161242,342],{"class":335},[68,161244,161245,161247,161249,161251],{"class":70,"line":1408},[68,161246,31500],{"class":82},[68,161248,336],{"class":335},[68,161250,160825],{"class":78},[68,161252,342],{"class":335},[68,161254,161255],{"class":70,"line":1422},[68,161256,2606],{"emptyLinePlaceholder":260},[68,161258,161259],{"class":70,"line":1428},[68,161260,2606],{"emptyLinePlaceholder":260},[68,161262,161263],{"class":70,"line":1519},[68,161264,161265],{"class":335},"print_menu()\n",[68,161267,161268],{"class":70,"line":1525},[68,161269,161265],{"class":335},[19,161271,161272],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161274,161276],{"id":161275},"_54-参数","5.4 参数",[19,161278,161279],{},"参数用于向函数传递数据。",[58,161281,161283],{"className":30579,"code":161282,"language":30581,"meta":63,"style":63},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[65,161284,161285,161294,161314,161318,161322,161331],{"__ignoreMap":63},[68,161286,161287,161289,161291],{"class":70,"line":71},[68,161288,32148],{"class":331},[68,161290,161140],{"class":74},[68,161292,161293],{"class":335},"(name):\n",[68,161295,161296,161298,161300,161302,161304,161306,161308,161310,161312],{"class":70,"line":92},[68,161297,31500],{"class":82},[68,161299,336],{"class":335},[68,161301,387],{"class":331},[68,161303,157198],{"class":78},[68,161305,1229],{"class":82},[68,161307,80011],{"class":335},[68,161309,1279],{"class":82},[68,161311,584],{"class":78},[68,161313,342],{"class":335},[68,161315,161316],{"class":70,"line":1387},[68,161317,2606],{"emptyLinePlaceholder":260},[68,161319,161320],{"class":70,"line":1402},[68,161321,2606],{"emptyLinePlaceholder":260},[68,161323,161324,161327,161329],{"class":70,"line":1408},[68,161325,161326],{"class":335},"say_hello(",[68,161328,150032],{"class":78},[68,161330,342],{"class":335},[68,161332,161333,161335,161337],{"class":70,"line":1422},[68,161334,161326],{"class":335},[68,161336,151080],{"class":78},[68,161338,342],{"class":335},[19,161340,161341,161343,161344,161346],{},[65,161342,80011],{}," 是形参，",[65,161345,150032],{}," 是实参。",[19,161348,161349],{},"多个参数：",[58,161351,161353],{"className":30579,"code":161352,"language":30581,"meta":63,"style":63},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[65,161354,161355,161363,161376,161382,161386,161390],{"__ignoreMap":63},[68,161356,161357,161359,161361],{"class":70,"line":71},[68,161358,32148],{"class":331},[68,161360,138],{"class":74},[68,161362,151237],{"class":335},[68,161364,161365,161368,161370,161372,161374],{"class":70,"line":92},[68,161366,161367],{"class":335},"    result ",[68,161369,381],{"class":331},[68,161371,11074],{"class":335},[68,161373,814],{"class":331},[68,161375,151248],{"class":335},[68,161377,161378,161380],{"class":70,"line":1387},[68,161379,31500],{"class":82},[68,161381,76786],{"class":335},[68,161383,161384],{"class":70,"line":1402},[68,161385,2606],{"emptyLinePlaceholder":260},[68,161387,161388],{"class":70,"line":1408},[68,161389,2606],{"emptyLinePlaceholder":260},[68,161391,161392,161395,161397,161399,161401],{"class":70,"line":1422},[68,161393,161394],{"class":335},"add(",[68,161396,779],{"class":82},[68,161398,12640],{"class":335},[68,161400,1033],{"class":82},[68,161402,342],{"class":335},[19,161404,161405],{},"调用时参数数量必须匹配。",[14,161407,161409],{"id":161408},"_55-返回值","5.5 返回值",[19,161411,161412,161414],{},[65,161413,17251],{}," 用于把函数内部的结果返回给调用者。",[58,161416,161418],{"className":30579,"code":161417,"language":30581,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[65,161419,161420,161428,161438,161442,161446,161464],{"__ignoreMap":63},[68,161421,161422,161424,161426],{"class":70,"line":71},[68,161423,32148],{"class":331},[68,161425,138],{"class":74},[68,161427,151237],{"class":335},[68,161429,161430,161432,161434,161436],{"class":70,"line":92},[68,161431,4296],{"class":331},[68,161433,11074],{"class":335},[68,161435,814],{"class":331},[68,161437,151248],{"class":335},[68,161439,161440],{"class":70,"line":1387},[68,161441,2606],{"emptyLinePlaceholder":260},[68,161443,161444],{"class":70,"line":1402},[68,161445,2606],{"emptyLinePlaceholder":260},[68,161447,161448,161451,161453,161456,161458,161460,161462],{"class":70,"line":1408},[68,161449,161450],{"class":335},"result ",[68,161452,381],{"class":331},[68,161454,161455],{"class":335}," add(",[68,161457,779],{"class":82},[68,161459,12640],{"class":335},[68,161461,1033],{"class":82},[68,161463,342],{"class":335},[68,161465,161466,161468],{"class":70,"line":1422},[68,161467,30616],{"class":82},[68,161469,76786],{"class":335},[19,161471,161472,161473,161475,161476,28588],{},"如果函数没有写 ",[65,161474,17251],{},"，默认返回 ",[65,161477,95887],{},[58,161479,161481],{"className":30579,"code":161480,"language":30581,"meta":63,"style":63},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[65,161482,161483,161491,161501,161505,161509,161518],{"__ignoreMap":63},[68,161484,161485,161487,161489],{"class":70,"line":71},[68,161486,32148],{"class":331},[68,161488,161140],{"class":74},[68,161490,32154],{"class":335},[68,161492,161493,161495,161497,161499],{"class":70,"line":92},[68,161494,31500],{"class":82},[68,161496,336],{"class":335},[68,161498,6049],{"class":78},[68,161500,342],{"class":335},[68,161502,161503],{"class":70,"line":1387},[68,161504,2606],{"emptyLinePlaceholder":260},[68,161506,161507],{"class":70,"line":1402},[68,161508,2606],{"emptyLinePlaceholder":260},[68,161510,161511,161513,161515],{"class":70,"line":1408},[68,161512,161450],{"class":335},[68,161514,381],{"class":331},[68,161516,161517],{"class":335}," say_hello()\n",[68,161519,161520,161522,161525],{"class":70,"line":1422},[68,161521,30616],{"class":82},[68,161523,161524],{"class":335},"(result)  ",[68,161526,161527],{"class":393},"# None\n",[14,161529,161531],{"id":161530},"_56-return的作用","5.6 return的作用",[19,161533,161534,161536],{},[65,161535,17251],{}," 有两个作用：",[23,161538,161539,161542],{},[26,161540,161541],{},"返回结果。",[26,161543,161544],{},"结束函数。",[58,161546,161548],{"className":30579,"code":161547,"language":30581,"meta":63,"style":63},"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",[65,161549,161550,161560,161572,161579,161583,161595,161602,161606,161613,161617,161621,161632],{"__ignoreMap":63},[68,161551,161552,161554,161557],{"class":70,"line":71},[68,161553,32148],{"class":331},[68,161555,161556],{"class":74}," check_age",[68,161558,161559],{"class":335},"(age):\n",[68,161561,161562,161564,161566,161568,161570],{"class":70,"line":92},[68,161563,3307],{"class":331},[68,161565,15912],{"class":335},[68,161567,1243],{"class":331},[68,161569,4299],{"class":82},[68,161571,3945],{"class":335},[68,161573,161574,161576],{"class":70,"line":1387},[68,161575,14957],{"class":331},[68,161577,161578],{"class":78}," \"年龄不合法\"\n",[68,161580,161581],{"class":70,"line":1402},[68,161582,2606],{"emptyLinePlaceholder":260},[68,161584,161585,161587,161589,161591,161593],{"class":70,"line":1408},[68,161586,3307],{"class":331},[68,161588,15912],{"class":335},[68,161590,1917],{"class":331},[68,161592,156429],{"class":82},[68,161594,3945],{"class":335},[68,161596,161597,161599],{"class":70,"line":1422},[68,161598,14957],{"class":331},[68,161600,161601],{"class":78}," \"成年人\"\n",[68,161603,161604],{"class":70,"line":1428},[68,161605,2606],{"emptyLinePlaceholder":260},[68,161607,161608,161610],{"class":70,"line":1519},[68,161609,4296],{"class":331},[68,161611,161612],{"class":78}," \"未成年人\"\n",[68,161614,161615],{"class":70,"line":1525},[68,161616,2606],{"emptyLinePlaceholder":260},[68,161618,161619],{"class":70,"line":1537},[68,161620,2606],{"emptyLinePlaceholder":260},[68,161622,161623,161625,161628,161630],{"class":70,"line":1819},[68,161624,30616],{"class":82},[68,161626,161627],{"class":335},"(check_age(",[68,161629,1033],{"class":82},[68,161631,30698],{"class":335},[68,161633,161634,161636,161638,161640,161642],{"class":70,"line":1824},[68,161635,30616],{"class":82},[68,161637,161627],{"class":335},[68,161639,865],{"class":331},[68,161641,551],{"class":82},[68,161643,30698],{"class":335},[19,161645,161646,161647,161649],{},"函数执行到 ",[65,161648,17251],{}," 后，后面的代码不会继续执行。",[14,161651,161653],{"id":161652},"_57-none","5.7 None",[19,161655,161656,161658],{},[65,161657,95887],{}," 表示空值或没有结果。",[19,161660,161661],{},"常见使用场景：",[23,161663,161664,161667,161670],{},[26,161665,161666],{},"函数没有返回值。",[26,161668,161669],{},"变量暂时没有具体值。",[26,161671,161672],{},"表示查询不到结果。",[58,161674,161676],{"className":30579,"code":161675,"language":30581,"meta":63,"style":63},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[65,161677,161678,161686,161690,161703],{"__ignoreMap":63},[68,161679,161680,161682,161684],{"class":70,"line":71},[68,161681,161450],{"class":335},[68,161683,381],{"class":331},[68,161685,152316],{"class":82},[68,161687,161688],{"class":70,"line":92},[68,161689,2606],{"emptyLinePlaceholder":260},[68,161691,161692,161694,161697,161699,161701],{"class":70,"line":1387},[68,161693,1738],{"class":331},[68,161695,161696],{"class":335}," result ",[68,161698,39128],{"class":331},[68,161700,39134],{"class":82},[68,161702,3945],{"class":335},[68,161704,161705,161707,161709,161712],{"class":70,"line":1402},[68,161706,31500],{"class":82},[68,161708,336],{"class":335},[68,161710,161711],{"class":78},"\"没有数据\"",[68,161713,342],{"class":335},[19,161715,161716,161717,161719,161720,161723,161724,28588],{},"判断 ",[65,161718,95887],{}," 推荐使用 ",[65,161721,161722],{},"is None","，不要写成 ",[65,161725,161726],{},"== None",[14,161728,161730],{"id":161729},"_58-函数文档字符串","5.8 函数文档字符串",[19,161732,161733],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[58,161735,161737],{"className":30579,"code":161736,"language":30581,"meta":63,"style":63},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[65,161738,161739,161749,161754],{"__ignoreMap":63},[68,161740,161741,161743,161746],{"class":70,"line":71},[68,161742,32148],{"class":331},[68,161744,161745],{"class":74}," calculate_bmi",[68,161747,161748],{"class":335},"(weight, height):\n",[68,161750,161751],{"class":70,"line":92},[68,161752,161753],{"class":78},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[68,161755,161756,161758,161761,161763,161766,161768],{"class":70,"line":1387},[68,161757,4296],{"class":331},[68,161759,161760],{"class":335}," weight ",[68,161762,917],{"class":331},[68,161764,161765],{"class":335}," height ",[68,161767,10866],{"class":331},[68,161769,47924],{"class":82},[19,161771,161772],{},"查看说明：",[58,161774,161776],{"className":30579,"code":161775,"language":30581,"meta":63,"style":63},"help(calculate_bmi)\n",[65,161777,161778],{"__ignoreMap":63},[68,161779,161780,161783],{"class":70,"line":71},[68,161781,161782],{"class":82},"help",[68,161784,161785],{"class":335},"(calculate_bmi)\n",[19,161787,161788],{},"较完整的写法：",[58,161790,161792],{"className":30579,"code":161791,"language":30581,"meta":63,"style":63},"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",[65,161793,161794,161802,161807,161812,161816,161821,161826,161831,161835],{"__ignoreMap":63},[68,161795,161796,161798,161800],{"class":70,"line":71},[68,161797,32148],{"class":331},[68,161799,161745],{"class":74},[68,161801,161748],{"class":335},[68,161803,161804],{"class":70,"line":92},[68,161805,161806],{"class":78},"    \"\"\"\n",[68,161808,161809],{"class":70,"line":1387},[68,161810,161811],{"class":78},"    计算BMI。\n",[68,161813,161814],{"class":70,"line":1402},[68,161815,2606],{"emptyLinePlaceholder":260},[68,161817,161818],{"class":70,"line":1408},[68,161819,161820],{"class":78},"    :param weight: 体重，单位kg\n",[68,161822,161823],{"class":70,"line":1422},[68,161824,161825],{"class":78},"    :param height: 身高，单位m\n",[68,161827,161828],{"class":70,"line":1428},[68,161829,161830],{"class":78},"    :return: BMI数值\n",[68,161832,161833],{"class":70,"line":1519},[68,161834,161806],{"class":78},[68,161836,161837,161839,161841,161843,161845,161847],{"class":70,"line":1525},[68,161838,4296],{"class":331},[68,161840,161760],{"class":335},[68,161842,917],{"class":331},[68,161844,161765],{"class":335},[68,161846,10866],{"class":331},[68,161848,47924],{"class":82},[14,161850,161852],{"id":161851},"_59-变量作用域","5.9 变量作用域",[301,161854,161856],{"id":161855},"_591-局部变量","5.9.1 局部变量",[19,161858,161859],{},"在函数内部定义的变量，只能在函数内部使用。",[58,161861,161863],{"className":30579,"code":161862,"language":30581,"meta":63,"style":63},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[65,161864,161865,161874,161882,161888,161892,161896,161901],{"__ignoreMap":63},[68,161866,161867,161869,161872],{"class":70,"line":71},[68,161868,32148],{"class":331},[68,161870,161871],{"class":74}," test",[68,161873,32154],{"class":335},[68,161875,161876,161878,161880],{"class":70,"line":92},[68,161877,45794],{"class":335},[68,161879,381],{"class":331},[68,161881,58629],{"class":82},[68,161883,161884,161886],{"class":70,"line":1387},[68,161885,31500],{"class":82},[68,161887,349],{"class":335},[68,161889,161890],{"class":70,"line":1402},[68,161891,2606],{"emptyLinePlaceholder":260},[68,161893,161894],{"class":70,"line":1408},[68,161895,2606],{"emptyLinePlaceholder":260},[68,161897,161898],{"class":70,"line":1422},[68,161899,161900],{"class":335},"test()\n",[68,161902,161903,161905,161908],{"class":70,"line":1428},[68,161904,30616],{"class":82},[68,161906,161907],{"class":335},"(num)  ",[68,161909,161910],{"class":393},"# 报错\n",[301,161912,161914],{"id":161913},"_592-全局变量","5.9.2 全局变量",[19,161916,161917],{},"在函数外部定义的变量，可以在函数内部读取。",[58,161919,161921],{"className":30579,"code":161920,"language":30581,"meta":63,"style":63},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[65,161922,161923,161931,161935,161939,161947,161953,161957,161961],{"__ignoreMap":63},[68,161924,161925,161927,161929],{"class":70,"line":71},[68,161926,146680],{"class":335},[68,161928,381],{"class":331},[68,161930,149497],{"class":78},[68,161932,161933],{"class":70,"line":92},[68,161934,2606],{"emptyLinePlaceholder":260},[68,161936,161937],{"class":70,"line":1387},[68,161938,2606],{"emptyLinePlaceholder":260},[68,161940,161941,161943,161945],{"class":70,"line":1402},[68,161942,32148],{"class":331},[68,161944,161140],{"class":74},[68,161946,32154],{"class":335},[68,161948,161949,161951],{"class":70,"line":1408},[68,161950,31500],{"class":82},[68,161952,150804],{"class":335},[68,161954,161955],{"class":70,"line":1422},[68,161956,2606],{"emptyLinePlaceholder":260},[68,161958,161959],{"class":70,"line":1428},[68,161960,2606],{"emptyLinePlaceholder":260},[68,161962,161963],{"class":70,"line":1519},[68,161964,161175],{"class":335},[19,161966,161967,161968,28588],{},"如果要在函数内部修改全局变量，需要 ",[65,161969,161970],{},"global",[58,161972,161974],{"className":30579,"code":161973,"language":30581,"meta":63,"style":63},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[65,161975,161976,161984,161988,161992,162001,162009,162017,162021,162025,162030],{"__ignoreMap":63},[68,161977,161978,161980,161982],{"class":70,"line":71},[68,161979,146835],{"class":335},[68,161981,381],{"class":331},[68,161983,47534],{"class":82},[68,161985,161986],{"class":70,"line":92},[68,161987,2606],{"emptyLinePlaceholder":260},[68,161989,161990],{"class":70,"line":1387},[68,161991,2606],{"emptyLinePlaceholder":260},[68,161993,161994,161996,161999],{"class":70,"line":1402},[68,161995,32148],{"class":331},[68,161997,161998],{"class":74}," add_count",[68,162000,32154],{"class":335},[68,162002,162003,162006],{"class":70,"line":1408},[68,162004,162005],{"class":331},"    global",[68,162007,162008],{"class":335}," count\n",[68,162010,162011,162013,162015],{"class":70,"line":1422},[68,162012,159577],{"class":335},[68,162014,9682],{"class":331},[68,162016,55900],{"class":82},[68,162018,162019],{"class":70,"line":1428},[68,162020,2606],{"emptyLinePlaceholder":260},[68,162022,162023],{"class":70,"line":1519},[68,162024,2606],{"emptyLinePlaceholder":260},[68,162026,162027],{"class":70,"line":1525},[68,162028,162029],{"class":335},"add_count()\n",[68,162031,162032,162034],{"class":70,"line":1537},[68,162033,30616],{"class":82},[68,162035,162036],{"class":335},"(count)\n",[19,162038,162039],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162041,162043],{"id":162042},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162045,162046],{},"一个函数中可以调用另一个函数。",[58,162048,162050],{"className":30579,"code":162049,"language":30581,"meta":63,"style":63},"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",[65,162051,162052,162061,162075,162079,162083,162092,162097,162117,162138,162142,162146,162150],{"__ignoreMap":63},[68,162053,162054,162056,162059],{"class":70,"line":71},[68,162055,32148],{"class":331},[68,162057,162058],{"class":74}," print_line",[68,162060,32154],{"class":335},[68,162062,162063,162065,162067,162069,162071,162073],{"class":70,"line":92},[68,162064,31500],{"class":82},[68,162066,336],{"class":335},[68,162068,32684],{"class":78},[68,162070,6723],{"class":331},[68,162072,78866],{"class":82},[68,162074,342],{"class":335},[68,162076,162077],{"class":70,"line":1387},[68,162078,2606],{"emptyLinePlaceholder":260},[68,162080,162081],{"class":70,"line":1402},[68,162082,2606],{"emptyLinePlaceholder":260},[68,162084,162085,162087,162090],{"class":70,"line":1408},[68,162086,32148],{"class":331},[68,162088,162089],{"class":74}," print_info",[68,162091,149519],{"class":335},[68,162093,162094],{"class":70,"line":1422},[68,162095,162096],{"class":335},"    print_line()\n",[68,162098,162099,162101,162103,162105,162107,162109,162111,162113,162115],{"class":70,"line":1428},[68,162100,31500],{"class":82},[68,162102,336],{"class":335},[68,162104,387],{"class":331},[68,162106,156826],{"class":78},[68,162108,1229],{"class":82},[68,162110,80011],{"class":335},[68,162112,1279],{"class":82},[68,162114,584],{"class":78},[68,162116,342],{"class":335},[68,162118,162119,162121,162123,162125,162128,162130,162132,162134,162136],{"class":70,"line":1519},[68,162120,31500],{"class":82},[68,162122,336],{"class":335},[68,162124,387],{"class":331},[68,162126,162127],{"class":78},"\"年龄:",[68,162129,1229],{"class":82},[68,162131,70422],{"class":335},[68,162133,1279],{"class":82},[68,162135,584],{"class":78},[68,162137,342],{"class":335},[68,162139,162140],{"class":70,"line":1525},[68,162141,162096],{"class":335},[68,162143,162144],{"class":70,"line":1537},[68,162145,2606],{"emptyLinePlaceholder":260},[68,162147,162148],{"class":70,"line":1819},[68,162149,2606],{"emptyLinePlaceholder":260},[68,162151,162152,162155,162157,162159,162161],{"class":70,"line":1824},[68,162153,162154],{"class":335},"print_info(",[68,162156,150032],{"class":78},[68,162158,12640],{"class":335},[68,162160,983],{"class":82},[68,162162,342],{"class":335},[19,162164,162165],{},"这种方式可以把小功能组合成大功能。",[14,162167,162169],{"id":162168},"_511-参数检查","5.11 参数检查",[19,162171,162172],{},"函数内部可以检查参数是否合法。",[58,162174,162176],{"className":30579,"code":162175,"language":30581,"meta":63,"style":63},"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",[65,162177,162178,162187,162199,162205,162215,162219,162223,162240,162244,162256,162267,162273],{"__ignoreMap":63},[68,162179,162180,162182,162185],{"class":70,"line":71},[68,162181,32148],{"class":331},[68,162183,162184],{"class":74}," divide",[68,162186,151237],{"class":335},[68,162188,162189,162191,162193,162195,162197],{"class":70,"line":92},[68,162190,3307],{"class":331},[68,162192,11087],{"class":335},[68,162194,3155],{"class":331},[68,162196,4299],{"class":82},[68,162198,3945],{"class":335},[68,162200,162201,162203],{"class":70,"line":1387},[68,162202,14957],{"class":331},[68,162204,152316],{"class":82},[68,162206,162207,162209,162211,162213],{"class":70,"line":1402},[68,162208,4296],{"class":331},[68,162210,11074],{"class":335},[68,162212,917],{"class":331},[68,162214,151248],{"class":335},[68,162216,162217],{"class":70,"line":1408},[68,162218,2606],{"emptyLinePlaceholder":260},[68,162220,162221],{"class":70,"line":1422},[68,162222,2606],{"emptyLinePlaceholder":260},[68,162224,162225,162227,162229,162232,162234,162236,162238],{"class":70,"line":1428},[68,162226,161450],{"class":335},[68,162228,381],{"class":331},[68,162230,162231],{"class":335}," divide(",[68,162233,779],{"class":82},[68,162235,12640],{"class":335},[68,162237,525],{"class":82},[68,162239,342],{"class":335},[68,162241,162242],{"class":70,"line":1519},[68,162243,2606],{"emptyLinePlaceholder":260},[68,162245,162246,162248,162250,162252,162254],{"class":70,"line":1525},[68,162247,1738],{"class":331},[68,162249,161696],{"class":335},[68,162251,39128],{"class":331},[68,162253,39134],{"class":82},[68,162255,3945],{"class":335},[68,162257,162258,162260,162262,162265],{"class":70,"line":1537},[68,162259,31500],{"class":82},[68,162261,336],{"class":335},[68,162263,162264],{"class":78},"\"除数不能为0\"",[68,162266,342],{"class":335},[68,162268,162269,162271],{"class":70,"line":1819},[68,162270,1908],{"class":331},[68,162272,3945],{"class":335},[68,162274,162275,162277],{"class":70,"line":1824},[68,162276,31500],{"class":82},[68,162278,76786],{"class":335},[14,162280,162282],{"id":162281},"_512-类型提示","5.12 类型提示",[19,162284,162285],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[58,162287,162289],{"className":30579,"code":162288,"language":30581,"meta":63,"style":63},"def add(a: int, b: int) -> int:\n    return a + b\n",[65,162290,162291,162314],{"__ignoreMap":63},[68,162292,162293,162295,162297,162300,162302,162305,162307,162310,162312],{"class":70,"line":71},[68,162294,32148],{"class":331},[68,162296,138],{"class":74},[68,162298,162299],{"class":335},"(a: ",[68,162301,339],{"class":82},[68,162303,162304],{"class":335},", b: ",[68,162306,339],{"class":82},[68,162308,162309],{"class":335},") -> ",[68,162311,339],{"class":82},[68,162313,3945],{"class":335},[68,162315,162316,162318,162320,162322],{"class":70,"line":92},[68,162317,4296],{"class":331},[68,162319,11074],{"class":335},[68,162321,814],{"class":331},[68,162323,151248],{"class":335},[19,162325,162326],{},"字符串参数：",[58,162328,162330],{"className":30579,"code":162329,"language":30581,"meta":63,"style":63},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[65,162331,162332,162349],{"__ignoreMap":63},[68,162333,162334,162336,162338,162341,162343,162345,162347],{"class":70,"line":71},[68,162335,32148],{"class":331},[68,162337,161140],{"class":74},[68,162339,162340],{"class":335},"(name: ",[68,162342,1507],{"class":82},[68,162344,162309],{"class":335},[68,162346,95887],{"class":82},[68,162348,3945],{"class":335},[68,162350,162351,162353,162355,162357,162359,162361,162363,162365,162367],{"class":70,"line":92},[68,162352,31500],{"class":82},[68,162354,336],{"class":335},[68,162356,387],{"class":331},[68,162358,157198],{"class":78},[68,162360,1229],{"class":82},[68,162362,80011],{"class":335},[68,162364,1279],{"class":82},[68,162366,584],{"class":78},[68,162368,342],{"class":335},[19,162370,162371],{},"列表参数：",[58,162373,162375],{"className":30579,"code":162374,"language":30581,"meta":63,"style":63},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[65,162376,162377,162396,162404,162416,162425],{"__ignoreMap":63},[68,162378,162379,162381,162384,162387,162389,162392,162394],{"class":70,"line":71},[68,162380,32148],{"class":331},[68,162382,162383],{"class":74}," get_total",[68,162385,162386],{"class":335},"(numbers: list[",[68,162388,339],{"class":82},[68,162390,162391],{"class":335},"]) -> ",[68,162393,339],{"class":82},[68,162395,3945],{"class":335},[68,162397,162398,162400,162402],{"class":70,"line":92},[68,162399,159451],{"class":335},[68,162401,381],{"class":331},[68,162403,47534],{"class":82},[68,162405,162406,162408,162411,162413],{"class":70,"line":1387},[68,162407,3407],{"class":331},[68,162409,162410],{"class":335}," number ",[68,162412,26247],{"class":331},[68,162414,162415],{"class":335}," numbers:\n",[68,162417,162418,162420,162422],{"class":70,"line":1402},[68,162419,160126],{"class":335},[68,162421,9682],{"class":331},[68,162423,162424],{"class":335}," number\n",[68,162426,162427,162429],{"class":70,"line":1408},[68,162428,4296],{"class":331},[68,162430,162431],{"class":335}," total\n",[19,162433,162434],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162436,162438],{"id":162437},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[58,162440,162442],{"className":30579,"code":162441,"language":30581,"meta":63,"style":63},"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",[65,162443,162444,162454,162458,162462,162470,162481,162491,162501,162511,162521,162525,162529,162538,162560,162564,162568,162577,162583,162603,162615,162626,162630,162639,162650,162655,162659,162663,162672,162678,162697,162709,162719,162723,162734,162744,162748,162756,162767,162771,162775,162779,162787,162792,162806,162810,162822,162827,162839,162844,162856,162861,162873,162883,162887,162893],{"__ignoreMap":63},[68,162445,162446,162449,162451],{"class":70,"line":71},[68,162447,162448],{"class":335},"balance ",[68,162450,381],{"class":331},[68,162452,162453],{"class":82}," 1000\n",[68,162455,162456],{"class":70,"line":92},[68,162457,2606],{"emptyLinePlaceholder":260},[68,162459,162460],{"class":70,"line":1387},[68,162461,2606],{"emptyLinePlaceholder":260},[68,162463,162464,162466,162468],{"class":70,"line":1402},[68,162465,32148],{"class":331},[68,162467,152177],{"class":74},[68,162469,32154],{"class":335},[68,162471,162472,162474,162476,162479],{"class":70,"line":1408},[68,162473,31500],{"class":82},[68,162475,336],{"class":335},[68,162477,162478],{"class":78},"\"====== ATM ======\"",[68,162480,342],{"class":335},[68,162482,162483,162485,162487,162489],{"class":70,"line":1422},[68,162484,31500],{"class":82},[68,162486,336],{"class":335},[68,162488,160792],{"class":78},[68,162490,342],{"class":335},[68,162492,162493,162495,162497,162499],{"class":70,"line":1428},[68,162494,31500],{"class":82},[68,162496,336],{"class":335},[68,162498,160803],{"class":78},[68,162500,342],{"class":335},[68,162502,162503,162505,162507,162509],{"class":70,"line":1519},[68,162504,31500],{"class":82},[68,162506,336],{"class":335},[68,162508,160814],{"class":78},[68,162510,342],{"class":335},[68,162512,162513,162515,162517,162519],{"class":70,"line":1525},[68,162514,31500],{"class":82},[68,162516,336],{"class":335},[68,162518,160825],{"class":78},[68,162520,342],{"class":335},[68,162522,162523],{"class":70,"line":1537},[68,162524,2606],{"emptyLinePlaceholder":260},[68,162526,162527],{"class":70,"line":1819},[68,162528,2606],{"emptyLinePlaceholder":260},[68,162530,162531,162533,162536],{"class":70,"line":1824},[68,162532,32148],{"class":331},[68,162534,162535],{"class":74}," show_balance",[68,162537,32154],{"class":335},[68,162539,162540,162542,162544,162546,162549,162551,162554,162556,162558],{"class":70,"line":1830},[68,162541,31500],{"class":82},[68,162543,336],{"class":335},[68,162545,387],{"class":331},[68,162547,162548],{"class":78},"\"当前余额:",[68,162550,1229],{"class":82},[68,162552,162553],{"class":335},"balance",[68,162555,1279],{"class":82},[68,162557,157156],{"class":78},[68,162559,342],{"class":335},[68,162561,162562],{"class":70,"line":1835},[68,162563,2606],{"emptyLinePlaceholder":260},[68,162565,162566],{"class":70,"line":1849},[68,162567,2606],{"emptyLinePlaceholder":260},[68,162569,162570,162572,162575],{"class":70,"line":1854},[68,162571,32148],{"class":331},[68,162573,162574],{"class":74}," save_money",[68,162576,32154],{"class":335},[68,162578,162579,162581],{"class":70,"line":1860},[68,162580,162005],{"class":331},[68,162582,150243],{"class":335},[68,162584,162585,162588,162590,162592,162594,162596,162598,162601],{"class":70,"line":1881},[68,162586,162587],{"class":335},"    money ",[68,162589,381],{"class":331},[68,162591,109997],{"class":82},[68,162593,336],{"class":335},[68,162595,54022],{"class":82},[68,162597,336],{"class":335},[68,162599,162600],{"class":78},"\"请输入存款金额:\"",[68,162602,30698],{"class":335},[68,162604,162605,162607,162609,162611,162613],{"class":70,"line":1886},[68,162606,3307],{"class":331},[68,162608,150286],{"class":335},[68,162610,1795],{"class":331},[68,162612,4299],{"class":82},[68,162614,3945],{"class":335},[68,162616,162617,162619,162621,162624],{"class":70,"line":1900},[68,162618,32652],{"class":82},[68,162620,336],{"class":335},[68,162622,162623],{"class":78},"\"金额必须大于0\"",[68,162625,342],{"class":335},[68,162627,162628],{"class":70,"line":1905},[68,162629,152505],{"class":331},[68,162631,162632,162635,162637],{"class":70,"line":1934},[68,162633,162634],{"class":335},"    balance ",[68,162636,9682],{"class":331},[68,162638,150319],{"class":335},[68,162640,162641,162643,162645,162648],{"class":70,"line":1939},[68,162642,31500],{"class":82},[68,162644,336],{"class":335},[68,162646,162647],{"class":78},"\"存款成功\"",[68,162649,342],{"class":335},[68,162651,162652],{"class":70,"line":1956},[68,162653,162654],{"class":335},"    show_balance()\n",[68,162656,162657],{"class":70,"line":1961},[68,162658,2606],{"emptyLinePlaceholder":260},[68,162660,162661],{"class":70,"line":1966},[68,162662,2606],{"emptyLinePlaceholder":260},[68,162664,162665,162667,162670],{"class":70,"line":1971},[68,162666,32148],{"class":331},[68,162668,162669],{"class":74}," withdraw_money",[68,162671,32154],{"class":335},[68,162673,162674,162676],{"class":70,"line":1985},[68,162675,162005],{"class":331},[68,162677,150243],{"class":335},[68,162679,162680,162682,162684,162686,162688,162690,162692,162695],{"class":70,"line":1990},[68,162681,162587],{"class":335},[68,162683,381],{"class":331},[68,162685,109997],{"class":82},[68,162687,336],{"class":335},[68,162689,54022],{"class":82},[68,162691,336],{"class":335},[68,162693,162694],{"class":78},"\"请输入取款金额:\"",[68,162696,30698],{"class":335},[68,162698,162699,162701,162703,162705,162707],{"class":70,"line":2783},[68,162700,3307],{"class":331},[68,162702,150286],{"class":335},[68,162704,1795],{"class":331},[68,162706,4299],{"class":82},[68,162708,3945],{"class":335},[68,162710,162711,162713,162715,162717],{"class":70,"line":2797},[68,162712,32652],{"class":82},[68,162714,336],{"class":335},[68,162716,162623],{"class":78},[68,162718,342],{"class":335},[68,162720,162721],{"class":70,"line":2805},[68,162722,152505],{"class":331},[68,162724,162725,162727,162729,162731],{"class":70,"line":2810},[68,162726,3307],{"class":331},[68,162728,150286],{"class":335},[68,162730,1293],{"class":331},[68,162732,162733],{"class":335}," balance:\n",[68,162735,162736,162738,162740,162742],{"class":70,"line":2816},[68,162737,32652],{"class":82},[68,162739,336],{"class":335},[68,162741,150381],{"class":78},[68,162743,342],{"class":335},[68,162745,162746],{"class":70,"line":2822},[68,162747,152505],{"class":331},[68,162749,162750,162752,162754],{"class":70,"line":2827},[68,162751,162634],{"class":335},[68,162753,150396],{"class":331},[68,162755,150319],{"class":335},[68,162757,162758,162760,162762,162765],{"class":70,"line":8153},[68,162759,31500],{"class":82},[68,162761,336],{"class":335},[68,162763,162764],{"class":78},"\"取款成功\"",[68,162766,342],{"class":335},[68,162768,162769],{"class":70,"line":8177},[68,162770,162654],{"class":335},[68,162772,162773],{"class":70,"line":8182},[68,162774,2606],{"emptyLinePlaceholder":260},[68,162776,162777],{"class":70,"line":8188},[68,162778,2606],{"emptyLinePlaceholder":260},[68,162780,162781,162783,162785],{"class":70,"line":8215},[68,162782,108863],{"class":331},[68,162784,95493],{"class":82},[68,162786,3945],{"class":335},[68,162788,162789],{"class":70,"line":8220},[68,162790,162791],{"class":335},"    show_menu()\n",[68,162793,162794,162796,162798,162800,162802,162804],{"class":70,"line":8226},[68,162795,160836],{"class":335},[68,162797,381],{"class":331},[68,162799,60806],{"class":82},[68,162801,336],{"class":335},[68,162803,153217],{"class":78},[68,162805,342],{"class":335},[68,162807,162808],{"class":70,"line":8238},[68,162809,2606],{"emptyLinePlaceholder":260},[68,162811,162812,162814,162816,162818,162820],{"class":70,"line":8250},[68,162813,3307],{"class":331},[68,162815,153230],{"class":335},[68,162817,3155],{"class":331},[68,162819,153235],{"class":78},[68,162821,3945],{"class":335},[68,162823,162824],{"class":70,"line":8262},[68,162825,162826],{"class":335},"        show_balance()\n",[68,162828,162829,162831,162833,162835,162837],{"class":70,"line":9921},[68,162830,39494],{"class":331},[68,162832,153230],{"class":335},[68,162834,3155],{"class":331},[68,162836,153254],{"class":78},[68,162838,3945],{"class":335},[68,162840,162841],{"class":70,"line":9946},[68,162842,162843],{"class":335},"        save_money()\n",[68,162845,162846,162848,162850,162852,162854],{"class":70,"line":9969},[68,162847,39494],{"class":331},[68,162849,153230],{"class":335},[68,162851,3155],{"class":331},[68,162853,153272],{"class":78},[68,162855,3945],{"class":335},[68,162857,162858],{"class":70,"line":9993},[68,162859,162860],{"class":335},"        withdraw_money()\n",[68,162862,162863,162865,162867,162869,162871],{"class":70,"line":9998},[68,162864,39494],{"class":331},[68,162866,153230],{"class":335},[68,162868,3155],{"class":331},[68,162870,153326],{"class":78},[68,162872,3945],{"class":335},[68,162874,162875,162877,162879,162881],{"class":70,"line":10003},[68,162876,32652],{"class":82},[68,162878,336],{"class":335},[68,162880,153337],{"class":78},[68,162882,342],{"class":335},[68,162884,162885],{"class":70,"line":10008},[68,162886,31828],{"class":331},[68,162888,162889,162891],{"class":70,"line":10017},[68,162890,158166],{"class":331},[68,162892,3945],{"class":335},[68,162894,162895,162897,162899,162901],{"class":70,"line":10022},[68,162896,32652],{"class":82},[68,162898,336],{"class":335},[68,162900,153358],{"class":78},[68,162902,342],{"class":335},[19,162904,162905],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162907,162909],{"id":162908},"_514-易错点","5.14 易错点",[23,162911,162912,162915,162918,162923,162928,162931],{},[26,162913,162914],{},"函数定义后必须调用才会执行。",[26,162916,162917],{},"函数名后面有括号才是调用。",[26,162919,162920,162922],{},[65,162921,17251],{}," 后面的代码不会执行。",[26,162924,162925,162926,28588],{},"没有返回值的函数默认返回 ",[65,162927,95887],{},[26,162929,162930],{},"局部变量不能在函数外部访问。",[26,162932,162933,162934,162936],{},"不要滥用 ",[65,162935,161970],{},"，更好的方式是让函数返回新值。",[19,162938,162939,162940,162942],{},"例如不用 ",[65,162941,161970],{}," 改写存款：",[58,162944,162946],{"className":30579,"code":162945,"language":30581,"meta":63,"style":63},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[65,162947,162948,162957,162968,162972,162976,162984,162997],{"__ignoreMap":63},[68,162949,162950,162952,162954],{"class":70,"line":71},[68,162951,32148],{"class":331},[68,162953,162574],{"class":74},[68,162955,162956],{"class":335},"(balance, money):\n",[68,162958,162959,162961,162964,162966],{"class":70,"line":92},[68,162960,4296],{"class":331},[68,162962,162963],{"class":335}," balance ",[68,162965,814],{"class":331},[68,162967,150319],{"class":335},[68,162969,162970],{"class":70,"line":1387},[68,162971,2606],{"emptyLinePlaceholder":260},[68,162973,162974],{"class":70,"line":1402},[68,162975,2606],{"emptyLinePlaceholder":260},[68,162977,162978,162980,162982],{"class":70,"line":1408},[68,162979,162448],{"class":335},[68,162981,381],{"class":331},[68,162983,162453],{"class":82},[68,162985,162986,162988,162990,162993,162995],{"class":70,"line":1422},[68,162987,162448],{"class":335},[68,162989,381],{"class":331},[68,162991,162992],{"class":335}," save_money(balance, ",[68,162994,1929],{"class":82},[68,162996,342],{"class":335},[68,162998,162999,163001],{"class":70,"line":1428},[68,163000,30616],{"class":82},[68,163002,163003],{"class":335},"(balance)\n",[14,163005,163007],{"id":163006},"_515-本章练习","5.15 本章练习",[23,163009,163010,163017,163023,163029,163035],{},[26,163011,163012,163013,163016],{},"定义函数 ",[65,163014,163015],{},"print_student(name, age)","，输出学生信息。",[26,163018,163012,163019,163022],{},[65,163020,163021],{},"get_max(a, b, c)","，返回三个数中的最大值。",[26,163024,163012,163025,163028],{},[65,163026,163027],{},"is_even(num)","，判断一个数是否为偶数。",[26,163030,163012,163031,163034],{},[65,163032,163033],{},"calculate_bmi(weight, height)","，返回 BMI。",[26,163036,163037],{},"把第 4 章的菜单程序拆分成多个函数。",[250,163039,163040],{},"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":63,"searchDepth":92,"depth":92,"links":163042},[163043,163044,163045,163046,163047,163048,163049,163050,163051,163055,163056,163057,163058,163059,163060],{"id":161063,"depth":92,"text":161064},{"id":161104,"depth":92,"text":161105},{"id":161194,"depth":92,"text":161195},{"id":161275,"depth":92,"text":161276},{"id":161408,"depth":92,"text":161409},{"id":161530,"depth":92,"text":161531},{"id":161652,"depth":92,"text":161653},{"id":161729,"depth":92,"text":161730},{"id":161851,"depth":92,"text":161852,"children":163052},[163053,163054],{"id":161855,"depth":1387,"text":161856},{"id":161913,"depth":1387,"text":161914},{"id":162042,"depth":92,"text":162043},{"id":162168,"depth":92,"text":162169},{"id":162281,"depth":92,"text":162282},{"id":162437,"depth":92,"text":162438},{"id":162908,"depth":92,"text":162909},{"id":163006,"depth":92,"text":163007},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161055,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163067,"title":163068,"body":163069,"description":257,"extension":258,"meta":166113,"navigation":260,"path":166114,"seo":166115,"stem":166116,"__hash__":166117},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163070,"toc":166094},[163071,163074,163078,163081,163084,163188,163191,163195,163198,163278,163281,163285,163288,163348,163351,163387,163390,163405,163409,163482,163485,163540,163543,163613,163616,163700,163710,163768,163772,163817,163820,163846,163849,163955,163959,163962,164004,164007,164071,164074,164078,164081,164142,164145,164175,164178,164216,164220,164223,164232,164235,164359,164362,164403,164407,164410,164421,164461,164464,164479,164484,164487,164554,164557,164647,164651,164654,164702,164705,164732,164734,164764,164767,164787,164790,164821,164824,164857,164861,164864,164888,164891,164915,164918,164942,164946,164949,165079,165082,165162,165165,165240,165244,165247,165297,165300,165342,165345,165369,165371,165395,165398,165453,165456,165522,165526,165529,165532,165570,165573,165626,165629,165675,165678,165711,165714,165718,166037,166041,166070,166074,166091],[10,163072,163068],{"id":163073},"_6-数据容器",[14,163075,163077],{"id":163076},"_61-什么是数据容器","6.1 什么是数据容器",[19,163079,163080],{},"数据容器用于一次保存多个数据。",[19,163082,163083],{},"常见容器：",[471,163085,163086,163103],{},[474,163087,163088],{},[477,163089,163090,163092,163095,163098,163101],{},[480,163091,25975],{},[480,163093,163094],{},"是否有序",[480,163096,163097],{},"是否可变",[480,163099,163100],{},"是否允许重复",[480,163102,27696],{},[518,163104,163105,163123,163139,163154,163171],{},[477,163106,163107,163110,163113,163116,163119],{},[523,163108,163109],{},"list列表",[523,163111,163112],{},"有序",[523,163114,163115],{},"可变",[523,163117,163118],{},"允许",[523,163120,163121],{},[65,163122,155401],{},[477,163124,163125,163128,163130,163133,163135],{},[523,163126,163127],{},"tuple元组",[523,163129,163112],{},[523,163131,163132],{},"不可变",[523,163134,163118],{},[523,163136,163137],{},[65,163138,155414],{},[477,163140,163141,163144,163146,163148,163150],{},[523,163142,163143],{},"str字符串",[523,163145,163112],{},[523,163147,163132],{},[523,163149,163118],{},[523,163151,163152],{},[65,163153,156024],{},[477,163155,163156,163159,163162,163164,163167],{},[523,163157,163158],{},"set集合",[523,163160,163161],{},"无序",[523,163163,163115],{},[523,163165,163166],{},"不允许",[523,163168,163169],{},[65,163170,155439],{},[477,163172,163173,163176,163178,163180,163183],{},[523,163174,163175],{},"dict字典",[523,163177,163112],{},[523,163179,163115],{},[523,163181,163182],{},"key不允许重复",[523,163184,163185],{},[65,163186,163187],{},"{\"name\": \"小明\"}",[19,163189,163190],{},"Python 3.7 之后，字典保持插入顺序。",[14,163192,163194],{"id":163193},"_62-列表list","6.2 列表list",[19,163196,163197],{},"列表用于保存一组有顺序的数据。",[58,163199,163201],{"className":30579,"code":163200,"language":30581,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[65,163202,163203,163223,163248,163269],{"__ignoreMap":63},[68,163204,163205,163207,163209,163211,163213,163215,163217,163219,163221],{"class":70,"line":71},[68,163206,160524],{"class":335},[68,163208,381],{"class":331},[68,163210,52427],{"class":335},[68,163212,150032],{"class":78},[68,163214,12640],{"class":335},[68,163216,151080],{"class":78},[68,163218,12640],{"class":335},[68,163220,159875],{"class":78},[68,163222,33447],{"class":335},[68,163224,163225,163228,163230,163232,163234,163236,163238,163240,163242,163244,163246],{"class":70,"line":92},[68,163226,163227],{"class":335},"numbers ",[68,163229,381],{"class":331},[68,163231,52427],{"class":335},[68,163233,551],{"class":82},[68,163235,12640],{"class":335},[68,163237,412],{"class":82},[68,163239,12640],{"class":335},[68,163241,406],{"class":82},[68,163243,12640],{"class":335},[68,163245,626],{"class":82},[68,163247,33447],{"class":335},[68,163249,163250,163253,163255,163257,163259,163261,163263,163265,163267],{"class":70,"line":1387},[68,163251,163252],{"class":335},"mixed ",[68,163254,381],{"class":331},[68,163256,52427],{"class":335},[68,163258,150032],{"class":78},[68,163260,12640],{"class":335},[68,163262,983],{"class":82},[68,163264,12640],{"class":335},[68,163266,31677],{"class":82},[68,163268,33447],{"class":335},[68,163270,163271,163274,163276],{"class":70,"line":1402},[68,163272,163273],{"class":335},"empty ",[68,163275,381],{"class":331},[68,163277,52039],{"class":335},[19,163279,163280],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163282,163284],{"id":163283},"_63-列表索引","6.3 列表索引",[19,163286,163287],{},"正向索引从 0 开始：",[58,163289,163291],{"className":30579,"code":163290,"language":30581,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[65,163292,163293,163313,163317,163328,163338],{"__ignoreMap":63},[68,163294,163295,163297,163299,163301,163303,163305,163307,163309,163311],{"class":70,"line":71},[68,163296,160524],{"class":335},[68,163298,381],{"class":331},[68,163300,52427],{"class":335},[68,163302,150032],{"class":78},[68,163304,12640],{"class":335},[68,163306,151080],{"class":78},[68,163308,12640],{"class":335},[68,163310,159875],{"class":78},[68,163312,33447],{"class":335},[68,163314,163315],{"class":70,"line":92},[68,163316,2606],{"emptyLinePlaceholder":260},[68,163318,163319,163321,163324,163326],{"class":70,"line":1387},[68,163320,30616],{"class":82},[68,163322,163323],{"class":335},"(names[",[68,163325,525],{"class":82},[68,163327,4863],{"class":335},[68,163329,163330,163332,163334,163336],{"class":70,"line":1402},[68,163331,30616],{"class":82},[68,163333,163323],{"class":335},[68,163335,551],{"class":82},[68,163337,4863],{"class":335},[68,163339,163340,163342,163344,163346],{"class":70,"line":1408},[68,163341,30616],{"class":82},[68,163343,163323],{"class":335},[68,163345,412],{"class":82},[68,163347,4863],{"class":335},[19,163349,163350],{},"反向索引从 -1 开始：",[58,163352,163354],{"className":30579,"code":163353,"language":30581,"meta":63,"style":63},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[65,163355,163356,163372],{"__ignoreMap":63},[68,163357,163358,163360,163362,163364,163366,163369],{"class":70,"line":71},[68,163359,30616],{"class":82},[68,163361,163323],{"class":335},[68,163363,865],{"class":331},[68,163365,551],{"class":82},[68,163367,163368],{"class":335},"])  ",[68,163370,163371],{"class":393},"# 小刚\n",[68,163373,163374,163376,163378,163380,163382,163384],{"class":70,"line":92},[68,163375,30616],{"class":82},[68,163377,163323],{"class":335},[68,163379,865],{"class":331},[68,163381,412],{"class":82},[68,163383,163368],{"class":335},[68,163385,163386],{"class":393},"# 小红\n",[19,163388,163389],{},"索引越界会报错：",[58,163391,163393],{"className":30579,"code":163392,"language":30581,"meta":63,"style":63},"print(names[3])\n",[65,163394,163395],{"__ignoreMap":63},[68,163396,163397,163399,163401,163403],{"class":70,"line":71},[68,163398,30616],{"class":82},[68,163400,163323],{"class":335},[68,163402,406],{"class":82},[68,163404,4863],{"class":335},[14,163406,163408],{"id":163407},"_64-列表常用方法","6.4 列表常用方法",[58,163410,163412],{"className":30579,"code":163411,"language":30581,"meta":63,"style":63},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[65,163413,163414,163430,163434,163443,163457,163471,163475],{"__ignoreMap":63},[68,163415,163416,163418,163420,163422,163424,163426,163428],{"class":70,"line":71},[68,163417,160524],{"class":335},[68,163419,381],{"class":331},[68,163421,52427],{"class":335},[68,163423,150032],{"class":78},[68,163425,12640],{"class":335},[68,163427,151080],{"class":78},[68,163429,33447],{"class":335},[68,163431,163432],{"class":70,"line":92},[68,163433,2606],{"emptyLinePlaceholder":260},[68,163435,163436,163439,163441],{"class":70,"line":1387},[68,163437,163438],{"class":335},"names.append(",[68,163440,159875],{"class":78},[68,163442,342],{"class":335},[68,163444,163445,163448,163450,163452,163455],{"class":70,"line":1402},[68,163446,163447],{"class":335},"names.insert(",[68,163449,551],{"class":82},[68,163451,12640],{"class":335},[68,163453,163454],{"class":78},"\"小李\"",[68,163456,342],{"class":335},[68,163458,163459,163462,163464,163466,163469],{"class":70,"line":1408},[68,163460,163461],{"class":335},"names.extend([",[68,163463,8888],{"class":78},[68,163465,12640],{"class":335},[68,163467,163468],{"class":78},"\"小赵\"",[68,163470,4863],{"class":335},[68,163472,163473],{"class":70,"line":1422},[68,163474,2606],{"emptyLinePlaceholder":260},[68,163476,163477,163479],{"class":70,"line":1428},[68,163478,30616],{"class":82},[68,163480,163481],{"class":335},"(names)\n",[19,163483,163484],{},"删除元素：",[58,163486,163488],{"className":30579,"code":163487,"language":30581,"meta":63,"style":63},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[65,163489,163490,163499,163509,163523,163535],{"__ignoreMap":63},[68,163491,163492,163495,163497],{"class":70,"line":71},[68,163493,163494],{"class":335},"names.remove(",[68,163496,151080],{"class":78},[68,163498,342],{"class":335},[68,163500,163501,163504,163506],{"class":70,"line":92},[68,163502,163503],{"class":335},"last ",[68,163505,381],{"class":331},[68,163507,163508],{"class":335}," names.pop()\n",[68,163510,163511,163514,163516,163519,163521],{"class":70,"line":1387},[68,163512,163513],{"class":335},"first ",[68,163515,381],{"class":331},[68,163517,163518],{"class":335}," names.pop(",[68,163520,525],{"class":82},[68,163522,342],{"class":335},[68,163524,163525,163528,163531,163533],{"class":70,"line":1402},[68,163526,163527],{"class":331},"del",[68,163529,163530],{"class":335}," names[",[68,163532,525],{"class":82},[68,163534,33447],{"class":335},[68,163536,163537],{"class":70,"line":1408},[68,163538,163539],{"class":335},"names.clear()\n",[19,163541,163542],{},"查询和统计：",[58,163544,163546],{"className":30579,"code":163545,"language":30581,"meta":63,"style":63},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[65,163547,163548,163576,163580,163591,163602],{"__ignoreMap":63},[68,163549,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568,163570,163572,163574],{"class":70,"line":71},[68,163551,163227],{"class":335},[68,163553,381],{"class":331},[68,163555,52427],{"class":335},[68,163557,551],{"class":82},[68,163559,12640],{"class":335},[68,163561,412],{"class":82},[68,163563,12640],{"class":335},[68,163565,406],{"class":82},[68,163567,12640],{"class":335},[68,163569,412],{"class":82},[68,163571,12640],{"class":335},[68,163573,626],{"class":82},[68,163575,33447],{"class":335},[68,163577,163578],{"class":70,"line":92},[68,163579,2606],{"emptyLinePlaceholder":260},[68,163581,163582,163584,163587,163589],{"class":70,"line":1387},[68,163583,30616],{"class":82},[68,163585,163586],{"class":335},"(numbers.index(",[68,163588,406],{"class":82},[68,163590,30698],{"class":335},[68,163592,163593,163595,163598,163600],{"class":70,"line":1402},[68,163594,30616],{"class":82},[68,163596,163597],{"class":335},"(numbers.count(",[68,163599,412],{"class":82},[68,163601,30698],{"class":335},[68,163603,163604,163606,163608,163610],{"class":70,"line":1408},[68,163605,30616],{"class":82},[68,163607,336],{"class":335},[68,163609,7563],{"class":82},[68,163611,163612],{"class":335},"(numbers))\n",[19,163614,163615],{},"排序：",[58,163617,163619],{"className":30579,"code":163618,"language":30581,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[65,163620,163621,163645,163649,163654,163661,163665,163679,163685,163689,163694],{"__ignoreMap":63},[68,163622,163623,163625,163627,163629,163631,163633,163635,163637,163639,163641,163643],{"class":70,"line":71},[68,163624,163227],{"class":335},[68,163626,381],{"class":331},[68,163628,52427],{"class":335},[68,163630,406],{"class":82},[68,163632,12640],{"class":335},[68,163634,551],{"class":82},[68,163636,12640],{"class":335},[68,163638,652],{"class":82},[68,163640,12640],{"class":335},[68,163642,412],{"class":82},[68,163644,33447],{"class":335},[68,163646,163647],{"class":70,"line":92},[68,163648,2606],{"emptyLinePlaceholder":260},[68,163650,163651],{"class":70,"line":1387},[68,163652,163653],{"class":335},"numbers.sort()\n",[68,163655,163656,163658],{"class":70,"line":1402},[68,163657,30616],{"class":82},[68,163659,163660],{"class":335},"(numbers)\n",[68,163662,163663],{"class":70,"line":1408},[68,163664,2606],{"emptyLinePlaceholder":260},[68,163666,163667,163670,163673,163675,163677],{"class":70,"line":1422},[68,163668,163669],{"class":335},"numbers.sort(",[68,163671,163672],{"class":5421},"reverse",[68,163674,381],{"class":331},[68,163676,31677],{"class":82},[68,163678,342],{"class":335},[68,163680,163681,163683],{"class":70,"line":1428},[68,163682,30616],{"class":82},[68,163684,163660],{"class":335},[68,163686,163687],{"class":70,"line":1519},[68,163688,2606],{"emptyLinePlaceholder":260},[68,163690,163691],{"class":70,"line":1525},[68,163692,163693],{"class":335},"numbers.reverse()\n",[68,163695,163696,163698],{"class":70,"line":1537},[68,163697,30616],{"class":82},[68,163699,163660],{"class":335},[19,163701,163702,163705,163706,163709],{},[65,163703,163704],{},"sort()"," 会修改原列表，",[65,163707,163708],{},"sorted()"," 返回新列表。",[58,163711,163713],{"className":30579,"code":163712,"language":30581,"meta":63,"style":63},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[65,163714,163715,163739,163751,163755,163761],{"__ignoreMap":63},[68,163716,163717,163719,163721,163723,163725,163727,163729,163731,163733,163735,163737],{"class":70,"line":71},[68,163718,163227],{"class":335},[68,163720,381],{"class":331},[68,163722,52427],{"class":335},[68,163724,406],{"class":82},[68,163726,12640],{"class":335},[68,163728,551],{"class":82},[68,163730,12640],{"class":335},[68,163732,652],{"class":82},[68,163734,12640],{"class":335},[68,163736,412],{"class":82},[68,163738,33447],{"class":335},[68,163740,163741,163744,163746,163749],{"class":70,"line":92},[68,163742,163743],{"class":335},"new_numbers ",[68,163745,381],{"class":331},[68,163747,163748],{"class":82}," sorted",[68,163750,163660],{"class":335},[68,163752,163753],{"class":70,"line":1387},[68,163754,2606],{"emptyLinePlaceholder":260},[68,163756,163757,163759],{"class":70,"line":1402},[68,163758,30616],{"class":82},[68,163760,163660],{"class":335},[68,163762,163763,163765],{"class":70,"line":1408},[68,163764,30616],{"class":82},[68,163766,163767],{"class":335},"(new_numbers)\n",[14,163769,163771],{"id":163770},"_65-列表遍历","6.5 列表遍历",[58,163773,163775],{"className":30579,"code":163774,"language":30581,"meta":63,"style":63},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[65,163776,163777,163797,163801,163811],{"__ignoreMap":63},[68,163778,163779,163781,163783,163785,163787,163789,163791,163793,163795],{"class":70,"line":71},[68,163780,160524],{"class":335},[68,163782,381],{"class":331},[68,163784,52427],{"class":335},[68,163786,150032],{"class":78},[68,163788,12640],{"class":335},[68,163790,151080],{"class":78},[68,163792,12640],{"class":335},[68,163794,159875],{"class":78},[68,163796,33447],{"class":335},[68,163798,163799],{"class":70,"line":92},[68,163800,2606],{"emptyLinePlaceholder":260},[68,163802,163803,163805,163807,163809],{"class":70,"line":1387},[68,163804,3231],{"class":331},[68,163806,160560],{"class":335},[68,163808,26247],{"class":331},[68,163810,160565],{"class":335},[68,163812,163813,163815],{"class":70,"line":1402},[68,163814,31500],{"class":82},[68,163816,150804],{"class":335},[19,163818,163819],{},"需要索引时：",[58,163821,163823],{"className":30579,"code":163822,"language":30581,"meta":63,"style":63},"for index, name in enumerate(names):\n    print(index, name)\n",[65,163824,163825,163839],{"__ignoreMap":63},[68,163826,163827,163829,163832,163834,163836],{"class":70,"line":71},[68,163828,3231],{"class":331},[68,163830,163831],{"class":335}," index, name ",[68,163833,26247],{"class":331},[68,163835,31807],{"class":82},[68,163837,163838],{"class":335},"(names):\n",[68,163840,163841,163843],{"class":70,"line":92},[68,163842,31500],{"class":82},[68,163844,163845],{"class":335},"(index, name)\n",[19,163847,163848],{},"统计总分：",[58,163850,163852],{"className":30579,"code":163851,"language":30581,"meta":63,"style":63},"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",[65,163853,163854,163879,163887,163891,163902,163910,163914,163931],{"__ignoreMap":63},[68,163855,163856,163859,163861,163863,163865,163867,163869,163871,163873,163875,163877],{"class":70,"line":71},[68,163857,163858],{"class":335},"scores ",[68,163860,381],{"class":331},[68,163862,52427],{"class":335},[68,163864,1195],{"class":82},[68,163866,12640],{"class":335},[68,163868,1069],{"class":82},[68,163870,12640],{"class":335},[68,163872,587],{"class":82},[68,163874,12640],{"class":335},[68,163876,894],{"class":82},[68,163878,33447],{"class":335},[68,163880,163881,163883,163885],{"class":70,"line":92},[68,163882,157404],{"class":335},[68,163884,381],{"class":331},[68,163886,47534],{"class":82},[68,163888,163889],{"class":70,"line":1387},[68,163890,2606],{"emptyLinePlaceholder":260},[68,163892,163893,163895,163897,163899],{"class":70,"line":1402},[68,163894,3231],{"class":331},[68,163896,157927],{"class":335},[68,163898,26247],{"class":331},[68,163900,163901],{"class":335}," scores:\n",[68,163903,163904,163906,163908],{"class":70,"line":1408},[68,163905,159451],{"class":335},[68,163907,9682],{"class":331},[68,163909,1786],{"class":335},[68,163911,163912],{"class":70,"line":1422},[68,163913,2606],{"emptyLinePlaceholder":260},[68,163915,163916,163919,163921,163924,163926,163928],{"class":70,"line":1428},[68,163917,163918],{"class":335},"avg ",[68,163920,381],{"class":331},[68,163922,163923],{"class":335}," total ",[68,163925,917],{"class":331},[68,163927,7536],{"class":82},[68,163929,163930],{"class":335},"(scores)\n",[68,163932,163933,163935,163937,163939,163942,163944,163947,163949,163951,163953],{"class":70,"line":1519},[68,163934,30616],{"class":82},[68,163936,336],{"class":335},[68,163938,387],{"class":331},[68,163940,163941],{"class":78},"\"平均分:",[68,163943,1229],{"class":82},[68,163945,163946],{"class":335},"avg",[68,163948,157303],{"class":331},[68,163950,1279],{"class":82},[68,163952,584],{"class":78},[68,163954,342],{"class":335},[14,163956,163958],{"id":163957},"_66-元组tuple","6.6 元组tuple",[19,163960,163961],{},"元组和列表类似，但不可修改。",[58,163963,163965],{"className":30579,"code":163964,"language":30581,"meta":63,"style":63},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[65,163966,163967,163984],{"__ignoreMap":63},[68,163968,163969,163972,163974,163976,163978,163980,163982],{"class":70,"line":71},[68,163970,163971],{"class":335},"point ",[68,163973,381],{"class":331},[68,163975,1865],{"class":335},[68,163977,779],{"class":82},[68,163979,12640],{"class":335},[68,163981,1033],{"class":82},[68,163983,342],{"class":335},[68,163985,163986,163988,163990,163992,163994,163996,163998,164000,164002],{"class":70,"line":92},[68,163987,116514],{"class":335},[68,163989,381],{"class":331},[68,163991,1865],{"class":335},[68,163993,150032],{"class":78},[68,163995,12640],{"class":335},[68,163997,983],{"class":82},[68,163999,12640],{"class":335},[68,164001,69470],{"class":78},[68,164003,342],{"class":335},[19,164005,164006],{},"单元素元组必须加逗号：",[58,164008,164010],{"className":30579,"code":164009,"language":30581,"meta":63,"style":63},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[65,164011,164012,164026,164039,164043,164057],{"__ignoreMap":63},[68,164013,164014,164017,164019,164021,164023],{"class":70,"line":71},[68,164015,164016],{"class":335},"t1 ",[68,164018,381],{"class":331},[68,164020,1865],{"class":335},[68,164022,779],{"class":82},[68,164024,164025],{"class":335},",)\n",[68,164027,164028,164031,164033,164035,164037],{"class":70,"line":92},[68,164029,164030],{"class":335},"t2 ",[68,164032,381],{"class":331},[68,164034,1865],{"class":335},[68,164036,779],{"class":82},[68,164038,342],{"class":335},[68,164040,164041],{"class":70,"line":1387},[68,164042,2606],{"emptyLinePlaceholder":260},[68,164044,164045,164047,164049,164051,164054],{"class":70,"line":1402},[68,164046,30616],{"class":82},[68,164048,336],{"class":335},[68,164050,103307],{"class":82},[68,164052,164053],{"class":335},"(t1))  ",[68,164055,164056],{"class":393},"# tuple\n",[68,164058,164059,164061,164063,164065,164068],{"class":70,"line":1408},[68,164060,30616],{"class":82},[68,164062,336],{"class":335},[68,164064,103307],{"class":82},[68,164066,164067],{"class":335},"(t2))  ",[68,164069,164070],{"class":393},"# int\n",[19,164072,164073],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164075,164077],{"id":164076},"_67-字符串str","6.7 字符串str",[19,164079,164080],{},"字符串也是序列，可以索引、切片和遍历。",[58,164082,164084],{"className":30579,"code":164083,"language":30581,"meta":63,"style":63},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[65,164085,164086,164094,164098,164109,164121,164125,164136],{"__ignoreMap":63},[68,164087,164088,164090,164092],{"class":70,"line":71},[68,164089,156588],{"class":335},[68,164091,381],{"class":331},[68,164093,159825],{"class":78},[68,164095,164096],{"class":70,"line":92},[68,164097,2606],{"emptyLinePlaceholder":260},[68,164099,164100,164102,164105,164107],{"class":70,"line":1387},[68,164101,30616],{"class":82},[68,164103,164104],{"class":335},"(text[",[68,164106,525],{"class":82},[68,164108,4863],{"class":335},[68,164110,164111,164113,164115,164117,164119],{"class":70,"line":1402},[68,164112,30616],{"class":82},[68,164114,164104],{"class":335},[68,164116,865],{"class":331},[68,164118,551],{"class":82},[68,164120,4863],{"class":335},[68,164122,164123],{"class":70,"line":1408},[68,164124,2606],{"emptyLinePlaceholder":260},[68,164126,164127,164129,164131,164133],{"class":70,"line":1422},[68,164128,3231],{"class":331},[68,164130,159836],{"class":335},[68,164132,26247],{"class":331},[68,164134,164135],{"class":335}," text:\n",[68,164137,164138,164140],{"class":70,"line":1428},[68,164139,31500],{"class":82},[68,164141,159847],{"class":335},[19,164143,164144],{},"字符串不可变：",[58,164146,164148],{"className":30579,"code":164147,"language":30581,"meta":63,"style":63},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[65,164149,164150,164158],{"__ignoreMap":63},[68,164151,164152,164154,164156],{"class":70,"line":71},[68,164153,156588],{"class":335},[68,164155,381],{"class":331},[68,164157,159825],{"class":78},[68,164159,164160,164163,164165,164167,164169,164172],{"class":70,"line":92},[68,164161,164162],{"class":335},"text[",[68,164164,525],{"class":82},[68,164166,4649],{"class":335},[68,164168,381],{"class":331},[68,164170,164171],{"class":78}," \"P\"",[68,164173,164174],{"class":393},"  # 报错\n",[19,164176,164177],{},"如果要得到新字符串：",[58,164179,164181],{"className":30579,"code":164180,"language":30581,"meta":63,"style":63},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[65,164182,164183,164191,164209],{"__ignoreMap":63},[68,164184,164185,164187,164189],{"class":70,"line":71},[68,164186,156588],{"class":335},[68,164188,381],{"class":331},[68,164190,159825],{"class":78},[68,164192,164193,164195,164197,164199,164201,164204,164206],{"class":70,"line":92},[68,164194,156588],{"class":335},[68,164196,381],{"class":331},[68,164198,164171],{"class":78},[68,164200,45767],{"class":331},[68,164202,164203],{"class":335}," text[",[68,164205,551],{"class":82},[68,164207,164208],{"class":335},":]\n",[68,164210,164211,164213],{"class":70,"line":1387},[68,164212,30616],{"class":82},[68,164214,164215],{"class":335},"(text)\n",[14,164217,164219],{"id":164218},"_68-切片","6.8 切片",[19,164221,164222],{},"切片用于从序列中取一部分。",[58,164224,164226],{"className":30579,"code":164225,"language":30581,"meta":63,"style":63},"序列[开始:结束:步长]\n",[65,164227,164228],{"__ignoreMap":63},[68,164229,164230],{"class":70,"line":71},[68,164231,164225],{"class":335},[19,164233,164234],{},"结束位置不包含。",[58,164236,164238],{"className":30579,"code":164237,"language":30581,"meta":63,"style":63},"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",[65,164239,164240,164277,164281,164300,164315,164329,164343],{"__ignoreMap":63},[68,164241,164242,164245,164247,164249,164251,164253,164255,164257,164259,164261,164263,164265,164267,164269,164271,164273,164275],{"class":70,"line":71},[68,164243,164244],{"class":335},"nums ",[68,164246,381],{"class":331},[68,164248,52427],{"class":335},[68,164250,525],{"class":82},[68,164252,12640],{"class":335},[68,164254,551],{"class":82},[68,164256,12640],{"class":335},[68,164258,412],{"class":82},[68,164260,12640],{"class":335},[68,164262,406],{"class":82},[68,164264,12640],{"class":335},[68,164266,626],{"class":82},[68,164268,12640],{"class":335},[68,164270,652],{"class":82},[68,164272,12640],{"class":335},[68,164274,677],{"class":82},[68,164276,33447],{"class":335},[68,164278,164279],{"class":70,"line":92},[68,164280,2606],{"emptyLinePlaceholder":260},[68,164282,164283,164285,164288,164290,164292,164294,164297],{"class":70,"line":1387},[68,164284,30616],{"class":82},[68,164286,164287],{"class":335},"(nums[",[68,164289,551],{"class":82},[68,164291,1192],{"class":335},[68,164293,626],{"class":82},[68,164295,164296],{"class":335},"])    ",[68,164298,164299],{"class":393},"# [1, 2, 3]\n",[68,164301,164302,164304,164307,164309,164312],{"class":70,"line":1402},[68,164303,30616],{"class":82},[68,164305,164306],{"class":335},"(nums[:",[68,164308,406],{"class":82},[68,164310,164311],{"class":335},"])     ",[68,164313,164314],{"class":393},"# [0, 1, 2]\n",[68,164316,164317,164319,164321,164323,164326],{"class":70,"line":1408},[68,164318,30616],{"class":82},[68,164320,164287],{"class":335},[68,164322,406],{"class":82},[68,164324,164325],{"class":335},":])     ",[68,164327,164328],{"class":393},"# [3, 4, 5, 6]\n",[68,164330,164331,164333,164336,164338,164340],{"class":70,"line":1422},[68,164332,30616],{"class":82},[68,164334,164335],{"class":335},"(nums[::",[68,164337,412],{"class":82},[68,164339,164296],{"class":335},[68,164341,164342],{"class":393},"# [0, 2, 4, 6]\n",[68,164344,164345,164347,164349,164351,164353,164356],{"class":70,"line":1428},[68,164346,30616],{"class":82},[68,164348,164335],{"class":335},[68,164350,865],{"class":331},[68,164352,551],{"class":82},[68,164354,164355],{"class":335},"])   ",[68,164357,164358],{"class":393},"# 反转\n",[19,164360,164361],{},"字符串切片：",[58,164363,164365],{"className":30579,"code":164364,"language":30581,"meta":63,"style":63},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[65,164366,164367,164376,164390],{"__ignoreMap":63},[68,164368,164369,164371,164373],{"class":70,"line":71},[68,164370,156588],{"class":335},[68,164372,381],{"class":331},[68,164374,164375],{"class":78}," \"abcdef\"\n",[68,164377,164378,164380,164382,164384,164386,164388],{"class":70,"line":92},[68,164379,30616],{"class":82},[68,164381,164104],{"class":335},[68,164383,551],{"class":82},[68,164385,1192],{"class":335},[68,164387,626],{"class":82},[68,164389,4863],{"class":335},[68,164391,164392,164394,164397,164399,164401],{"class":70,"line":1387},[68,164393,30616],{"class":82},[68,164395,164396],{"class":335},"(text[::",[68,164398,865],{"class":331},[68,164400,551],{"class":82},[68,164402,4863],{"class":335},[14,164404,164406],{"id":164405},"_69-集合set","6.9 集合set",[19,164408,164409],{},"集合特点：",[23,164411,164412,164415,164418],{},[26,164413,164414],{},"无序。",[26,164416,164417],{},"元素不重复。",[26,164419,164420],{},"可以做交集、并集、差集。",[58,164422,164424],{"className":30579,"code":164423,"language":30581,"meta":63,"style":63},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[65,164425,164426,164454],{"__ignoreMap":63},[68,164427,164428,164430,164432,164434,164436,164438,164440,164442,164444,164446,164448,164450,164452],{"class":70,"line":71},[68,164429,164244],{"class":335},[68,164431,381],{"class":331},[68,164433,4654],{"class":335},[68,164435,551],{"class":82},[68,164437,12640],{"class":335},[68,164439,412],{"class":82},[68,164441,12640],{"class":335},[68,164443,406],{"class":82},[68,164445,12640],{"class":335},[68,164447,406],{"class":82},[68,164449,12640],{"class":335},[68,164451,626],{"class":82},[68,164453,1772],{"class":335},[68,164455,164456,164458],{"class":70,"line":92},[68,164457,30616],{"class":82},[68,164459,164460],{"class":335},"(nums)\n",[19,164462,164463],{},"创建空集合：",[58,164465,164467],{"className":30579,"code":164466,"language":30581,"meta":63,"style":63},"s = set()\n",[65,164468,164469],{"__ignoreMap":63},[68,164470,164471,164473,164475,164477],{"class":70,"line":71},[68,164472,10784],{"class":335},[68,164474,381],{"class":331},[68,164476,119919],{"class":82},[68,164478,2182],{"class":335},[19,164480,9230,164481,164483],{},[65,164482,32660],{}," 是空字典，不是空集合。",[19,164485,164486],{},"集合常用操作：",[58,164488,164490],{"className":30579,"code":164489,"language":30581,"meta":63,"style":63},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[65,164491,164492,164512,164516,164525,164534,164543],{"__ignoreMap":63},[68,164493,164494,164496,164498,164500,164502,164504,164506,164508,164510],{"class":70,"line":71},[68,164495,10784],{"class":335},[68,164497,381],{"class":331},[68,164499,4654],{"class":335},[68,164501,551],{"class":82},[68,164503,12640],{"class":335},[68,164505,412],{"class":82},[68,164507,12640],{"class":335},[68,164509,406],{"class":82},[68,164511,1772],{"class":335},[68,164513,164514],{"class":70,"line":92},[68,164515,2606],{"emptyLinePlaceholder":260},[68,164517,164518,164521,164523],{"class":70,"line":1387},[68,164519,164520],{"class":335},"s.add(",[68,164522,626],{"class":82},[68,164524,342],{"class":335},[68,164526,164527,164530,164532],{"class":70,"line":1402},[68,164528,164529],{"class":335},"s.remove(",[68,164531,412],{"class":82},[68,164533,342],{"class":335},[68,164535,164536,164539,164541],{"class":70,"line":1408},[68,164537,164538],{"class":335},"s.discard(",[68,164540,779],{"class":82},[68,164542,342],{"class":335},[68,164544,164545,164547,164549,164551],{"class":70,"line":1422},[68,164546,30616],{"class":82},[68,164548,336],{"class":335},[68,164550,7563],{"class":82},[68,164552,164553],{"class":335},"(s))\n",[19,164555,164556],{},"交并差：",[58,164558,164560],{"className":30579,"code":164559,"language":30581,"meta":63,"style":63},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[65,164561,164562,164582,164602,164606,164621,164634],{"__ignoreMap":63},[68,164563,164564,164566,164568,164570,164572,164574,164576,164578,164580],{"class":70,"line":71},[68,164565,11124],{"class":335},[68,164567,381],{"class":331},[68,164569,4654],{"class":335},[68,164571,551],{"class":82},[68,164573,12640],{"class":335},[68,164575,412],{"class":82},[68,164577,12640],{"class":335},[68,164579,406],{"class":82},[68,164581,1772],{"class":335},[68,164583,164584,164586,164588,164590,164592,164594,164596,164598,164600],{"class":70,"line":92},[68,164585,11150],{"class":335},[68,164587,381],{"class":331},[68,164589,4654],{"class":335},[68,164591,406],{"class":82},[68,164593,12640],{"class":335},[68,164595,626],{"class":82},[68,164597,12640],{"class":335},[68,164599,652],{"class":82},[68,164601,1772],{"class":335},[68,164603,164604],{"class":70,"line":1387},[68,164605,2606],{"emptyLinePlaceholder":260},[68,164607,164608,164610,164613,164615,164618],{"class":70,"line":1402},[68,164609,30616],{"class":82},[68,164611,164612],{"class":335},"(a ",[68,164614,686],{"class":331},[68,164616,164617],{"class":335}," b)  ",[68,164619,164620],{"class":393},"# 交集\n",[68,164622,164623,164625,164627,164629,164631],{"class":70,"line":1408},[68,164624,30616],{"class":82},[68,164626,164612],{"class":335},[68,164628,1254],{"class":331},[68,164630,164617],{"class":335},[68,164632,164633],{"class":393},"# 并集\n",[68,164635,164636,164638,164640,164642,164644],{"class":70,"line":1422},[68,164637,30616],{"class":82},[68,164639,164612],{"class":335},[68,164641,865],{"class":331},[68,164643,164617],{"class":335},[68,164645,164646],{"class":393},"# 差集\n",[14,164648,164650],{"id":164649},"_610-字典dict","6.10 字典dict",[19,164652,164653],{},"字典通过 key-value 保存数据。",[58,164655,164657],{"className":30579,"code":164656,"language":30581,"meta":63,"style":63},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[65,164658,164659,164667,164677,164688,164698],{"__ignoreMap":63},[68,164660,164661,164663,164665],{"class":70,"line":71},[68,164662,149625],{"class":335},[68,164664,381],{"class":331},[68,164666,15777],{"class":335},[68,164668,164669,164671,164673,164675],{"class":70,"line":92},[68,164670,147164],{"class":78},[68,164672,51638],{"class":335},[68,164674,150032],{"class":78},[68,164676,31667],{"class":335},[68,164678,164679,164682,164684,164686],{"class":70,"line":1387},[68,164680,164681],{"class":78},"    \"age\"",[68,164683,51638],{"class":335},[68,164685,983],{"class":82},[68,164687,31667],{"class":335},[68,164689,164690,164693,164695],{"class":70,"line":1402},[68,164691,164692],{"class":78},"    \"score\"",[68,164694,51638],{"class":335},[68,164696,164697],{"class":82},"95\n",[68,164699,164700],{"class":70,"line":1408},[68,164701,1772],{"class":335},[19,164703,164704],{},"获取值：",[58,164706,164708],{"className":30579,"code":164707,"language":30581,"meta":63,"style":63},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[65,164709,164710,164721],{"__ignoreMap":63},[68,164711,164712,164714,164717,164719],{"class":70,"line":71},[68,164713,30616],{"class":82},[68,164715,164716],{"class":335},"(student[",[68,164718,62880],{"class":78},[68,164720,4863],{"class":335},[68,164722,164723,164725,164728,164730],{"class":70,"line":92},[68,164724,30616],{"class":82},[68,164726,164727],{"class":335},"(student.get(",[68,164729,62880],{"class":78},[68,164731,30698],{"class":335},[19,164733,15593],{},[58,164735,164737],{"className":30579,"code":164736,"language":30581,"meta":63,"style":63},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[65,164738,164739,164752],{"__ignoreMap":63},[68,164740,164741,164743,164746,164749],{"class":70,"line":71},[68,164742,153003],{"class":335},[68,164744,164745],{"class":78},"\"address\"",[68,164747,164748],{"class":335},"]     ",[68,164750,164751],{"class":393},"# key不存在会报错\n",[68,164753,164754,164757,164759,164761],{"class":70,"line":92},[68,164755,164756],{"class":335},"student.get(",[68,164758,164745],{"class":78},[68,164760,13919],{"class":335},[68,164762,164763],{"class":393},"# key不存在返回None\n",[19,164765,164766],{},"设置默认值：",[58,164768,164770],{"className":30579,"code":164769,"language":30581,"meta":63,"style":63},"print(student.get(\"address\", \"未知\"))\n",[65,164771,164772],{"__ignoreMap":63},[68,164773,164774,164776,164778,164780,164782,164785],{"class":70,"line":71},[68,164775,30616],{"class":82},[68,164777,164727],{"class":335},[68,164779,164745],{"class":78},[68,164781,12640],{"class":335},[68,164783,164784],{"class":78},"\"未知\"",[68,164786,30698],{"class":335},[19,164788,164789],{},"新增和修改：",[58,164791,164793],{"className":30579,"code":164792,"language":30581,"meta":63,"style":63},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[65,164794,164795,164808],{"__ignoreMap":63},[68,164796,164797,164799,164801,164803,164805],{"class":70,"line":71},[68,164798,153003],{"class":335},[68,164800,69325],{"class":78},[68,164802,4649],{"class":335},[68,164804,381],{"class":331},[68,164806,164807],{"class":82}," 19\n",[68,164809,164810,164812,164814,164816,164818],{"class":70,"line":92},[68,164811,153003],{"class":335},[68,164813,164745],{"class":78},[68,164815,4649],{"class":335},[68,164817,381],{"class":331},[68,164819,164820],{"class":78}," \"北京\"\n",[19,164822,164823],{},"删除：",[58,164825,164827],{"className":30579,"code":164826,"language":30581,"meta":63,"style":63},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[65,164828,164829,164842,164852],{"__ignoreMap":63},[68,164830,164831,164833,164835,164838,164840],{"class":70,"line":71},[68,164832,155502],{"class":335},[68,164834,381],{"class":331},[68,164836,164837],{"class":335}," student.pop(",[68,164839,151616],{"class":78},[68,164841,342],{"class":335},[68,164843,164844,164846,164848,164850],{"class":70,"line":92},[68,164845,163527],{"class":331},[68,164847,152293],{"class":335},[68,164849,69325],{"class":78},[68,164851,33447],{"class":335},[68,164853,164854],{"class":70,"line":1387},[68,164855,164856],{"class":335},"student.clear()\n",[14,164858,164860],{"id":164859},"_611-字典遍历","6.11 字典遍历",[19,164862,164863],{},"遍历 key：",[58,164865,164867],{"className":30579,"code":164866,"language":30581,"meta":63,"style":63},"for key in student:\n    print(key, student[key])\n",[65,164868,164869,164881],{"__ignoreMap":63},[68,164870,164871,164873,164876,164878],{"class":70,"line":71},[68,164872,3231],{"class":331},[68,164874,164875],{"class":335}," key ",[68,164877,26247],{"class":331},[68,164879,164880],{"class":335}," student:\n",[68,164882,164883,164885],{"class":70,"line":92},[68,164884,31500],{"class":82},[68,164886,164887],{"class":335},"(key, student[key])\n",[19,164889,164890],{},"遍历 value：",[58,164892,164894],{"className":30579,"code":164893,"language":30581,"meta":63,"style":63},"for value in student.values():\n    print(value)\n",[65,164895,164896,164908],{"__ignoreMap":63},[68,164897,164898,164900,164903,164905],{"class":70,"line":71},[68,164899,3231],{"class":331},[68,164901,164902],{"class":335}," value ",[68,164904,26247],{"class":331},[68,164906,164907],{"class":335}," student.values():\n",[68,164909,164910,164912],{"class":70,"line":92},[68,164911,31500],{"class":82},[68,164913,164914],{"class":335},"(value)\n",[19,164916,164917],{},"遍历 key 和 value：",[58,164919,164921],{"className":30579,"code":164920,"language":30581,"meta":63,"style":63},"for key, value in student.items():\n    print(key, value)\n",[65,164922,164923,164935],{"__ignoreMap":63},[68,164924,164925,164927,164930,164932],{"class":70,"line":71},[68,164926,3231],{"class":331},[68,164928,164929],{"class":335}," key, value ",[68,164931,26247],{"class":331},[68,164933,164934],{"class":335}," student.items():\n",[68,164936,164937,164939],{"class":70,"line":92},[68,164938,31500],{"class":82},[68,164940,164941],{"class":335},"(key, value)\n",[14,164943,164945],{"id":164944},"_612-嵌套容器","6.12 嵌套容器",[19,164947,164948],{},"列表中保存字典，是项目中最常见的结构之一。",[58,164950,164952],{"className":30579,"code":164951,"language":30581,"meta":63,"style":63},"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",[65,164953,164954,164962,164990,165018,165046,165050,165054,165064],{"__ignoreMap":63},[68,164955,164956,164958,164960],{"class":70,"line":71},[68,164957,159860],{"class":335},[68,164959,381],{"class":331},[68,164961,55648],{"class":335},[68,164963,164964,164966,164968,164970,164972,164974,164976,164978,164980,164982,164984,164986,164988],{"class":70,"line":92},[68,164965,148529],{"class":335},[68,164967,62880],{"class":78},[68,164969,51638],{"class":335},[68,164971,150032],{"class":78},[68,164973,12640],{"class":335},[68,164975,69325],{"class":78},[68,164977,51638],{"class":335},[68,164979,983],{"class":82},[68,164981,12640],{"class":335},[68,164983,151616],{"class":78},[68,164985,51638],{"class":335},[68,164987,1322],{"class":82},[68,164989,5136],{"class":335},[68,164991,164992,164994,164996,164998,165000,165002,165004,165006,165008,165010,165012,165014,165016],{"class":70,"line":1387},[68,164993,148529],{"class":335},[68,164995,62880],{"class":78},[68,164997,51638],{"class":335},[68,164999,151080],{"class":78},[68,165001,12640],{"class":335},[68,165003,69325],{"class":78},[68,165005,51638],{"class":335},[68,165007,958],{"class":82},[68,165009,12640],{"class":335},[68,165011,151616],{"class":78},[68,165013,51638],{"class":335},[68,165015,1144],{"class":82},[68,165017,5136],{"class":335},[68,165019,165020,165022,165024,165026,165028,165030,165032,165034,165036,165038,165040,165042,165044],{"class":70,"line":1402},[68,165021,148529],{"class":335},[68,165023,62880],{"class":78},[68,165025,51638],{"class":335},[68,165027,159875],{"class":78},[68,165029,12640],{"class":335},[68,165031,69325],{"class":78},[68,165033,51638],{"class":335},[68,165035,1008],{"class":82},[68,165037,12640],{"class":335},[68,165039,151616],{"class":78},[68,165041,51638],{"class":335},[68,165043,739],{"class":82},[68,165045,5136],{"class":335},[68,165047,165048],{"class":70,"line":1408},[68,165049,33447],{"class":335},[68,165051,165052],{"class":70,"line":1422},[68,165053,2606],{"emptyLinePlaceholder":260},[68,165055,165056,165058,165060,165062],{"class":70,"line":1428},[68,165057,3231],{"class":331},[68,165059,152281],{"class":335},[68,165061,26247],{"class":331},[68,165063,152286],{"class":335},[68,165065,165066,165068,165070,165072,165075,165077],{"class":70,"line":1519},[68,165067,31500],{"class":82},[68,165069,164716],{"class":335},[68,165071,62880],{"class":78},[68,165073,165074],{"class":335},"], student[",[68,165076,151616],{"class":78},[68,165078,4863],{"class":335},[19,165080,165081],{},"统计平均分：",[58,165083,165085],{"className":30579,"code":165084,"language":30581,"meta":63,"style":63},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[65,165086,165087,165095,165099,165109,165121,165125,165140],{"__ignoreMap":63},[68,165088,165089,165091,165093],{"class":70,"line":71},[68,165090,157404],{"class":335},[68,165092,381],{"class":331},[68,165094,47534],{"class":82},[68,165096,165097],{"class":70,"line":92},[68,165098,2606],{"emptyLinePlaceholder":260},[68,165100,165101,165103,165105,165107],{"class":70,"line":1387},[68,165102,3231],{"class":331},[68,165104,152281],{"class":335},[68,165106,26247],{"class":331},[68,165108,152286],{"class":335},[68,165110,165111,165113,165115,165117,165119],{"class":70,"line":1402},[68,165112,159451],{"class":335},[68,165114,9682],{"class":331},[68,165116,152293],{"class":335},[68,165118,151616],{"class":78},[68,165120,33447],{"class":335},[68,165122,165123],{"class":70,"line":1408},[68,165124,2606],{"emptyLinePlaceholder":260},[68,165126,165127,165129,165131,165133,165135,165137],{"class":70,"line":1422},[68,165128,163918],{"class":335},[68,165130,381],{"class":331},[68,165132,163923],{"class":335},[68,165134,917],{"class":331},[68,165136,7536],{"class":82},[68,165138,165139],{"class":335},"(students)\n",[68,165141,165142,165144,165146,165148,165150,165152,165154,165156,165158,165160],{"class":70,"line":1428},[68,165143,30616],{"class":82},[68,165145,336],{"class":335},[68,165147,387],{"class":331},[68,165149,163941],{"class":78},[68,165151,1229],{"class":82},[68,165153,163946],{"class":335},[68,165155,157303],{"class":331},[68,165157,1279],{"class":82},[68,165159,584],{"class":78},[68,165161,342],{"class":335},[19,165163,165164],{},"查找学生：",[58,165166,165168],{"className":30579,"code":165167,"language":30581,"meta":63,"style":63},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[65,165169,165170,165185,165189,165199,165213,165219,165223,165229],{"__ignoreMap":63},[68,165171,165172,165174,165176,165178,165180,165183],{"class":70,"line":71},[68,165173,111778],{"class":335},[68,165175,381],{"class":331},[68,165177,60806],{"class":82},[68,165179,336],{"class":335},[68,165181,165182],{"class":78},"\"请输入学生姓名:\"",[68,165184,342],{"class":335},[68,165186,165187],{"class":70,"line":92},[68,165188,2606],{"emptyLinePlaceholder":260},[68,165190,165191,165193,165195,165197],{"class":70,"line":1387},[68,165192,3231],{"class":331},[68,165194,152281],{"class":335},[68,165196,26247],{"class":331},[68,165198,152286],{"class":335},[68,165200,165201,165203,165205,165207,165209,165211],{"class":70,"line":1402},[68,165202,3307],{"class":331},[68,165204,152293],{"class":335},[68,165206,62880],{"class":78},[68,165208,4649],{"class":335},[68,165210,3155],{"class":331},[68,165212,160576],{"class":335},[68,165214,165215,165217],{"class":70,"line":1408},[68,165216,32652],{"class":82},[68,165218,150186],{"class":335},[68,165220,165221],{"class":70,"line":1422},[68,165222,31828],{"class":331},[68,165224,165225,165227],{"class":70,"line":1428},[68,165226,1908],{"class":331},[68,165228,3945],{"class":335},[68,165230,165231,165233,165235,165238],{"class":70,"line":1519},[68,165232,31500],{"class":82},[68,165234,336],{"class":335},[68,165236,165237],{"class":78},"\"没有找到\"",[68,165239,342],{"class":335},[14,165241,165243],{"id":165242},"_613-容器通用操作","6.13 容器通用操作",[19,165245,165246],{},"长度：",[58,165248,165250],{"className":30579,"code":165249,"language":30581,"meta":63,"style":63},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[65,165251,165252,165271,165281],{"__ignoreMap":63},[68,165253,165254,165256,165259,165261,165263,165265,165267,165269],{"class":70,"line":71},[68,165255,7563],{"class":82},[68,165257,165258],{"class":335},"([",[68,165260,551],{"class":82},[68,165262,12640],{"class":335},[68,165264,412],{"class":82},[68,165266,12640],{"class":335},[68,165268,406],{"class":82},[68,165270,4863],{"class":335},[68,165272,165273,165275,165277,165279],{"class":70,"line":92},[68,165274,7563],{"class":82},[68,165276,336],{"class":335},[68,165278,156024],{"class":78},[68,165280,342],{"class":335},[68,165282,165283,165285,165288,165290,165292,165294],{"class":70,"line":1387},[68,165284,7563],{"class":82},[68,165286,165287],{"class":335},"({",[68,165289,62880],{"class":78},[68,165291,51638],{"class":335},[68,165293,150032],{"class":78},[68,165295,165296],{"class":335},"})\n",[19,165298,165299],{},"最大最小：",[58,165301,165303],{"className":30579,"code":165302,"language":30581,"meta":63,"style":63},"max([1, 2, 3])\nmin([1, 2, 3])\n",[65,165304,165305,165323],{"__ignoreMap":63},[68,165306,165307,165309,165311,165313,165315,165317,165319,165321],{"class":70,"line":71},[68,165308,6220],{"class":82},[68,165310,165258],{"class":335},[68,165312,551],{"class":82},[68,165314,12640],{"class":335},[68,165316,412],{"class":82},[68,165318,12640],{"class":335},[68,165320,406],{"class":82},[68,165322,4863],{"class":335},[68,165324,165325,165328,165330,165332,165334,165336,165338,165340],{"class":70,"line":92},[68,165326,165327],{"class":82},"min",[68,165329,165258],{"class":335},[68,165331,551],{"class":82},[68,165333,12640],{"class":335},[68,165335,412],{"class":82},[68,165337,12640],{"class":335},[68,165339,406],{"class":82},[68,165341,4863],{"class":335},[19,165343,165344],{},"求和：",[58,165346,165348],{"className":30579,"code":165347,"language":30581,"meta":63,"style":63},"sum([1, 2, 3])\n",[65,165349,165350],{"__ignoreMap":63},[68,165351,165352,165355,165357,165359,165361,165363,165365,165367],{"class":70,"line":71},[68,165353,165354],{"class":82},"sum",[68,165356,165258],{"class":335},[68,165358,551],{"class":82},[68,165360,12640],{"class":335},[68,165362,412],{"class":82},[68,165364,12640],{"class":335},[68,165366,406],{"class":82},[68,165368,4863],{"class":335},[19,165370,163615],{},[58,165372,165374],{"className":30579,"code":165373,"language":30581,"meta":63,"style":63},"sorted([3, 1, 2])\n",[65,165375,165376],{"__ignoreMap":63},[68,165377,165378,165381,165383,165385,165387,165389,165391,165393],{"class":70,"line":71},[68,165379,165380],{"class":82},"sorted",[68,165382,165258],{"class":335},[68,165384,406],{"class":82},[68,165386,12640],{"class":335},[68,165388,551],{"class":82},[68,165390,12640],{"class":335},[68,165392,412],{"class":82},[68,165394,4863],{"class":335},[19,165396,165397],{},"类型转换：",[58,165399,165401],{"className":30579,"code":165400,"language":30581,"meta":63,"style":63},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[65,165402,165403,165413,165431],{"__ignoreMap":63},[68,165404,165405,165407,165409,165411],{"class":70,"line":71},[68,165406,154214],{"class":82},[68,165408,336],{"class":335},[68,165410,156024],{"class":78},[68,165412,342],{"class":335},[68,165414,165415,165417,165419,165421,165423,165425,165427,165429],{"class":70,"line":92},[68,165416,155409],{"class":82},[68,165418,165258],{"class":335},[68,165420,551],{"class":82},[68,165422,12640],{"class":335},[68,165424,412],{"class":82},[68,165426,12640],{"class":335},[68,165428,406],{"class":82},[68,165430,4863],{"class":335},[68,165432,165433,165435,165437,165439,165441,165443,165445,165447,165449,165451],{"class":70,"line":1387},[68,165434,155434],{"class":82},[68,165436,165258],{"class":335},[68,165438,551],{"class":82},[68,165440,12640],{"class":335},[68,165442,551],{"class":82},[68,165444,12640],{"class":335},[68,165446,412],{"class":82},[68,165448,12640],{"class":335},[68,165450,406],{"class":82},[68,165452,4863],{"class":335},[19,165454,165455],{},"成员判断：",[58,165457,165459],{"className":30579,"code":165458,"language":30581,"meta":63,"style":63},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[65,165460,165461,165478,165502],{"__ignoreMap":63},[68,165462,165463,165465,165467,165470,165473,165476],{"class":70,"line":71},[68,165464,30616],{"class":82},[68,165466,336],{"class":335},[68,165468,165469],{"class":78},"\"a\"",[68,165471,165472],{"class":331}," in",[68,165474,165475],{"class":78}," \"abc\"",[68,165477,342],{"class":335},[68,165479,165480,165482,165484,165486,165488,165490,165492,165494,165496,165498,165500],{"class":70,"line":92},[68,165481,30616],{"class":82},[68,165483,336],{"class":335},[68,165485,551],{"class":82},[68,165487,165472],{"class":331},[68,165489,52427],{"class":335},[68,165491,551],{"class":82},[68,165493,12640],{"class":335},[68,165495,412],{"class":82},[68,165497,12640],{"class":335},[68,165499,406],{"class":82},[68,165501,4863],{"class":335},[68,165503,165504,165506,165508,165510,165512,165514,165516,165518,165520],{"class":70,"line":1387},[68,165505,30616],{"class":82},[68,165507,336],{"class":335},[68,165509,62880],{"class":78},[68,165511,165472],{"class":331},[68,165513,4654],{"class":335},[68,165515,62880],{"class":78},[68,165517,51638],{"class":335},[68,165519,150032],{"class":78},[68,165521,165296],{"class":335},[14,165523,165525],{"id":165524},"_614-推导式","6.14 推导式",[19,165527,165528],{},"推导式用于快速生成容器。",[19,165530,165531],{},"列表推导式：",[58,165533,165535],{"className":30579,"code":165534,"language":30581,"meta":63,"style":63},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[65,165536,165537,165564],{"__ignoreMap":63},[68,165538,165539,165541,165543,165546,165548,165550,165552,165554,165556,165558,165560,165562],{"class":70,"line":71},[68,165540,164244],{"class":335},[68,165542,381],{"class":331},[68,165544,165545],{"class":335}," [i ",[68,165547,3231],{"class":331},[68,165549,9643],{"class":335},[68,165551,26247],{"class":331},[68,165553,32644],{"class":82},[68,165555,336],{"class":335},[68,165557,551],{"class":82},[68,165559,12640],{"class":335},[68,165561,677],{"class":82},[68,165563,97501],{"class":335},[68,165565,165566,165568],{"class":70,"line":92},[68,165567,30616],{"class":82},[68,165569,164460],{"class":335},[19,165571,165572],{},"带条件：",[58,165574,165576],{"className":30579,"code":165575,"language":30581,"meta":63,"style":63},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[65,165577,165578,165619],{"__ignoreMap":63},[68,165579,165580,165583,165585,165587,165589,165591,165593,165595,165597,165599,165601,165603,165605,165607,165609,165611,165613,165615,165617],{"class":70,"line":71},[68,165581,165582],{"class":335},"even_nums ",[68,165584,381],{"class":331},[68,165586,165545],{"class":335},[68,165588,3231],{"class":331},[68,165590,9643],{"class":335},[68,165592,26247],{"class":331},[68,165594,32644],{"class":82},[68,165596,336],{"class":335},[68,165598,551],{"class":82},[68,165600,12640],{"class":335},[68,165602,670],{"class":82},[68,165604,13919],{"class":335},[68,165606,1738],{"class":331},[68,165608,9643],{"class":335},[68,165610,661],{"class":331},[68,165612,14960],{"class":82},[68,165614,101759],{"class":331},[68,165616,4299],{"class":82},[68,165618,33447],{"class":335},[68,165620,165621,165623],{"class":70,"line":92},[68,165622,30616],{"class":82},[68,165624,165625],{"class":335},"(even_nums)\n",[19,165627,165628],{},"字典推导式：",[58,165630,165632],{"className":30579,"code":165631,"language":30581,"meta":63,"style":63},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[65,165633,165634,165668],{"__ignoreMap":63},[68,165635,165636,165639,165641,165644,165646,165648,165651,165653,165655,165657,165659,165661,165663,165665],{"class":70,"line":71},[68,165637,165638],{"class":335},"squares ",[68,165640,381],{"class":331},[68,165642,165643],{"class":335}," {i: i ",[68,165645,10866],{"class":331},[68,165647,14960],{"class":82},[68,165649,165650],{"class":331}," for",[68,165652,9643],{"class":335},[68,165654,26247],{"class":331},[68,165656,32644],{"class":82},[68,165658,336],{"class":335},[68,165660,551],{"class":82},[68,165662,12640],{"class":335},[68,165664,677],{"class":82},[68,165666,165667],{"class":335},")}\n",[68,165669,165670,165672],{"class":70,"line":92},[68,165671,30616],{"class":82},[68,165673,165674],{"class":335},"(squares)\n",[19,165676,165677],{},"集合推导式：",[58,165679,165681],{"className":30579,"code":165680,"language":30581,"meta":63,"style":63},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[65,165682,165683,165704],{"__ignoreMap":63},[68,165684,165685,165688,165690,165693,165695,165697,165699,165702],{"class":70,"line":71},[68,165686,165687],{"class":335},"chars ",[68,165689,381],{"class":331},[68,165691,165692],{"class":335}," {ch ",[68,165694,3231],{"class":331},[68,165696,159836],{"class":335},[68,165698,26247],{"class":331},[68,165700,165701],{"class":78}," \"hello\"",[68,165703,1772],{"class":335},[68,165705,165706,165708],{"class":70,"line":92},[68,165707,30616],{"class":82},[68,165709,165710],{"class":335},"(chars)\n",[19,165712,165713],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165715,165717],{"id":165716},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[58,165719,165721],{"className":30579,"code":165720,"language":30581,"meta":63,"style":63},"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",[65,165722,165723,165731,165751,165771,165791,165811,165815,165819,165827,165841,165850,165854,165864,165876,165880,165900,165909,165913,165929,165934,165938,165952,165956,165978,166014],{"__ignoreMap":63},[68,165724,165725,165727,165729],{"class":70,"line":71},[68,165726,159860],{"class":335},[68,165728,381],{"class":331},[68,165730,55648],{"class":335},[68,165732,165733,165735,165737,165739,165741,165743,165745,165747,165749],{"class":70,"line":92},[68,165734,148529],{"class":335},[68,165736,62880],{"class":78},[68,165738,51638],{"class":335},[68,165740,150032],{"class":78},[68,165742,12640],{"class":335},[68,165744,151616],{"class":78},[68,165746,51638],{"class":335},[68,165748,1322],{"class":82},[68,165750,5136],{"class":335},[68,165752,165753,165755,165757,165759,165761,165763,165765,165767,165769],{"class":70,"line":1387},[68,165754,148529],{"class":335},[68,165756,62880],{"class":78},[68,165758,51638],{"class":335},[68,165760,151080],{"class":78},[68,165762,12640],{"class":335},[68,165764,151616],{"class":78},[68,165766,51638],{"class":335},[68,165768,1144],{"class":82},[68,165770,5136],{"class":335},[68,165772,165773,165775,165777,165779,165781,165783,165785,165787,165789],{"class":70,"line":1402},[68,165774,148529],{"class":335},[68,165776,62880],{"class":78},[68,165778,51638],{"class":335},[68,165780,159875],{"class":78},[68,165782,12640],{"class":335},[68,165784,151616],{"class":78},[68,165786,51638],{"class":335},[68,165788,739],{"class":82},[68,165790,5136],{"class":335},[68,165792,165793,165795,165797,165799,165801,165803,165805,165807,165809],{"class":70,"line":1408},[68,165794,148529],{"class":335},[68,165796,62880],{"class":78},[68,165798,51638],{"class":335},[68,165800,163454],{"class":78},[68,165802,12640],{"class":335},[68,165804,151616],{"class":78},[68,165806,51638],{"class":335},[68,165808,1215],{"class":82},[68,165810,5136],{"class":335},[68,165812,165813],{"class":70,"line":1422},[68,165814,33447],{"class":335},[68,165816,165817],{"class":70,"line":1428},[68,165818,2606],{"emptyLinePlaceholder":260},[68,165820,165821,165823,165825],{"class":70,"line":1519},[68,165822,157404],{"class":335},[68,165824,381],{"class":331},[68,165826,47534],{"class":82},[68,165828,165829,165832,165834,165837,165839],{"class":70,"line":1525},[68,165830,165831],{"class":335},"max_student ",[68,165833,381],{"class":331},[68,165835,165836],{"class":335}," students[",[68,165838,525],{"class":82},[68,165840,33447],{"class":335},[68,165842,165843,165846,165848],{"class":70,"line":1537},[68,165844,165845],{"class":335},"passed ",[68,165847,381],{"class":331},[68,165849,52039],{"class":335},[68,165851,165852],{"class":70,"line":1819},[68,165853,2606],{"emptyLinePlaceholder":260},[68,165855,165856,165858,165860,165862],{"class":70,"line":1824},[68,165857,3231],{"class":331},[68,165859,152281],{"class":335},[68,165861,26247],{"class":331},[68,165863,152286],{"class":335},[68,165865,165866,165868,165870,165872,165874],{"class":70,"line":1830},[68,165867,159451],{"class":335},[68,165869,9682],{"class":331},[68,165871,152293],{"class":335},[68,165873,151616],{"class":78},[68,165875,33447],{"class":335},[68,165877,165878],{"class":70,"line":1835},[68,165879,2606],{"emptyLinePlaceholder":260},[68,165881,165882,165884,165886,165888,165890,165892,165895,165897],{"class":70,"line":1849},[68,165883,3307],{"class":331},[68,165885,152293],{"class":335},[68,165887,151616],{"class":78},[68,165889,4649],{"class":335},[68,165891,1293],{"class":331},[68,165893,165894],{"class":335}," max_student[",[68,165896,151616],{"class":78},[68,165898,165899],{"class":335},"]:\n",[68,165901,165902,165905,165907],{"class":70,"line":1854},[68,165903,165904],{"class":335},"        max_student ",[68,165906,381],{"class":331},[68,165908,152309],{"class":335},[68,165910,165911],{"class":70,"line":1860},[68,165912,2606],{"emptyLinePlaceholder":260},[68,165914,165915,165917,165919,165921,165923,165925,165927],{"class":70,"line":1881},[68,165916,3307],{"class":331},[68,165918,152293],{"class":335},[68,165920,151616],{"class":78},[68,165922,4649],{"class":335},[68,165924,1917],{"class":331},[68,165926,157981],{"class":82},[68,165928,3945],{"class":335},[68,165930,165931],{"class":70,"line":1886},[68,165932,165933],{"class":335},"        passed.append(student)\n",[68,165935,165936],{"class":70,"line":1900},[68,165937,2606],{"emptyLinePlaceholder":260},[68,165939,165940,165942,165944,165946,165948,165950],{"class":70,"line":1905},[68,165941,163918],{"class":335},[68,165943,381],{"class":331},[68,165945,163923],{"class":335},[68,165947,917],{"class":331},[68,165949,7536],{"class":82},[68,165951,165139],{"class":335},[68,165953,165954],{"class":70,"line":1934},[68,165955,2606],{"emptyLinePlaceholder":260},[68,165957,165958,165960,165962,165964,165966,165968,165970,165972,165974,165976],{"class":70,"line":1939},[68,165959,30616],{"class":82},[68,165961,336],{"class":335},[68,165963,387],{"class":331},[68,165965,163941],{"class":78},[68,165967,1229],{"class":82},[68,165969,163946],{"class":335},[68,165971,157303],{"class":331},[68,165973,1279],{"class":82},[68,165975,584],{"class":78},[68,165977,342],{"class":335},[68,165979,165980,165982,165984,165986,165989,165991,165994,165996,165998,166000,166002,166004,166006,166008,166010,166012],{"class":70,"line":1956},[68,165981,30616],{"class":82},[68,165983,336],{"class":335},[68,165985,387],{"class":331},[68,165987,165988],{"class":78},"\"最高分学生:",[68,165990,1229],{"class":82},[68,165992,165993],{"class":335},"max_student[",[68,165995,153026],{"class":78},[68,165997,1273],{"class":335},[68,165999,1279],{"class":82},[68,166001,4654],{"class":82},[68,166003,165993],{"class":335},[68,166005,153064],{"class":78},[68,166007,1273],{"class":335},[68,166009,1279],{"class":82},[68,166011,584],{"class":78},[68,166013,342],{"class":335},[68,166015,166016,166018,166020,166022,166025,166028,166031,166033,166035],{"class":70,"line":1961},[68,166017,30616],{"class":82},[68,166019,336],{"class":335},[68,166021,387],{"class":331},[68,166023,166024],{"class":78},"\"及格人数:",[68,166026,166027],{"class":82},"{len",[68,166029,166030],{"class":335},"(passed)",[68,166032,1279],{"class":82},[68,166034,584],{"class":78},[68,166036,342],{"class":335},[14,166038,166040],{"id":166039},"_616-易错点","6.16 易错点",[23,166042,166043,166046,166049,166052,166058,166067],{},[26,166044,166045],{},"列表可变，元组和字符串不可变。",[26,166047,166048],{},"切片结束位置不包含。",[26,166050,166051],{},"字典通过 key 取值，不是通过索引。",[26,166053,166054,166055,28588],{},"空集合要用 ",[65,166056,166057],{},"set()",[26,166059,104566,166060,166063,166064,28588],{},[65,166061,166062],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[65,166065,166066],{},"get()",[26,166068,166069],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166071,166073],{"id":166072},"_617-本章练习","6.17 本章练习",[23,166075,166076,166079,166082,166085,166088],{},[26,166077,166078],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[26,166080,166081],{},"输入一句话，统计每个字符出现次数。",[26,166083,166084],{},"使用集合去除列表中的重复元素。",[26,166086,166087],{},"使用字典保存一个学生的信息，并实现修改成绩。",[26,166089,166090],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[250,166092,166093],{},"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":63,"searchDepth":92,"depth":92,"links":166095},[166096,166097,166098,166099,166100,166101,166102,166103,166104,166105,166106,166107,166108,166109,166110,166111,166112],{"id":163076,"depth":92,"text":163077},{"id":163193,"depth":92,"text":163194},{"id":163283,"depth":92,"text":163284},{"id":163407,"depth":92,"text":163408},{"id":163770,"depth":92,"text":163771},{"id":163957,"depth":92,"text":163958},{"id":164076,"depth":92,"text":164077},{"id":164218,"depth":92,"text":164219},{"id":164405,"depth":92,"text":164406},{"id":164649,"depth":92,"text":164650},{"id":164859,"depth":92,"text":164860},{"id":164944,"depth":92,"text":164945},{"id":165242,"depth":92,"text":165243},{"id":165524,"depth":92,"text":165525},{"id":165716,"depth":92,"text":165717},{"id":166039,"depth":92,"text":166040},{"id":166072,"depth":92,"text":166073},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163068,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166119,"title":166120,"body":166121,"description":257,"extension":258,"meta":168293,"navigation":260,"path":168294,"seo":168295,"stem":168296,"__hash__":168297},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166122,"toc":168268},[166123,166126,166130,166133,166213,166216,166237,166240,166244,166247,166309,166312,166329,166333,166336,166381,166383,166391,166395,166398,166480,166483,166486,166511,166514,166537,166541,166544,166546,166608,166611,166613,166664,166668,166672,166678,166783,166787,166793,166864,166868,166871,166939,166942,167022,167026,167032,167068,167071,167074,167184,167190,167194,167197,167269,167272,167276,167280,167285,167347,167351,167356,167424,167428,167433,167549,167553,167556,167636,167639,167643,167646,167750,167752,167767,167770,167774,167912,167920,167924,167926,167937,167939,168197,168201,168233,168237,168265],[10,166124,166120],{"id":166125},"_7-函数进阶",[14,166127,166129],{"id":166128},"_71-多返回值","7.1 多返回值",[19,166131,166132],{},"Python 函数可以返回多个值，本质上返回的是元组。",[58,166134,166136],{"className":30579,"code":166135,"language":30581,"meta":63,"style":63},"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",[65,166137,166138,166147,166155,166163,166172,166179,166183,166187,166196,166202],{"__ignoreMap":63},[68,166139,166140,166142,166145],{"class":70,"line":71},[68,166141,32148],{"class":331},[68,166143,166144],{"class":74}," get_info",[68,166146,32154],{"class":335},[68,166148,166149,166151,166153],{"class":70,"line":92},[68,166150,152514],{"class":335},[68,166152,381],{"class":331},[68,166154,149497],{"class":78},[68,166156,166157,166159,166161],{"class":70,"line":1387},[68,166158,152530],{"class":335},[68,166160,381],{"class":331},[68,166162,146695],{"class":82},[68,166164,166165,166167,166169],{"class":70,"line":1402},[68,166166,152545],{"class":335},[68,166168,381],{"class":331},[68,166170,166171],{"class":82}," 95\n",[68,166173,166174,166176],{"class":70,"line":1408},[68,166175,4296],{"class":331},[68,166177,166178],{"class":335}," name, age, score\n",[68,166180,166181],{"class":70,"line":1422},[68,166182,2606],{"emptyLinePlaceholder":260},[68,166184,166185],{"class":70,"line":1428},[68,166186,2606],{"emptyLinePlaceholder":260},[68,166188,166189,166191,166193],{"class":70,"line":1519},[68,166190,161450],{"class":335},[68,166192,381],{"class":331},[68,166194,166195],{"class":335}," get_info()\n",[68,166197,166198,166200],{"class":70,"line":1525},[68,166199,30616],{"class":82},[68,166201,76786],{"class":335},[68,166203,166204,166206,166208,166210],{"class":70,"line":1537},[68,166205,30616],{"class":82},[68,166207,336],{"class":335},[68,166209,103307],{"class":82},[68,166211,166212],{"class":335},"(result))\n",[19,166214,166215],{},"可以直接解包：",[58,166217,166219],{"className":30579,"code":166218,"language":30581,"meta":63,"style":63},"name, age, score = get_info()\nprint(name, age, score)\n",[65,166220,166221,166230],{"__ignoreMap":63},[68,166222,166223,166226,166228],{"class":70,"line":71},[68,166224,166225],{"class":335},"name, age, score ",[68,166227,381],{"class":331},[68,166229,166195],{"class":335},[68,166231,166232,166234],{"class":70,"line":92},[68,166233,30616],{"class":82},[68,166235,166236],{"class":335},"(name, age, score)\n",[19,166238,166239],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166241,166243],{"id":166242},"_72-位置参数","7.2 位置参数",[19,166245,166246],{},"位置参数按顺序传递。",[58,166248,166250],{"className":30579,"code":166249,"language":30581,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[65,166251,166252,166260,166288,166292,166296],{"__ignoreMap":63},[68,166253,166254,166256,166258],{"class":70,"line":71},[68,166255,32148],{"class":331},[68,166257,149516],{"class":74},[68,166259,149519],{"class":335},[68,166261,166262,166264,166266,166268,166270,166272,166274,166276,166278,166280,166282,166284,166286],{"class":70,"line":92},[68,166263,31500],{"class":82},[68,166265,336],{"class":335},[68,166267,387],{"class":331},[68,166269,149530],{"class":78},[68,166271,1229],{"class":82},[68,166273,80011],{"class":335},[68,166275,1279],{"class":82},[68,166277,149539],{"class":78},[68,166279,1229],{"class":82},[68,166281,70422],{"class":335},[68,166283,1279],{"class":82},[68,166285,149548],{"class":78},[68,166287,342],{"class":335},[68,166289,166290],{"class":70,"line":1387},[68,166291,2606],{"emptyLinePlaceholder":260},[68,166293,166294],{"class":70,"line":1402},[68,166295,2606],{"emptyLinePlaceholder":260},[68,166297,166298,166301,166303,166305,166307],{"class":70,"line":1408},[68,166299,166300],{"class":335},"introduce(",[68,166302,150032],{"class":78},[68,166304,12640],{"class":335},[68,166306,983],{"class":82},[68,166308,342],{"class":335},[19,166310,166311],{},"顺序错了就会得到错误含义：",[58,166313,166315],{"className":30579,"code":166314,"language":30581,"meta":63,"style":63},"introduce(18, \"小明\")\n",[65,166316,166317],{"__ignoreMap":63},[68,166318,166319,166321,166323,166325,166327],{"class":70,"line":71},[68,166320,166300],{"class":335},[68,166322,983],{"class":82},[68,166324,12640],{"class":335},[68,166326,150032],{"class":78},[68,166328,342],{"class":335},[14,166330,166332],{"id":166331},"_73-关键字参数","7.3 关键字参数",[19,166334,166335],{},"关键字参数按参数名传递。",[58,166337,166339],{"className":30579,"code":166338,"language":30581,"meta":63,"style":63},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[65,166340,166341,166361],{"__ignoreMap":63},[68,166342,166343,166345,166347,166349,166351,166353,166355,166357,166359],{"class":70,"line":71},[68,166344,166300],{"class":335},[68,166346,80011],{"class":5421},[68,166348,381],{"class":331},[68,166350,150032],{"class":78},[68,166352,12640],{"class":335},[68,166354,70422],{"class":5421},[68,166356,381],{"class":331},[68,166358,983],{"class":82},[68,166360,342],{"class":335},[68,166362,166363,166365,166367,166369,166371,166373,166375,166377,166379],{"class":70,"line":92},[68,166364,166300],{"class":335},[68,166366,70422],{"class":5421},[68,166368,381],{"class":331},[68,166370,983],{"class":82},[68,166372,12640],{"class":335},[68,166374,80011],{"class":5421},[68,166376,381],{"class":331},[68,166378,150032],{"class":78},[68,166380,342],{"class":335},[19,166382,118132],{},[23,166384,166385,166388],{},[26,166386,166387],{},"顺序不容易错。",[26,166389,166390],{},"调用时可读性更强。",[14,166392,166394],{"id":166393},"_74-默认参数","7.4 默认参数",[19,166396,166397],{},"默认参数给参数设置默认值。",[58,166399,166401],{"className":30579,"code":166400,"language":30581,"meta":63,"style":63},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[65,166402,166403,166419,166449,166453,166457,166467],{"__ignoreMap":63},[68,166404,166405,166407,166409,166412,166414,166417],{"class":70,"line":71},[68,166406,32148],{"class":331},[68,166408,122290],{"class":74},[68,166410,166411],{"class":335},"(host, port",[68,166413,381],{"class":331},[68,166415,166416],{"class":82},"3306",[68,166418,30987],{"class":335},[68,166420,166421,166423,166425,166427,166430,166432,166434,166436,166438,166440,166443,166445,166447],{"class":70,"line":92},[68,166422,31500],{"class":82},[68,166424,336],{"class":335},[68,166426,387],{"class":331},[68,166428,166429],{"class":78},"\"连接",[68,166431,1229],{"class":82},[68,166433,27599],{"class":335},[68,166435,1279],{"class":82},[68,166437,1192],{"class":78},[68,166439,1229],{"class":82},[68,166441,166442],{"class":335},"port",[68,166444,1279],{"class":82},[68,166446,584],{"class":78},[68,166448,342],{"class":335},[68,166450,166451],{"class":70,"line":1387},[68,166452,2606],{"emptyLinePlaceholder":260},[68,166454,166455],{"class":70,"line":1402},[68,166456,2606],{"emptyLinePlaceholder":260},[68,166458,166459,166462,166465],{"class":70,"line":1408},[68,166460,166461],{"class":335},"connect(",[68,166463,166464],{"class":78},"\"localhost\"",[68,166466,342],{"class":335},[68,166468,166469,166471,166473,166475,166478],{"class":70,"line":1422},[68,166470,166461],{"class":335},[68,166472,166464],{"class":78},[68,166474,12640],{"class":335},[68,166476,166477],{"class":82},"6379",[68,166479,342],{"class":335},[19,166481,166482],{},"注意：默认参数必须放在非默认参数后面。",[19,166484,166485],{},"错误：",[58,166487,166489],{"className":30579,"code":166488,"language":30581,"meta":63,"style":63},"def connect(port=3306, host):\n    pass\n",[65,166490,166491,166507],{"__ignoreMap":63},[68,166492,166493,166495,166497,166500,166502,166504],{"class":70,"line":71},[68,166494,32148],{"class":331},[68,166496,122290],{"class":74},[68,166498,166499],{"class":335},"(port",[68,166501,381],{"class":331},[68,166503,166416],{"class":82},[68,166505,166506],{"class":335},", host):\n",[68,166508,166509],{"class":70,"line":92},[68,166510,149681],{"class":331},[19,166512,166513],{},"正确：",[58,166515,166517],{"className":30579,"code":166516,"language":30581,"meta":63,"style":63},"def connect(host, port=3306):\n    pass\n",[65,166518,166519,166533],{"__ignoreMap":63},[68,166520,166521,166523,166525,166527,166529,166531],{"class":70,"line":71},[68,166522,32148],{"class":331},[68,166524,122290],{"class":74},[68,166526,166411],{"class":335},[68,166528,381],{"class":331},[68,166530,166416],{"class":82},[68,166532,30987],{"class":335},[68,166534,166535],{"class":70,"line":92},[68,166536,149681],{"class":331},[14,166538,166540],{"id":166539},"_75-默认参数的坑","7.5 默认参数的坑",[19,166542,166543],{},"不要使用可变对象作为默认参数。",[19,166545,157767],{},[58,166547,166549],{"className":30579,"code":166548,"language":30581,"meta":63,"style":63},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[65,166550,166551,166566,166571,166578,166582,166586,166597],{"__ignoreMap":63},[68,166552,166553,166555,166558,166561,166563],{"class":70,"line":71},[68,166554,32148],{"class":331},[68,166556,166557],{"class":74}," add_item",[68,166559,166560],{"class":335},"(item, items",[68,166562,381],{"class":331},[68,166564,166565],{"class":335},"[]):\n",[68,166567,166568],{"class":70,"line":92},[68,166569,166570],{"class":335},"    items.append(item)\n",[68,166572,166573,166575],{"class":70,"line":1387},[68,166574,4296],{"class":331},[68,166576,166577],{"class":335}," items\n",[68,166579,166580],{"class":70,"line":1402},[68,166581,2606],{"emptyLinePlaceholder":260},[68,166583,166584],{"class":70,"line":1408},[68,166585,2606],{"emptyLinePlaceholder":260},[68,166587,166588,166590,166593,166595],{"class":70,"line":1422},[68,166589,30616],{"class":82},[68,166591,166592],{"class":335},"(add_item(",[68,166594,165469],{"class":78},[68,166596,30698],{"class":335},[68,166598,166599,166601,166603,166606],{"class":70,"line":1428},[68,166600,30616],{"class":82},[68,166602,166592],{"class":335},[68,166604,166605],{"class":78},"\"b\"",[68,166607,30698],{"class":335},[19,166609,166610],{},"第二次调用会复用第一次的列表。",[19,166612,156032],{},[58,166614,166616],{"className":30579,"code":166615,"language":30581,"meta":63,"style":63},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[65,166617,166618,166632,166645,166654,166658],{"__ignoreMap":63},[68,166619,166620,166622,166624,166626,166628,166630],{"class":70,"line":71},[68,166621,32148],{"class":331},[68,166623,166557],{"class":74},[68,166625,166560],{"class":335},[68,166627,381],{"class":331},[68,166629,95887],{"class":82},[68,166631,30987],{"class":335},[68,166633,166634,166636,166639,166641,166643],{"class":70,"line":92},[68,166635,3307],{"class":331},[68,166637,166638],{"class":335}," items ",[68,166640,39128],{"class":331},[68,166642,39134],{"class":82},[68,166644,3945],{"class":335},[68,166646,166647,166650,166652],{"class":70,"line":1387},[68,166648,166649],{"class":335},"        items ",[68,166651,381],{"class":331},[68,166653,52039],{"class":335},[68,166655,166656],{"class":70,"line":1402},[68,166657,166570],{"class":335},[68,166659,166660,166662],{"class":70,"line":1408},[68,166661,4296],{"class":331},[68,166663,166577],{"class":335},[14,166665,166667],{"id":166666},"_76-不定长参数","7.6 不定长参数",[301,166669,166671],{"id":166670},"_761-args","7.6.1 *args",[19,166673,166674,166677],{},[65,166675,166676],{},"*args"," 接收任意数量的位置参数，得到元组。",[58,166679,166681],{"className":30579,"code":166680,"language":30581,"meta":63,"style":63},"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",[65,166682,166683,166696,166704,166715,166724,166730,166734,166738,166757],{"__ignoreMap":63},[68,166684,166685,166687,166689,166691,166693],{"class":70,"line":71},[68,166686,32148],{"class":331},[68,166688,138],{"class":74},[68,166690,336],{"class":335},[68,166692,788],{"class":331},[68,166694,166695],{"class":335},"args):\n",[68,166697,166698,166700,166702],{"class":70,"line":92},[68,166699,159451],{"class":335},[68,166701,381],{"class":331},[68,166703,47534],{"class":82},[68,166705,166706,166708,166710,166712],{"class":70,"line":1387},[68,166707,3407],{"class":331},[68,166709,156324],{"class":335},[68,166711,26247],{"class":331},[68,166713,166714],{"class":335}," args:\n",[68,166716,166717,166719,166721],{"class":70,"line":1402},[68,166718,160126],{"class":335},[68,166720,9682],{"class":331},[68,166722,166723],{"class":335}," num\n",[68,166725,166726,166728],{"class":70,"line":1408},[68,166727,4296],{"class":331},[68,166729,162431],{"class":335},[68,166731,166732],{"class":70,"line":1422},[68,166733,2606],{"emptyLinePlaceholder":260},[68,166735,166736],{"class":70,"line":1428},[68,166737,2606],{"emptyLinePlaceholder":260},[68,166739,166740,166742,166745,166747,166749,166751,166753,166755],{"class":70,"line":1519},[68,166741,30616],{"class":82},[68,166743,166744],{"class":335},"(add(",[68,166746,551],{"class":82},[68,166748,12640],{"class":335},[68,166750,412],{"class":82},[68,166752,12640],{"class":335},[68,166754,406],{"class":82},[68,166756,30698],{"class":335},[68,166758,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777,166779,166781],{"class":70,"line":1525},[68,166760,30616],{"class":82},[68,166762,166744],{"class":335},[68,166764,551],{"class":82},[68,166766,12640],{"class":335},[68,166768,412],{"class":82},[68,166770,12640],{"class":335},[68,166772,406],{"class":82},[68,166774,12640],{"class":335},[68,166776,626],{"class":82},[68,166778,12640],{"class":335},[68,166780,652],{"class":82},[68,166782,30698],{"class":335},[301,166784,166786],{"id":166785},"_762-kwargs","7.6.2 **kwargs",[19,166788,166789,166792],{},[65,166790,166791],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[58,166794,166796],{"className":30579,"code":166795,"language":30581,"meta":63,"style":63},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[65,166797,166798,166811,166822,166828,166832,166836],{"__ignoreMap":63},[68,166799,166800,166802,166804,166806,166808],{"class":70,"line":71},[68,166801,32148],{"class":331},[68,166803,162089],{"class":74},[68,166805,336],{"class":335},[68,166807,10866],{"class":331},[68,166809,166810],{"class":335},"kwargs):\n",[68,166812,166813,166815,166817,166819],{"class":70,"line":92},[68,166814,3407],{"class":331},[68,166816,164929],{"class":335},[68,166818,26247],{"class":331},[68,166820,166821],{"class":335}," kwargs.items():\n",[68,166823,166824,166826],{"class":70,"line":1387},[68,166825,32652],{"class":82},[68,166827,164941],{"class":335},[68,166829,166830],{"class":70,"line":1402},[68,166831,2606],{"emptyLinePlaceholder":260},[68,166833,166834],{"class":70,"line":1408},[68,166835,2606],{"emptyLinePlaceholder":260},[68,166837,166838,166840,166842,166844,166846,166848,166850,166852,166854,166856,166858,166860,166862],{"class":70,"line":1422},[68,166839,162154],{"class":335},[68,166841,80011],{"class":5421},[68,166843,381],{"class":331},[68,166845,150032],{"class":78},[68,166847,12640],{"class":335},[68,166849,70422],{"class":5421},[68,166851,381],{"class":331},[68,166853,983],{"class":82},[68,166855,12640],{"class":335},[68,166857,70473],{"class":5421},[68,166859,381],{"class":331},[68,166861,69470],{"class":78},[68,166863,342],{"class":335},[14,166865,166867],{"id":166866},"_77-参数解包","7.7 参数解包",[19,166869,166870],{},"列表或元组解包为位置参数：",[58,166872,166874],{"className":30579,"code":166873,"language":30581,"meta":63,"style":63},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[65,166875,166876,166885,166900,166904,166908,166928],{"__ignoreMap":63},[68,166877,166878,166880,166882],{"class":70,"line":71},[68,166879,32148],{"class":331},[68,166881,138],{"class":74},[68,166883,166884],{"class":335},"(a, b, c):\n",[68,166886,166887,166889,166891,166893,166895,166897],{"class":70,"line":92},[68,166888,4296],{"class":331},[68,166890,11074],{"class":335},[68,166892,814],{"class":331},[68,166894,11087],{"class":335},[68,166896,814],{"class":331},[68,166898,166899],{"class":335}," c\n",[68,166901,166902],{"class":70,"line":1387},[68,166903,2606],{"emptyLinePlaceholder":260},[68,166905,166906],{"class":70,"line":1402},[68,166907,2606],{"emptyLinePlaceholder":260},[68,166909,166910,166912,166914,166916,166918,166920,166922,166924,166926],{"class":70,"line":1408},[68,166911,164244],{"class":335},[68,166913,381],{"class":331},[68,166915,52427],{"class":335},[68,166917,551],{"class":82},[68,166919,12640],{"class":335},[68,166921,412],{"class":82},[68,166923,12640],{"class":335},[68,166925,406],{"class":82},[68,166927,33447],{"class":335},[68,166929,166930,166932,166934,166936],{"class":70,"line":1422},[68,166931,30616],{"class":82},[68,166933,166744],{"class":335},[68,166935,788],{"class":331},[68,166937,166938],{"class":335},"nums))\n",[19,166940,166941],{},"字典解包为关键字参数：",[58,166943,166945],{"className":30579,"code":166944,"language":30581,"meta":63,"style":63},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[65,166946,166947,166955,166981,166985,166989,167013],{"__ignoreMap":63},[68,166948,166949,166951,166953],{"class":70,"line":71},[68,166950,32148],{"class":331},[68,166952,149516],{"class":74},[68,166954,149519],{"class":335},[68,166956,166957,166959,166961,166963,166965,166967,166969,166971,166973,166975,166977,166979],{"class":70,"line":92},[68,166958,31500],{"class":82},[68,166960,336],{"class":335},[68,166962,387],{"class":331},[68,166964,584],{"class":78},[68,166966,1229],{"class":82},[68,166968,80011],{"class":335},[68,166970,1279],{"class":82},[68,166972,4654],{"class":82},[68,166974,70422],{"class":335},[68,166976,1279],{"class":82},[68,166978,584],{"class":78},[68,166980,342],{"class":335},[68,166982,166983],{"class":70,"line":1387},[68,166984,2606],{"emptyLinePlaceholder":260},[68,166986,166987],{"class":70,"line":1402},[68,166988,2606],{"emptyLinePlaceholder":260},[68,166990,166991,166993,166995,166997,166999,167001,167003,167005,167007,167009,167011],{"class":70,"line":1408},[68,166992,116514],{"class":335},[68,166994,381],{"class":331},[68,166996,4654],{"class":335},[68,166998,62880],{"class":78},[68,167000,51638],{"class":335},[68,167002,150032],{"class":78},[68,167004,12640],{"class":335},[68,167006,69325],{"class":78},[68,167008,51638],{"class":335},[68,167010,983],{"class":82},[68,167012,1772],{"class":335},[68,167014,167015,167017,167019],{"class":70,"line":1422},[68,167016,166300],{"class":335},[68,167018,10866],{"class":331},[68,167020,167021],{"class":335},"info)\n",[14,167023,167025],{"id":167024},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167027,167028,167031],{},[65,167029,167030],{},"lambda"," 用于定义简单匿名函数。",[58,167033,167035],{"className":30579,"code":167034,"language":30581,"meta":63,"style":63},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[65,167036,167037,167054],{"__ignoreMap":63},[68,167038,167039,167042,167044,167047,167050,167052],{"class":70,"line":71},[68,167040,167041],{"class":335},"add ",[68,167043,381],{"class":331},[68,167045,167046],{"class":331}," lambda",[68,167048,167049],{"class":335}," a, b: a ",[68,167051,814],{"class":331},[68,167053,151248],{"class":335},[68,167055,167056,167058,167060,167062,167064,167066],{"class":70,"line":92},[68,167057,30616],{"class":82},[68,167059,166744],{"class":335},[68,167061,551],{"class":82},[68,167063,12640],{"class":335},[68,167065,412],{"class":82},[68,167067,30698],{"class":335},[19,167069,167070],{},"常和排序、过滤等函数一起使用。",[19,167072,167073],{},"按分数排序：",[58,167075,167077],{"className":30579,"code":167076,"language":30581,"meta":63,"style":63},"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",[65,167078,167079,167087,167107,167127,167147,167151,167155,167178],{"__ignoreMap":63},[68,167080,167081,167083,167085],{"class":70,"line":71},[68,167082,159860],{"class":335},[68,167084,381],{"class":331},[68,167086,55648],{"class":335},[68,167088,167089,167091,167093,167095,167097,167099,167101,167103,167105],{"class":70,"line":92},[68,167090,148529],{"class":335},[68,167092,62880],{"class":78},[68,167094,51638],{"class":335},[68,167096,150032],{"class":78},[68,167098,12640],{"class":335},[68,167100,151616],{"class":78},[68,167102,51638],{"class":335},[68,167104,1322],{"class":82},[68,167106,5136],{"class":335},[68,167108,167109,167111,167113,167115,167117,167119,167121,167123,167125],{"class":70,"line":1387},[68,167110,148529],{"class":335},[68,167112,62880],{"class":78},[68,167114,51638],{"class":335},[68,167116,151080],{"class":78},[68,167118,12640],{"class":335},[68,167120,151616],{"class":78},[68,167122,51638],{"class":335},[68,167124,1144],{"class":82},[68,167126,5136],{"class":335},[68,167128,167129,167131,167133,167135,167137,167139,167141,167143,167145],{"class":70,"line":1402},[68,167130,148529],{"class":335},[68,167132,62880],{"class":78},[68,167134,51638],{"class":335},[68,167136,159875],{"class":78},[68,167138,12640],{"class":335},[68,167140,151616],{"class":78},[68,167142,51638],{"class":335},[68,167144,739],{"class":82},[68,167146,5136],{"class":335},[68,167148,167149],{"class":70,"line":1408},[68,167150,33447],{"class":335},[68,167152,167153],{"class":70,"line":1422},[68,167154,2606],{"emptyLinePlaceholder":260},[68,167156,167157,167160,167162,167164,167166,167168,167170,167172,167174,167176],{"class":70,"line":1428},[68,167158,167159],{"class":335},"students.sort(",[68,167161,154090],{"class":5421},[68,167163,154093],{"class":331},[68,167165,154096],{"class":335},[68,167167,151616],{"class":78},[68,167169,112402],{"class":335},[68,167171,163672],{"class":5421},[68,167173,381],{"class":331},[68,167175,31677],{"class":82},[68,167177,342],{"class":335},[68,167179,167180,167182],{"class":70,"line":1519},[68,167181,30616],{"class":82},[68,167183,165139],{"class":335},[19,167185,167186,167187,167189],{},"如果逻辑复杂，不要硬写 ",[65,167188,167030],{},"，定义普通函数更清晰。",[14,167191,167193],{"id":167192},"_79-函数作为参数","7.9 函数作为参数",[19,167195,167196],{},"函数可以作为参数传给另一个函数。",[58,167198,167200],{"className":30579,"code":167199,"language":30581,"meta":63,"style":63},"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",[65,167201,167202,167210,167220,167224,167228,167238,167245,167249,167253],{"__ignoreMap":63},[68,167203,167204,167206,167208],{"class":70,"line":71},[68,167205,32148],{"class":331},[68,167207,138],{"class":74},[68,167209,151237],{"class":335},[68,167211,167212,167214,167216,167218],{"class":70,"line":92},[68,167213,4296],{"class":331},[68,167215,11074],{"class":335},[68,167217,814],{"class":331},[68,167219,151248],{"class":335},[68,167221,167222],{"class":70,"line":1387},[68,167223,2606],{"emptyLinePlaceholder":260},[68,167225,167226],{"class":70,"line":1402},[68,167227,2606],{"emptyLinePlaceholder":260},[68,167229,167230,167232,167235],{"class":70,"line":1408},[68,167231,32148],{"class":331},[68,167233,167234],{"class":74}," calculate",[68,167236,167237],{"class":335},"(a, b, func):\n",[68,167239,167240,167242],{"class":70,"line":1422},[68,167241,4296],{"class":331},[68,167243,167244],{"class":335}," func(a, b)\n",[68,167246,167247],{"class":70,"line":1428},[68,167248,2606],{"emptyLinePlaceholder":260},[68,167250,167251],{"class":70,"line":1519},[68,167252,2606],{"emptyLinePlaceholder":260},[68,167254,167255,167257,167260,167262,167264,167266],{"class":70,"line":1525},[68,167256,30616],{"class":82},[68,167258,167259],{"class":335},"(calculate(",[68,167261,779],{"class":82},[68,167263,12640],{"class":335},[68,167265,1033],{"class":82},[68,167267,167268],{"class":335},", add))\n",[19,167270,167271],{},"这种思想在排序、回调、框架中经常出现。",[14,167273,167275],{"id":167274},"_710-mapfiltersorted","7.10 map、filter、sorted",[301,167277,167279],{"id":167278},"_7101-map","7.10.1 map",[19,167281,167282,167284],{},[65,167283,74245],{}," 对每个元素执行函数。",[58,167286,167288],{"className":30579,"code":167287,"language":30581,"meta":63,"style":63},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[65,167289,167290,167314,167337],{"__ignoreMap":63},[68,167291,167292,167294,167296,167298,167300,167302,167304,167306,167308,167310,167312],{"class":70,"line":71},[68,167293,164244],{"class":335},[68,167295,381],{"class":331},[68,167297,52427],{"class":335},[68,167299,551],{"class":82},[68,167301,12640],{"class":335},[68,167303,412],{"class":82},[68,167305,12640],{"class":335},[68,167307,406],{"class":82},[68,167309,12640],{"class":335},[68,167311,626],{"class":82},[68,167313,33447],{"class":335},[68,167315,167316,167318,167320,167323,167325,167327,167330,167332,167334],{"class":70,"line":92},[68,167317,161450],{"class":335},[68,167319,381],{"class":331},[68,167321,167322],{"class":82}," map",[68,167324,336],{"class":335},[68,167326,167030],{"class":331},[68,167328,167329],{"class":335}," x: x ",[68,167331,788],{"class":331},[68,167333,14960],{"class":82},[68,167335,167336],{"class":335},", nums)\n",[68,167338,167339,167341,167343,167345],{"class":70,"line":1387},[68,167340,30616],{"class":82},[68,167342,336],{"class":335},[68,167344,154214],{"class":82},[68,167346,166212],{"class":335},[301,167348,167350],{"id":167349},"_7102-filter","7.10.2 filter",[19,167352,167353,167355],{},[65,167354,80252],{}," 保留满足条件的元素。",[58,167357,167359],{"className":30579,"code":167358,"language":30581,"meta":63,"style":63},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[65,167360,167361,167389,167414],{"__ignoreMap":63},[68,167362,167363,167365,167367,167369,167371,167373,167375,167377,167379,167381,167383,167385,167387],{"class":70,"line":71},[68,167364,164244],{"class":335},[68,167366,381],{"class":331},[68,167368,52427],{"class":335},[68,167370,551],{"class":82},[68,167372,12640],{"class":335},[68,167374,412],{"class":82},[68,167376,12640],{"class":335},[68,167378,406],{"class":82},[68,167380,12640],{"class":335},[68,167382,626],{"class":82},[68,167384,12640],{"class":335},[68,167386,652],{"class":82},[68,167388,33447],{"class":335},[68,167390,167391,167393,167395,167398,167400,167402,167404,167406,167408,167410,167412],{"class":70,"line":92},[68,167392,161450],{"class":335},[68,167394,381],{"class":331},[68,167396,167397],{"class":82}," filter",[68,167399,336],{"class":335},[68,167401,167030],{"class":331},[68,167403,167329],{"class":335},[68,167405,661],{"class":331},[68,167407,14960],{"class":82},[68,167409,101759],{"class":331},[68,167411,4299],{"class":82},[68,167413,167336],{"class":335},[68,167415,167416,167418,167420,167422],{"class":70,"line":1387},[68,167417,30616],{"class":82},[68,167419,336],{"class":335},[68,167421,154214],{"class":82},[68,167423,166212],{"class":335},[301,167425,167427],{"id":167426},"_7103-sorted","7.10.3 sorted",[19,167429,167430,167432],{},[65,167431,165380],{}," 返回排序后的新列表。",[58,167434,167436],{"className":30579,"code":167435,"language":30581,"meta":63,"style":63},"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",[65,167437,167438,167446,167466,167486,167506,167510,167514,167543],{"__ignoreMap":63},[68,167439,167440,167442,167444],{"class":70,"line":71},[68,167441,159860],{"class":335},[68,167443,381],{"class":331},[68,167445,55648],{"class":335},[68,167447,167448,167450,167452,167454,167456,167458,167460,167462,167464],{"class":70,"line":92},[68,167449,148529],{"class":335},[68,167451,62880],{"class":78},[68,167453,51638],{"class":335},[68,167455,150032],{"class":78},[68,167457,12640],{"class":335},[68,167459,151616],{"class":78},[68,167461,51638],{"class":335},[68,167463,1322],{"class":82},[68,167465,5136],{"class":335},[68,167467,167468,167470,167472,167474,167476,167478,167480,167482,167484],{"class":70,"line":1387},[68,167469,148529],{"class":335},[68,167471,62880],{"class":78},[68,167473,51638],{"class":335},[68,167475,151080],{"class":78},[68,167477,12640],{"class":335},[68,167479,151616],{"class":78},[68,167481,51638],{"class":335},[68,167483,1144],{"class":82},[68,167485,5136],{"class":335},[68,167487,167488,167490,167492,167494,167496,167498,167500,167502,167504],{"class":70,"line":1402},[68,167489,148529],{"class":335},[68,167491,62880],{"class":78},[68,167493,51638],{"class":335},[68,167495,159875],{"class":78},[68,167497,12640],{"class":335},[68,167499,151616],{"class":78},[68,167501,51638],{"class":335},[68,167503,739],{"class":82},[68,167505,5136],{"class":335},[68,167507,167508],{"class":70,"line":1408},[68,167509,33447],{"class":335},[68,167511,167512],{"class":70,"line":1422},[68,167513,2606],{"emptyLinePlaceholder":260},[68,167515,167516,167518,167520,167522,167525,167527,167529,167531,167533,167535,167537,167539,167541],{"class":70,"line":1428},[68,167517,161450],{"class":335},[68,167519,381],{"class":331},[68,167521,163748],{"class":82},[68,167523,167524],{"class":335},"(students, ",[68,167526,154090],{"class":5421},[68,167528,154093],{"class":331},[68,167530,154096],{"class":335},[68,167532,151616],{"class":78},[68,167534,112402],{"class":335},[68,167536,163672],{"class":5421},[68,167538,381],{"class":331},[68,167540,31677],{"class":82},[68,167542,342],{"class":335},[68,167544,167545,167547],{"class":70,"line":1519},[68,167546,30616],{"class":82},[68,167548,76786],{"class":335},[14,167550,167552],{"id":167551},"_711-闭包入门","7.11 闭包入门",[19,167554,167555],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[58,167557,167559],{"className":30579,"code":167558,"language":30581,"meta":63,"style":63},"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",[65,167560,167561,167571,167581,167592,167596,167603,167607,167611,167625],{"__ignoreMap":63},[68,167562,167563,167565,167568],{"class":70,"line":71},[68,167564,32148],{"class":331},[68,167566,167567],{"class":74}," outer",[68,167569,167570],{"class":335},"(base):\n",[68,167572,167573,167575,167578],{"class":70,"line":92},[68,167574,31002],{"class":331},[68,167576,167577],{"class":74}," inner",[68,167579,167580],{"class":335},"(num):\n",[68,167582,167583,167585,167588,167590],{"class":70,"line":1387},[68,167584,14957],{"class":331},[68,167586,167587],{"class":335}," base ",[68,167589,814],{"class":331},[68,167591,166723],{"class":335},[68,167593,167594],{"class":70,"line":1402},[68,167595,2606],{"emptyLinePlaceholder":260},[68,167597,167598,167600],{"class":70,"line":1408},[68,167599,4296],{"class":331},[68,167601,167602],{"class":335}," inner\n",[68,167604,167605],{"class":70,"line":1422},[68,167606,2606],{"emptyLinePlaceholder":260},[68,167608,167609],{"class":70,"line":1428},[68,167610,2606],{"emptyLinePlaceholder":260},[68,167612,167613,167616,167618,167621,167623],{"class":70,"line":1519},[68,167614,167615],{"class":335},"add_10 ",[68,167617,381],{"class":331},[68,167619,167620],{"class":335}," outer(",[68,167622,779],{"class":82},[68,167624,342],{"class":335},[68,167626,167627,167629,167632,167634],{"class":70,"line":1525},[68,167628,30616],{"class":82},[68,167630,167631],{"class":335},"(add_10(",[68,167633,652],{"class":82},[68,167635,30698],{"class":335},[19,167637,167638],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167640,167642],{"id":167641},"_712-装饰器入门","7.12 装饰器入门",[19,167644,167645],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[58,167647,167649],{"className":30579,"code":167648,"language":30581,"meta":63,"style":63},"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",[65,167650,167651,167660,167669,167680,167685,167696,167700,167707,167711,167715,167720,167728,167738,167742,167746],{"__ignoreMap":63},[68,167652,167653,167655,167657],{"class":70,"line":71},[68,167654,32148],{"class":331},[68,167656,87392],{"class":74},[68,167658,167659],{"class":335},"(func):\n",[68,167661,167662,167664,167667],{"class":70,"line":92},[68,167663,31002],{"class":331},[68,167665,167666],{"class":74}," wrapper",[68,167668,32154],{"class":335},[68,167670,167671,167673,167675,167678],{"class":70,"line":1387},[68,167672,32652],{"class":82},[68,167674,336],{"class":335},[68,167676,167677],{"class":78},"\"函数开始执行\"",[68,167679,342],{"class":335},[68,167681,167682],{"class":70,"line":1402},[68,167683,167684],{"class":335},"        func()\n",[68,167686,167687,167689,167691,167694],{"class":70,"line":1408},[68,167688,32652],{"class":82},[68,167690,336],{"class":335},[68,167692,167693],{"class":78},"\"函数执行结束\"",[68,167695,342],{"class":335},[68,167697,167698],{"class":70,"line":1422},[68,167699,2606],{"emptyLinePlaceholder":260},[68,167701,167702,167704],{"class":70,"line":1428},[68,167703,4296],{"class":331},[68,167705,167706],{"class":335}," wrapper\n",[68,167708,167709],{"class":70,"line":1519},[68,167710,2606],{"emptyLinePlaceholder":260},[68,167712,167713],{"class":70,"line":1525},[68,167714,2606],{"emptyLinePlaceholder":260},[68,167716,167717],{"class":70,"line":1537},[68,167718,167719],{"class":74},"@log\n",[68,167721,167722,167724,167726],{"class":70,"line":1819},[68,167723,32148],{"class":331},[68,167725,161140],{"class":74},[68,167727,32154],{"class":335},[68,167729,167730,167732,167734,167736],{"class":70,"line":1824},[68,167731,31500],{"class":82},[68,167733,336],{"class":335},[68,167735,6049],{"class":78},[68,167737,342],{"class":335},[68,167739,167740],{"class":70,"line":1830},[68,167741,2606],{"emptyLinePlaceholder":260},[68,167743,167744],{"class":70,"line":1835},[68,167745,2606],{"emptyLinePlaceholder":260},[68,167747,167748],{"class":70,"line":1849},[68,167749,161175],{"class":335},[19,167751,158418],{},[58,167753,167755],{"className":30579,"code":167754,"language":30581,"meta":63,"style":63},"say_hello = log(say_hello)\n",[65,167756,167757],{"__ignoreMap":63},[68,167758,167759,167762,167764],{"class":70,"line":71},[68,167760,167761],{"class":335},"say_hello ",[68,167763,381],{"class":331},[68,167765,167766],{"class":335}," log(say_hello)\n",[19,167768,167769],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167771,167773],{"id":167772},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[58,167775,167777],{"className":30579,"code":167776,"language":30581,"meta":63,"style":63},"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",[65,167778,167779,167787,167804,167814,167833,167843,167850,167854,167860,167864,167868,167872,167880,167890,167894,167898],{"__ignoreMap":63},[68,167780,167781,167783,167785],{"class":70,"line":71},[68,167782,32148],{"class":331},[68,167784,87392],{"class":74},[68,167786,167659],{"class":335},[68,167788,167789,167791,167793,167795,167797,167800,167802],{"class":70,"line":92},[68,167790,31002],{"class":331},[68,167792,167666],{"class":74},[68,167794,336],{"class":335},[68,167796,788],{"class":331},[68,167798,167799],{"class":335},"args, ",[68,167801,10866],{"class":331},[68,167803,166810],{"class":335},[68,167805,167806,167808,167810,167812],{"class":70,"line":1387},[68,167807,32652],{"class":82},[68,167809,336],{"class":335},[68,167811,167677],{"class":78},[68,167813,342],{"class":335},[68,167815,167816,167819,167821,167824,167826,167828,167830],{"class":70,"line":1402},[68,167817,167818],{"class":335},"        result ",[68,167820,381],{"class":331},[68,167822,167823],{"class":335}," func(",[68,167825,788],{"class":331},[68,167827,167799],{"class":335},[68,167829,10866],{"class":331},[68,167831,167832],{"class":335},"kwargs)\n",[68,167834,167835,167837,167839,167841],{"class":70,"line":1408},[68,167836,32652],{"class":82},[68,167838,336],{"class":335},[68,167840,167693],{"class":78},[68,167842,342],{"class":335},[68,167844,167845,167847],{"class":70,"line":1422},[68,167846,14957],{"class":331},[68,167848,167849],{"class":335}," result\n",[68,167851,167852],{"class":70,"line":1428},[68,167853,2606],{"emptyLinePlaceholder":260},[68,167855,167856,167858],{"class":70,"line":1519},[68,167857,4296],{"class":331},[68,167859,167706],{"class":335},[68,167861,167862],{"class":70,"line":1525},[68,167863,2606],{"emptyLinePlaceholder":260},[68,167865,167866],{"class":70,"line":1537},[68,167867,2606],{"emptyLinePlaceholder":260},[68,167869,167870],{"class":70,"line":1819},[68,167871,167719],{"class":74},[68,167873,167874,167876,167878],{"class":70,"line":1824},[68,167875,32148],{"class":331},[68,167877,138],{"class":74},[68,167879,151237],{"class":335},[68,167881,167882,167884,167886,167888],{"class":70,"line":1830},[68,167883,4296],{"class":331},[68,167885,11074],{"class":335},[68,167887,814],{"class":331},[68,167889,151248],{"class":335},[68,167891,167892],{"class":70,"line":1835},[68,167893,2606],{"emptyLinePlaceholder":260},[68,167895,167896],{"class":70,"line":1849},[68,167897,2606],{"emptyLinePlaceholder":260},[68,167899,167900,167902,167904,167906,167908,167910],{"class":70,"line":1854},[68,167901,30616],{"class":82},[68,167903,166744],{"class":335},[68,167905,779],{"class":82},[68,167907,12640],{"class":335},[68,167909,1033],{"class":82},[68,167911,30698],{"class":335},[19,167913,167914,167915,101218,167917,167919],{},"这个写法使用 ",[65,167916,166676],{},[65,167918,166791],{}," 接收原函数的所有参数。",[14,167921,167923],{"id":167922},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167925,123489],{},[23,167927,167928,167931,167934],{},[26,167929,167930],{},"给定一组学生数据。",[26,167932,167933],{},"封装函数，根据传入规则筛选学生。",[26,167935,167936],{},"筛选及格、优秀、未成年学生。",[19,167938,10240],{},[58,167940,167942],{"className":30579,"code":167941,"language":30581,"meta":63,"style":63},"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",[65,167943,167944,167952,167980,168008,168036,168040,168044,168048,168058,168066,168076,168083,168088,168094,168098,168102,168126,168149,168172,168176,168183,168190],{"__ignoreMap":63},[68,167945,167946,167948,167950],{"class":70,"line":71},[68,167947,159860],{"class":335},[68,167949,381],{"class":331},[68,167951,55648],{"class":335},[68,167953,167954,167956,167958,167960,167962,167964,167966,167968,167970,167972,167974,167976,167978],{"class":70,"line":92},[68,167955,148529],{"class":335},[68,167957,62880],{"class":78},[68,167959,51638],{"class":335},[68,167961,150032],{"class":78},[68,167963,12640],{"class":335},[68,167965,69325],{"class":78},[68,167967,51638],{"class":335},[68,167969,983],{"class":82},[68,167971,12640],{"class":335},[68,167973,151616],{"class":78},[68,167975,51638],{"class":335},[68,167977,1322],{"class":82},[68,167979,5136],{"class":335},[68,167981,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000,168002,168004,168006],{"class":70,"line":1387},[68,167983,148529],{"class":335},[68,167985,62880],{"class":78},[68,167987,51638],{"class":335},[68,167989,151080],{"class":78},[68,167991,12640],{"class":335},[68,167993,69325],{"class":78},[68,167995,51638],{"class":335},[68,167997,958],{"class":82},[68,167999,12640],{"class":335},[68,168001,151616],{"class":78},[68,168003,51638],{"class":335},[68,168005,1144],{"class":82},[68,168007,5136],{"class":335},[68,168009,168010,168012,168014,168016,168018,168020,168022,168024,168026,168028,168030,168032,168034],{"class":70,"line":1402},[68,168011,148529],{"class":335},[68,168013,62880],{"class":78},[68,168015,51638],{"class":335},[68,168017,159875],{"class":78},[68,168019,12640],{"class":335},[68,168021,69325],{"class":78},[68,168023,51638],{"class":335},[68,168025,1008],{"class":82},[68,168027,12640],{"class":335},[68,168029,151616],{"class":78},[68,168031,51638],{"class":335},[68,168033,1215],{"class":82},[68,168035,5136],{"class":335},[68,168037,168038],{"class":70,"line":1408},[68,168039,33447],{"class":335},[68,168041,168042],{"class":70,"line":1422},[68,168043,2606],{"emptyLinePlaceholder":260},[68,168045,168046],{"class":70,"line":1428},[68,168047,2606],{"emptyLinePlaceholder":260},[68,168049,168050,168052,168055],{"class":70,"line":1519},[68,168051,32148],{"class":331},[68,168053,168054],{"class":74}," filter_students",[68,168056,168057],{"class":335},"(students, condition):\n",[68,168059,168060,168062,168064],{"class":70,"line":1525},[68,168061,161367],{"class":335},[68,168063,381],{"class":331},[68,168065,52039],{"class":335},[68,168067,168068,168070,168072,168074],{"class":70,"line":1537},[68,168069,3407],{"class":331},[68,168071,152281],{"class":335},[68,168073,26247],{"class":331},[68,168075,152286],{"class":335},[68,168077,168078,168080],{"class":70,"line":1819},[68,168079,2703],{"class":331},[68,168081,168082],{"class":335}," condition(student):\n",[68,168084,168085],{"class":70,"line":1824},[68,168086,168087],{"class":335},"            result.append(student)\n",[68,168089,168090,168092],{"class":70,"line":1830},[68,168091,4296],{"class":331},[68,168093,167849],{"class":335},[68,168095,168096],{"class":70,"line":1835},[68,168097,2606],{"emptyLinePlaceholder":260},[68,168099,168100],{"class":70,"line":1849},[68,168101,2606],{"emptyLinePlaceholder":260},[68,168103,168104,168106,168108,168111,168113,168116,168118,168120,168122,168124],{"class":70,"line":1854},[68,168105,165845],{"class":335},[68,168107,381],{"class":331},[68,168109,168110],{"class":335}," filter_students(students, ",[68,168112,167030],{"class":331},[68,168114,168115],{"class":335}," s: s[",[68,168117,151616],{"class":78},[68,168119,4649],{"class":335},[68,168121,1917],{"class":331},[68,168123,157981],{"class":82},[68,168125,342],{"class":335},[68,168127,168128,168131,168133,168135,168137,168139,168141,168143,168145,168147],{"class":70,"line":1860},[68,168129,168130],{"class":335},"excellent ",[68,168132,381],{"class":331},[68,168134,168110],{"class":335},[68,168136,167030],{"class":331},[68,168138,168115],{"class":335},[68,168140,151616],{"class":78},[68,168142,4649],{"class":335},[68,168144,1917],{"class":331},[68,168146,157932],{"class":82},[68,168148,342],{"class":335},[68,168150,168151,168154,168156,168158,168160,168162,168164,168166,168168,168170],{"class":70,"line":1881},[68,168152,168153],{"class":335},"under_age ",[68,168155,381],{"class":331},[68,168157,168110],{"class":335},[68,168159,167030],{"class":331},[68,168161,168115],{"class":335},[68,168163,69325],{"class":78},[68,168165,4649],{"class":335},[68,168167,1243],{"class":331},[68,168169,156429],{"class":82},[68,168171,342],{"class":335},[68,168173,168174],{"class":70,"line":1886},[68,168175,2606],{"emptyLinePlaceholder":260},[68,168177,168178,168180],{"class":70,"line":1900},[68,168179,30616],{"class":82},[68,168181,168182],{"class":335},"(passed)\n",[68,168184,168185,168187],{"class":70,"line":1905},[68,168186,30616],{"class":82},[68,168188,168189],{"class":335},"(excellent)\n",[68,168191,168192,168194],{"class":70,"line":1934},[68,168193,30616],{"class":82},[68,168195,168196],{"class":335},"(under_age)\n",[14,168198,168200],{"id":168199},"_715-易错点","7.15 易错点",[23,168202,168203,168206,168214,168219,168230],{},[26,168204,168205],{},"默认参数不要写可变对象。",[26,168207,168208,168210,168211,168213],{},[65,168209,166676],{}," 是元组，",[65,168212,166791],{}," 是字典。",[26,168215,168216,168218],{},[65,168217,167030],{}," 只适合简单表达式。",[26,168220,168221,101218,168223,168225,168226,168229],{},[65,168222,74245],{},[65,168224,80252],{}," 的结果是迭代器，常用 ",[65,168227,168228],{},"list()"," 转换查看。",[26,168231,168232],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168234,168236],{"id":168235},"_716-本章练习","7.16 本章练习",[23,168238,168239,168246,168252,168257,168262],{},[26,168240,168241,168242,168245],{},"写函数 ",[65,168243,168244],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[26,168247,168241,168248,168251],{},[65,168249,168250],{},"print_user(**kwargs)","，输出用户所有字段。",[26,168253,104566,168254,168256],{},[65,168255,167030],{}," 对学生列表按年龄排序。",[26,168258,104566,168259,168261],{},[65,168260,80252],{}," 找出成绩不及格的学生。",[26,168263,168264],{},"写一个装饰器，统计函数执行前后的提示信息。",[250,168266,168267],{},"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":63,"searchDepth":92,"depth":92,"links":168269},[168270,168271,168272,168273,168274,168275,168279,168280,168281,168282,168287,168288,168289,168290,168291,168292],{"id":166128,"depth":92,"text":166129},{"id":166242,"depth":92,"text":166243},{"id":166331,"depth":92,"text":166332},{"id":166393,"depth":92,"text":166394},{"id":166539,"depth":92,"text":166540},{"id":166666,"depth":92,"text":166667,"children":168276},[168277,168278],{"id":166670,"depth":1387,"text":166671},{"id":166785,"depth":1387,"text":166786},{"id":166866,"depth":92,"text":166867},{"id":167024,"depth":92,"text":167025},{"id":167192,"depth":92,"text":167193},{"id":167274,"depth":92,"text":167275,"children":168283},[168284,168285,168286],{"id":167278,"depth":1387,"text":167279},{"id":167349,"depth":1387,"text":167350},{"id":167426,"depth":1387,"text":167427},{"id":167551,"depth":92,"text":167552},{"id":167641,"depth":92,"text":167642},{"id":167772,"depth":92,"text":167773},{"id":167922,"depth":92,"text":167923},{"id":168199,"depth":92,"text":168200},{"id":168235,"depth":92,"text":168236},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166120,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168299,"title":168300,"body":168301,"description":257,"extension":258,"meta":170820,"navigation":260,"path":170821,"seo":170822,"stem":170823,"__hash__":170824},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168302,"toc":170795},[168303,168306,168310,168313,168316,168347,168351,168355,168358,168385,168389,168392,168443,168446,168461,168464,168499,168503,168505,168529,168532,168592,168596,168600,168603,168660,168663,168683,168687,168690,168753,168757,168760,168816,168823,168847,168851,168854,168917,168921,168926,168977,168980,168984,168989,169056,169059,169141,169145,169150,169201,169204,169208,169211,169214,169222,169225,169271,169274,169320,169324,169330,169374,169377,169423,169426,169466,169469,169530,169534,169537,169627,169630,169772,169775,169842,169846,169849,169852,169993,169996,170074,170077,170253,170257,170259,170270,170272,170471,170475,170719,170723,170757,170761,170792],[10,168304,168300],{"id":168305},"_8-文件操作",[14,168307,168309],{"id":168308},"_81-文件操作的意义","8.1 文件操作的意义",[19,168311,168312],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168314,168315],{},"常见文件类型：",[23,168317,168318,168324,168330,168336,168342],{},[26,168319,168320,168323],{},[65,168321,168322],{},".txt","：普通文本。",[26,168325,168326,168329],{},[65,168327,168328],{},".csv","：表格文本。",[26,168331,168332,168335],{},[65,168333,168334],{},".json","：结构化数据。",[26,168337,168338,168341],{},[65,168339,168340],{},".log","：日志文件。",[26,168343,168344,168346],{},[65,168345,146496],{},"：Python 源代码。",[14,168348,168350],{"id":168349},"_82-路径","8.2 路径",[301,168352,168354],{"id":168353},"_821-相对路径","8.2.1 相对路径",[19,168356,168357],{},"相对当前运行目录：",[58,168359,168361],{"className":30579,"code":168360,"language":30581,"meta":63,"style":63},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[65,168362,168363],{"__ignoreMap":63},[68,168364,168365,168367,168369,168371,168373,168375,168377,168379,168381,168383],{"class":70,"line":71},[68,168366,87116],{"class":82},[68,168368,336],{"class":335},[68,168370,146940],{"class":78},[68,168372,12640],{"class":335},[68,168374,146945],{"class":78},[68,168376,12640],{"class":335},[68,168378,146950],{"class":5421},[68,168380,381],{"class":331},[68,168382,146955],{"class":78},[68,168384,342],{"class":335},[301,168386,168388],{"id":168387},"_822-绝对路径","8.2.2 绝对路径",[19,168390,168391],{},"从根目录或盘符开始：",[58,168393,168395],{"className":30579,"code":168394,"language":30581,"meta":63,"style":63},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[65,168396,168397,168420],{"__ignoreMap":63},[68,168398,168399,168401,168403,168406,168408,168410,168412,168414,168416,168418],{"class":70,"line":71},[68,168400,87116],{"class":82},[68,168402,336],{"class":335},[68,168404,168405],{"class":78},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[68,168407,12640],{"class":335},[68,168409,146945],{"class":78},[68,168411,12640],{"class":335},[68,168413,146950],{"class":5421},[68,168415,381],{"class":331},[68,168417,146955],{"class":78},[68,168419,342],{"class":335},[68,168421,168422,168424,168426,168429,168431,168433,168435,168437,168439,168441],{"class":70,"line":92},[68,168423,87116],{"class":82},[68,168425,336],{"class":335},[68,168427,168428],{"class":78},"\"D:\u002Fdata\u002Fdata.txt\"",[68,168430,12640],{"class":335},[68,168432,146945],{"class":78},[68,168434,12640],{"class":335},[68,168436,146950],{"class":5421},[68,168438,381],{"class":331},[68,168440,146955],{"class":78},[68,168442,342],{"class":335},[19,168444,168445],{},"Windows 路径建议写成：",[58,168447,168449],{"className":30579,"code":168448,"language":30581,"meta":63,"style":63},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[65,168450,168451],{"__ignoreMap":63},[68,168452,168453,168456,168458],{"class":70,"line":71},[68,168454,168455],{"class":335},"path ",[68,168457,381],{"class":331},[68,168459,168460],{"class":78}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168462,168463],{},"或原始字符串：",[58,168465,168467],{"className":30579,"code":168466,"language":30581,"meta":63,"style":63},"path = r\"D:\\data\\data.txt\"\n",[65,168468,168469],{"__ignoreMap":63},[68,168470,168471,168473,168475,168477,168479,168482,168485,168488,168490,168492,168494,168497],{"class":70,"line":71},[68,168472,168455],{"class":335},[68,168474,381],{"class":331},[68,168476,17326],{"class":331},[68,168478,584],{"class":78},[68,168480,168481],{"class":48178},"D:",[68,168483,168484],{"class":82},"\\d",[68,168486,168487],{"class":48178},"ata",[68,168489,168484],{"class":82},[68,168491,168487],{"class":48178},[68,168493,891],{"class":82},[68,168495,168496],{"class":48178},"txt",[68,168498,25337],{"class":78},[14,168500,168502],{"id":168501},"_83-open函数","8.3 open函数",[19,168504,5387],{},[58,168506,168508],{"className":30579,"code":168507,"language":30581,"meta":63,"style":63},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[65,168509,168510],{"__ignoreMap":63},[68,168511,168512,168514,168516,168518,168521,168523,168525,168527],{"class":70,"line":71},[68,168513,45555],{"class":5421},[68,168515,13769],{"class":331},[68,168517,146935],{"class":82},[68,168519,168520],{"class":335},"(文件路径, 打开模式, ",[68,168522,146950],{"class":5421},[68,168524,381],{"class":331},[68,168526,146955],{"class":78},[68,168528,342],{"class":335},[19,168530,168531],{},"常见模式：",[471,168533,168534,168543],{},[474,168535,168536],{},[477,168537,168538,168541],{},[480,168539,168540],{},"模式",[480,168542,26073],{},[518,168544,168545,168554,168563,168572,168582],{},[477,168546,168547,168551],{},[523,168548,168549],{},[65,168550,1003],{},[523,168552,168553],{},"只读，文件不存在会报错",[477,168555,168556,168560],{},[523,168557,168558],{},[65,168559,1128],{},[523,168561,168562],{},"只写，文件不存在会创建，存在会清空",[477,168564,168565,168569],{},[523,168566,168567],{},[65,168568,30],{},[523,168570,168571],{},"追加，文件不存在会创建",[477,168573,168574,168579],{},[523,168575,168576],{},[65,168577,168578],{},"rb",[523,168580,168581],{},"二进制只读",[477,168583,168584,168589],{},[523,168585,168586],{},[65,168587,168588],{},"wb",[523,168590,168591],{},"二进制只写",[14,168593,168595],{"id":168594},"_84-读取文件","8.4 读取文件",[301,168597,168599],{"id":168598},"_841-read","8.4.1 read",[19,168601,168602],{},"一次读取全部内容：",[58,168604,168606],{"className":30579,"code":168605,"language":30581,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[65,168607,168608,168634,168646,168653],{"__ignoreMap":63},[68,168609,168610,168612,168614,168616,168618,168620,168622,168624,168626,168628,168630,168632],{"class":70,"line":71},[68,168611,45555],{"class":5421},[68,168613,13769],{"class":331},[68,168615,146935],{"class":82},[68,168617,336],{"class":335},[68,168619,146940],{"class":78},[68,168621,12640],{"class":335},[68,168623,146945],{"class":78},[68,168625,12640],{"class":335},[68,168627,146950],{"class":5421},[68,168629,381],{"class":331},[68,168631,146955],{"class":78},[68,168633,342],{"class":335},[68,168635,168636,168639,168641,168643],{"class":70,"line":92},[68,168637,168638],{"class":335},"content ",[68,168640,381],{"class":331},[68,168642,148297],{"class":5421},[68,168644,168645],{"class":335},".read()\n",[68,168647,168648,168650],{"class":70,"line":1387},[68,168649,30616],{"class":82},[68,168651,168652],{"class":335},"(content)\n",[68,168654,168655,168657],{"class":70,"line":1402},[68,168656,45555],{"class":5421},[68,168658,168659],{"class":335},".close()\n",[19,168661,168662],{},"可以指定读取字符数：",[58,168664,168666],{"className":30579,"code":168665,"language":30581,"meta":63,"style":63},"content = file.read(10)\n",[65,168667,168668],{"__ignoreMap":63},[68,168669,168670,168672,168674,168676,168679,168681],{"class":70,"line":71},[68,168671,168638],{"class":335},[68,168673,381],{"class":331},[68,168675,148297],{"class":5421},[68,168677,168678],{"class":335},".read(",[68,168680,779],{"class":82},[68,168682,342],{"class":335},[301,168684,168686],{"id":168685},"_842-readline","8.4.2 readline",[19,168688,168689],{},"一次读取一行：",[58,168691,168693],{"className":30579,"code":168692,"language":30581,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[65,168694,168695,168721,168725,168736,168743,168747],{"__ignoreMap":63},[68,168696,168697,168699,168701,168703,168705,168707,168709,168711,168713,168715,168717,168719],{"class":70,"line":71},[68,168698,45555],{"class":5421},[68,168700,13769],{"class":331},[68,168702,146935],{"class":82},[68,168704,336],{"class":335},[68,168706,146940],{"class":78},[68,168708,12640],{"class":335},[68,168710,146945],{"class":78},[68,168712,12640],{"class":335},[68,168714,146950],{"class":5421},[68,168716,381],{"class":331},[68,168718,146955],{"class":78},[68,168720,342],{"class":335},[68,168722,168723],{"class":70,"line":92},[68,168724,2606],{"emptyLinePlaceholder":260},[68,168726,168727,168729,168731,168733],{"class":70,"line":1387},[68,168728,147396],{"class":335},[68,168730,381],{"class":331},[68,168732,148297],{"class":5421},[68,168734,168735],{"class":335},".readline()\n",[68,168737,168738,168740],{"class":70,"line":1402},[68,168739,30616],{"class":82},[68,168741,168742],{"class":335},"(line)\n",[68,168744,168745],{"class":70,"line":1408},[68,168746,2606],{"emptyLinePlaceholder":260},[68,168748,168749,168751],{"class":70,"line":1422},[68,168750,45555],{"class":5421},[68,168752,168659],{"class":335},[301,168754,168756],{"id":168755},"_843-readlines","8.4.3 readlines",[19,168758,168759],{},"读取所有行，返回列表：",[58,168761,168763],{"className":30579,"code":168762,"language":30581,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[65,168764,168765,168791,168803,168810],{"__ignoreMap":63},[68,168766,168767,168769,168771,168773,168775,168777,168779,168781,168783,168785,168787,168789],{"class":70,"line":71},[68,168768,45555],{"class":5421},[68,168770,13769],{"class":331},[68,168772,146935],{"class":82},[68,168774,336],{"class":335},[68,168776,146940],{"class":78},[68,168778,12640],{"class":335},[68,168780,146945],{"class":78},[68,168782,12640],{"class":335},[68,168784,146950],{"class":5421},[68,168786,381],{"class":331},[68,168788,146955],{"class":78},[68,168790,342],{"class":335},[68,168792,168793,168796,168798,168800],{"class":70,"line":92},[68,168794,168795],{"class":335},"lines ",[68,168797,381],{"class":331},[68,168799,148297],{"class":5421},[68,168801,168802],{"class":335},".readlines()\n",[68,168804,168805,168807],{"class":70,"line":1387},[68,168806,30616],{"class":82},[68,168808,168809],{"class":335},"(lines)\n",[68,168811,168812,168814],{"class":70,"line":1402},[68,168813,45555],{"class":5421},[68,168815,168659],{"class":335},[19,168817,168818,168819,168822],{},"每一行通常带有换行符，可以用 ",[65,168820,168821],{},"strip()"," 去掉：",[58,168824,168826],{"className":30579,"code":168825,"language":30581,"meta":63,"style":63},"for line in lines:\n    print(line.strip())\n",[65,168827,168828,168840],{"__ignoreMap":63},[68,168829,168830,168832,168835,168837],{"class":70,"line":71},[68,168831,3231],{"class":331},[68,168833,168834],{"class":335}," line ",[68,168836,26247],{"class":331},[68,168838,168839],{"class":335}," lines:\n",[68,168841,168842,168844],{"class":70,"line":92},[68,168843,31500],{"class":82},[68,168845,168846],{"class":335},"(line.strip())\n",[301,168848,168850],{"id":168849},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168852,168853],{},"推荐读取大文件时使用：",[58,168855,168857],{"className":30579,"code":168856,"language":30581,"meta":63,"style":63},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[65,168858,168859,168885,168889,168901,168907,168911],{"__ignoreMap":63},[68,168860,168861,168863,168865,168867,168869,168871,168873,168875,168877,168879,168881,168883],{"class":70,"line":71},[68,168862,45555],{"class":5421},[68,168864,13769],{"class":331},[68,168866,146935],{"class":82},[68,168868,336],{"class":335},[68,168870,146940],{"class":78},[68,168872,12640],{"class":335},[68,168874,146945],{"class":78},[68,168876,12640],{"class":335},[68,168878,146950],{"class":5421},[68,168880,381],{"class":331},[68,168882,146955],{"class":78},[68,168884,342],{"class":335},[68,168886,168887],{"class":70,"line":92},[68,168888,2606],{"emptyLinePlaceholder":260},[68,168890,168891,168893,168895,168897,168899],{"class":70,"line":1387},[68,168892,3231],{"class":331},[68,168894,168834],{"class":335},[68,168896,26247],{"class":331},[68,168898,148297],{"class":5421},[68,168900,3945],{"class":335},[68,168902,168903,168905],{"class":70,"line":1402},[68,168904,31500],{"class":82},[68,168906,168846],{"class":335},[68,168908,168909],{"class":70,"line":1408},[68,168910,2606],{"emptyLinePlaceholder":260},[68,168912,168913,168915],{"class":70,"line":1422},[68,168914,45555],{"class":5421},[68,168916,168659],{"class":335},[14,168918,168920],{"id":168919},"_85-with语句","8.5 with语句",[19,168922,168923,168925],{},[65,168924,108033],{}," 会自动关闭文件，推荐使用。",[58,168927,168929],{"className":30579,"code":168928,"language":30581,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[65,168930,168931,168961,168971],{"__ignoreMap":63},[68,168932,168933,168935,168937,168939,168941,168943,168945,168947,168949,168951,168953,168955,168957,168959],{"class":70,"line":71},[68,168934,108033],{"class":331},[68,168936,146935],{"class":82},[68,168938,336],{"class":335},[68,168940,146940],{"class":78},[68,168942,12640],{"class":335},[68,168944,146945],{"class":78},[68,168946,12640],{"class":335},[68,168948,146950],{"class":5421},[68,168950,381],{"class":331},[68,168952,146955],{"class":78},[68,168954,13919],{"class":335},[68,168956,31584],{"class":331},[68,168958,148297],{"class":5421},[68,168960,3945],{"class":335},[68,168962,168963,168965,168967,168969],{"class":70,"line":92},[68,168964,146967],{"class":335},[68,168966,381],{"class":331},[68,168968,148297],{"class":5421},[68,168970,168645],{"class":335},[68,168972,168973,168975],{"class":70,"line":1387},[68,168974,31500],{"class":82},[68,168976,168652],{"class":335},[19,168978,168979],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168981,168983],{"id":168982},"_86-写入文件","8.6 写入文件",[19,168985,168986,168988],{},[65,168987,1128],{}," 模式会清空原文件。",[58,168990,168992],{"className":30579,"code":168991,"language":30581,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[65,168993,168994,169024,169041],{"__ignoreMap":63},[68,168995,168996,168998,169000,169002,169004,169006,169008,169010,169012,169014,169016,169018,169020,169022],{"class":70,"line":71},[68,168997,108033],{"class":331},[68,168999,146935],{"class":82},[68,169001,336],{"class":335},[68,169003,146940],{"class":78},[68,169005,12640],{"class":335},[68,169007,152120],{"class":78},[68,169009,12640],{"class":335},[68,169011,146950],{"class":5421},[68,169013,381],{"class":331},[68,169015,146955],{"class":78},[68,169017,13919],{"class":335},[68,169019,31584],{"class":331},[68,169021,148297],{"class":5421},[68,169023,3945],{"class":335},[68,169025,169026,169029,169032,169035,169037,169039],{"class":70,"line":92},[68,169027,169028],{"class":5421},"    file",[68,169030,169031],{"class":335},".write(",[68,169033,169034],{"class":78},"\"hello",[68,169036,156669],{"class":82},[68,169038,584],{"class":78},[68,169040,342],{"class":335},[68,169042,169043,169045,169047,169050,169052,169054],{"class":70,"line":1387},[68,169044,169028],{"class":5421},[68,169046,169031],{"class":335},[68,169048,169049],{"class":78},"\"python",[68,169051,156669],{"class":82},[68,169053,584],{"class":78},[68,169055,342],{"class":335},[19,169057,169058],{},"写入多行：",[58,169060,169062],{"className":30579,"code":169061,"language":30581,"meta":63,"style":63},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[65,169063,169064,169099,169103,169134],{"__ignoreMap":63},[68,169065,169066,169068,169070,169072,169075,169077,169079,169081,169084,169086,169088,169090,169093,169095,169097],{"class":70,"line":71},[68,169067,168795],{"class":335},[68,169069,381],{"class":331},[68,169071,52427],{"class":335},[68,169073,169074],{"class":78},"\"小明,18",[68,169076,156669],{"class":82},[68,169078,584],{"class":78},[68,169080,12640],{"class":335},[68,169082,169083],{"class":78},"\"小红,17",[68,169085,156669],{"class":82},[68,169087,584],{"class":78},[68,169089,12640],{"class":335},[68,169091,169092],{"class":78},"\"小刚,19",[68,169094,156669],{"class":82},[68,169096,584],{"class":78},[68,169098,33447],{"class":335},[68,169100,169101],{"class":70,"line":92},[68,169102,2606],{"emptyLinePlaceholder":260},[68,169104,169105,169107,169109,169111,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132],{"class":70,"line":1387},[68,169106,108033],{"class":331},[68,169108,146935],{"class":82},[68,169110,336],{"class":335},[68,169112,169113],{"class":78},"\"students.txt\"",[68,169115,12640],{"class":335},[68,169117,152120],{"class":78},[68,169119,12640],{"class":335},[68,169121,146950],{"class":5421},[68,169123,381],{"class":331},[68,169125,146955],{"class":78},[68,169127,13919],{"class":335},[68,169129,31584],{"class":331},[68,169131,148297],{"class":5421},[68,169133,3945],{"class":335},[68,169135,169136,169138],{"class":70,"line":1402},[68,169137,169028],{"class":5421},[68,169139,169140],{"class":335},".writelines(lines)\n",[14,169142,169144],{"id":169143},"_87-追加文件","8.7 追加文件",[19,169146,169147,169149],{},[65,169148,30],{}," 模式不会清空原内容，而是在末尾追加。",[58,169151,169153],{"className":30579,"code":169152,"language":30581,"meta":63,"style":63},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[65,169154,169155,169186],{"__ignoreMap":63},[68,169156,169157,169159,169161,169163,169166,169168,169170,169172,169174,169176,169178,169180,169182,169184],{"class":70,"line":71},[68,169158,108033],{"class":331},[68,169160,146935],{"class":82},[68,169162,336],{"class":335},[68,169164,169165],{"class":78},"\"log.txt\"",[68,169167,12640],{"class":335},[68,169169,165469],{"class":78},[68,169171,12640],{"class":335},[68,169173,146950],{"class":5421},[68,169175,381],{"class":331},[68,169177,146955],{"class":78},[68,169179,13919],{"class":335},[68,169181,31584],{"class":331},[68,169183,148297],{"class":5421},[68,169185,3945],{"class":335},[68,169187,169188,169190,169192,169195,169197,169199],{"class":70,"line":92},[68,169189,169028],{"class":5421},[68,169191,169031],{"class":335},[68,169193,169194],{"class":78},"\"程序启动",[68,169196,156669],{"class":82},[68,169198,584],{"class":78},[68,169200,342],{"class":335},[19,169202,169203],{},"日志类文件常用追加模式。",[14,169205,169207],{"id":169206},"_88-文件编码","8.8 文件编码",[19,169209,169210],{},"编码决定文字如何保存为字节。",[19,169212,169213],{},"常见编码：",[23,169215,169216,169219],{},[26,169217,169218],{},"UTF-8：推荐。",[26,169220,169221],{},"GBK：部分 Windows 中文文件常见。",[19,169223,169224],{},"读取文件乱码时，可以尝试：",[58,169226,169228],{"className":30579,"code":169227,"language":30581,"meta":63,"style":63},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[65,169229,169230,169261],{"__ignoreMap":63},[68,169231,169232,169234,169236,169238,169240,169242,169244,169246,169248,169250,169253,169255,169257,169259],{"class":70,"line":71},[68,169233,108033],{"class":331},[68,169235,146935],{"class":82},[68,169237,336],{"class":335},[68,169239,146940],{"class":78},[68,169241,12640],{"class":335},[68,169243,146945],{"class":78},[68,169245,12640],{"class":335},[68,169247,146950],{"class":5421},[68,169249,381],{"class":331},[68,169251,169252],{"class":78},"\"gbk\"",[68,169254,13919],{"class":335},[68,169256,31584],{"class":331},[68,169258,148297],{"class":5421},[68,169260,3945],{"class":335},[68,169262,169263,169265,169267,169269],{"class":70,"line":92},[68,169264,146967],{"class":335},[68,169266,381],{"class":331},[68,169268,148297],{"class":5421},[68,169270,168645],{"class":335},[19,169272,169273],{},"写文件时建议统一 UTF-8：",[58,169275,169277],{"className":30579,"code":169276,"language":30581,"meta":63,"style":63},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[65,169278,169279,169309],{"__ignoreMap":63},[68,169280,169281,169283,169285,169287,169289,169291,169293,169295,169297,169299,169301,169303,169305,169307],{"class":70,"line":71},[68,169282,108033],{"class":331},[68,169284,146935],{"class":82},[68,169286,336],{"class":335},[68,169288,146940],{"class":78},[68,169290,12640],{"class":335},[68,169292,152120],{"class":78},[68,169294,12640],{"class":335},[68,169296,146950],{"class":5421},[68,169298,381],{"class":331},[68,169300,146955],{"class":78},[68,169302,13919],{"class":335},[68,169304,31584],{"class":331},[68,169306,148297],{"class":5421},[68,169308,3945],{"class":335},[68,169310,169311,169313,169315,169318],{"class":70,"line":92},[68,169312,169028],{"class":5421},[68,169314,169031],{"class":335},[68,169316,169317],{"class":78},"\"中文内容\"",[68,169319,342],{"class":335},[14,169321,169323],{"id":169322},"_89-pathlib","8.9 pathlib",[19,169325,169326,169329],{},[65,169327,169328],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[58,169331,169333],{"className":30579,"code":169332,"language":30581,"meta":63,"style":63},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[65,169334,169335,169345,169349,169367],{"__ignoreMap":63},[68,169336,169337,169339,169341,169343],{"class":70,"line":71},[68,169338,30938],{"class":331},[68,169340,108511],{"class":335},[68,169342,30593],{"class":331},[68,169344,108516],{"class":335},[68,169346,169347],{"class":70,"line":92},[68,169348,2606],{"emptyLinePlaceholder":260},[68,169350,169351,169353,169355,169357,169360,169362,169364],{"class":70,"line":1387},[68,169352,168455],{"class":335},[68,169354,381],{"class":331},[68,169356,108745],{"class":335},[68,169358,169359],{"class":78},"\"data\"",[68,169361,13919],{"class":335},[68,169363,917],{"class":331},[68,169365,169366],{"class":78}," \"students.txt\"\n",[68,169368,169369,169371],{"class":70,"line":1402},[68,169370,30616],{"class":82},[68,169372,169373],{"class":335},"(path)\n",[19,169375,169376],{},"创建目录：",[58,169378,169380],{"className":30579,"code":169379,"language":30581,"meta":63,"style":63},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[65,169381,169382,169392,169396,169409],{"__ignoreMap":63},[68,169383,169384,169386,169388,169390],{"class":70,"line":71},[68,169385,30938],{"class":331},[68,169387,108511],{"class":335},[68,169389,30593],{"class":331},[68,169391,108516],{"class":335},[68,169393,169394],{"class":70,"line":92},[68,169395,2606],{"emptyLinePlaceholder":260},[68,169397,169398,169401,169403,169405,169407],{"class":70,"line":1387},[68,169399,169400],{"class":335},"data_dir ",[68,169402,381],{"class":331},[68,169404,108745],{"class":335},[68,169406,169359],{"class":78},[68,169408,342],{"class":335},[68,169410,169411,169414,169417,169419,169421],{"class":70,"line":1402},[68,169412,169413],{"class":335},"data_dir.mkdir(",[68,169415,169416],{"class":5421},"exist_ok",[68,169418,381],{"class":331},[68,169420,31677],{"class":82},[68,169422,342],{"class":335},[19,169424,169425],{},"判断文件是否存在：",[58,169427,169429],{"className":30579,"code":169428,"language":30581,"meta":63,"style":63},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[65,169430,169431,169444,169448,169455],{"__ignoreMap":63},[68,169432,169433,169435,169437,169439,169442],{"class":70,"line":71},[68,169434,168455],{"class":335},[68,169436,381],{"class":331},[68,169438,108745],{"class":335},[68,169440,169441],{"class":78},"\"data\u002Fstudents.txt\"",[68,169443,342],{"class":335},[68,169445,169446],{"class":70,"line":92},[68,169447,2606],{"emptyLinePlaceholder":260},[68,169449,169450,169452],{"class":70,"line":1387},[68,169451,1738],{"class":331},[68,169453,169454],{"class":335}," path.exists():\n",[68,169456,169457,169459,169461,169464],{"class":70,"line":1402},[68,169458,31500],{"class":82},[68,169460,336],{"class":335},[68,169462,169463],{"class":78},"\"文件存在\"",[68,169465,342],{"class":335},[19,169467,169468],{},"读写文本：",[58,169470,169472],{"className":30579,"code":169471,"language":30581,"meta":63,"style":63},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[65,169473,169474,169486,169490,169507,169524],{"__ignoreMap":63},[68,169475,169476,169478,169480,169482,169484],{"class":70,"line":71},[68,169477,168455],{"class":335},[68,169479,381],{"class":331},[68,169481,108745],{"class":335},[68,169483,146940],{"class":78},[68,169485,342],{"class":335},[68,169487,169488],{"class":70,"line":92},[68,169489,2606],{"emptyLinePlaceholder":260},[68,169491,169492,169495,169497,169499,169501,169503,169505],{"class":70,"line":1387},[68,169493,169494],{"class":335},"path.write_text(",[68,169496,146020],{"class":78},[68,169498,12640],{"class":335},[68,169500,146950],{"class":5421},[68,169502,381],{"class":331},[68,169504,146955],{"class":78},[68,169506,342],{"class":335},[68,169508,169509,169511,169513,169516,169518,169520,169522],{"class":70,"line":1402},[68,169510,168638],{"class":335},[68,169512,381],{"class":331},[68,169514,169515],{"class":335}," path.read_text(",[68,169517,146950],{"class":5421},[68,169519,381],{"class":331},[68,169521,146955],{"class":78},[68,169523,342],{"class":335},[68,169525,169526,169528],{"class":70,"line":1408},[68,169527,30616],{"class":82},[68,169529,168652],{"class":335},[14,169531,169533],{"id":169532},"_810-json文件","8.10 JSON文件",[19,169535,169536],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[58,169538,169540],{"className":30579,"code":169539,"language":30581,"meta":63,"style":63},"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",[65,169541,169542,169548,169552,169560,169570,169580,169588,169592,169596,169621],{"__ignoreMap":63},[68,169543,169544,169546],{"class":70,"line":71},[68,169545,30593],{"class":331},[68,169547,147235],{"class":335},[68,169549,169550],{"class":70,"line":92},[68,169551,2606],{"emptyLinePlaceholder":260},[68,169553,169554,169556,169558],{"class":70,"line":1387},[68,169555,149625],{"class":335},[68,169557,381],{"class":331},[68,169559,15777],{"class":335},[68,169561,169562,169564,169566,169568],{"class":70,"line":1402},[68,169563,147164],{"class":78},[68,169565,51638],{"class":335},[68,169567,150032],{"class":78},[68,169569,31667],{"class":335},[68,169571,169572,169574,169576,169578],{"class":70,"line":1408},[68,169573,164681],{"class":78},[68,169575,51638],{"class":335},[68,169577,983],{"class":82},[68,169579,31667],{"class":335},[68,169581,169582,169584,169586],{"class":70,"line":1422},[68,169583,164692],{"class":78},[68,169585,51638],{"class":335},[68,169587,164697],{"class":82},[68,169589,169590],{"class":70,"line":1428},[68,169591,1772],{"class":335},[68,169593,169594],{"class":70,"line":1519},[68,169595,2606],{"emptyLinePlaceholder":260},[68,169597,169598,169600,169602,169605,169607,169609,169611,169613,169615,169617,169619],{"class":70,"line":1525},[68,169599,156588],{"class":335},[68,169601,381],{"class":331},[68,169603,169604],{"class":335}," json.dumps(student, ",[68,169606,147281],{"class":5421},[68,169608,381],{"class":331},[68,169610,34188],{"class":82},[68,169612,12640],{"class":335},[68,169614,152156],{"class":5421},[68,169616,381],{"class":331},[68,169618,412],{"class":82},[68,169620,342],{"class":335},[68,169622,169623,169625],{"class":70,"line":1537},[68,169624,30616],{"class":82},[68,169626,164215],{"class":335},[19,169628,169629],{},"写入 JSON 文件：",[58,169631,169633],{"className":30579,"code":169632,"language":30581,"meta":63,"style":63},"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",[65,169634,169635,169641,169645,169653,169681,169709,169713,169717,169747],{"__ignoreMap":63},[68,169636,169637,169639],{"class":70,"line":71},[68,169638,30593],{"class":331},[68,169640,147235],{"class":335},[68,169642,169643],{"class":70,"line":92},[68,169644,2606],{"emptyLinePlaceholder":260},[68,169646,169647,169649,169651],{"class":70,"line":1387},[68,169648,159860],{"class":335},[68,169650,381],{"class":331},[68,169652,55648],{"class":335},[68,169654,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677,169679],{"class":70,"line":1402},[68,169656,148529],{"class":335},[68,169658,62880],{"class":78},[68,169660,51638],{"class":335},[68,169662,150032],{"class":78},[68,169664,12640],{"class":335},[68,169666,69325],{"class":78},[68,169668,51638],{"class":335},[68,169670,983],{"class":82},[68,169672,12640],{"class":335},[68,169674,151616],{"class":78},[68,169676,51638],{"class":335},[68,169678,1322],{"class":82},[68,169680,5136],{"class":335},[68,169682,169683,169685,169687,169689,169691,169693,169695,169697,169699,169701,169703,169705,169707],{"class":70,"line":1408},[68,169684,148529],{"class":335},[68,169686,62880],{"class":78},[68,169688,51638],{"class":335},[68,169690,151080],{"class":78},[68,169692,12640],{"class":335},[68,169694,69325],{"class":78},[68,169696,51638],{"class":335},[68,169698,958],{"class":82},[68,169700,12640],{"class":335},[68,169702,151616],{"class":78},[68,169704,51638],{"class":335},[68,169706,1144],{"class":82},[68,169708,5136],{"class":335},[68,169710,169711],{"class":70,"line":1422},[68,169712,33447],{"class":335},[68,169714,169715],{"class":70,"line":1428},[68,169716,2606],{"emptyLinePlaceholder":260},[68,169718,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737,169739,169741,169743,169745],{"class":70,"line":1519},[68,169720,108033],{"class":331},[68,169722,146935],{"class":82},[68,169724,336],{"class":335},[68,169726,151975],{"class":78},[68,169728,12640],{"class":335},[68,169730,152120],{"class":78},[68,169732,12640],{"class":335},[68,169734,146950],{"class":5421},[68,169736,381],{"class":331},[68,169738,146955],{"class":78},[68,169740,13919],{"class":335},[68,169742,31584],{"class":331},[68,169744,148297],{"class":5421},[68,169746,3945],{"class":335},[68,169748,169749,169752,169754,169756,169758,169760,169762,169764,169766,169768,169770],{"class":70,"line":1525},[68,169750,169751],{"class":335},"    json.dump(students, ",[68,169753,45555],{"class":5421},[68,169755,12640],{"class":335},[68,169757,147281],{"class":5421},[68,169759,381],{"class":331},[68,169761,34188],{"class":82},[68,169763,12640],{"class":335},[68,169765,152156],{"class":5421},[68,169767,381],{"class":331},[68,169769,412],{"class":82},[68,169771,342],{"class":335},[19,169773,169774],{},"读取 JSON 文件：",[58,169776,169778],{"className":30579,"code":169777,"language":30581,"meta":63,"style":63},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[65,169779,169780,169786,169790,169820,169832,169836],{"__ignoreMap":63},[68,169781,169782,169784],{"class":70,"line":71},[68,169783,30593],{"class":331},[68,169785,147235],{"class":335},[68,169787,169788],{"class":70,"line":92},[68,169789,2606],{"emptyLinePlaceholder":260},[68,169791,169792,169794,169796,169798,169800,169802,169804,169806,169808,169810,169812,169814,169816,169818],{"class":70,"line":1387},[68,169793,108033],{"class":331},[68,169795,146935],{"class":82},[68,169797,336],{"class":335},[68,169799,151975],{"class":78},[68,169801,12640],{"class":335},[68,169803,146945],{"class":78},[68,169805,12640],{"class":335},[68,169807,146950],{"class":5421},[68,169809,381],{"class":331},[68,169811,146955],{"class":78},[68,169813,13919],{"class":335},[68,169815,31584],{"class":331},[68,169817,148297],{"class":5421},[68,169819,3945],{"class":335},[68,169821,169822,169824,169826,169828,169830],{"class":70,"line":1402},[68,169823,153181],{"class":335},[68,169825,381],{"class":331},[68,169827,148308],{"class":335},[68,169829,45555],{"class":5421},[68,169831,342],{"class":335},[68,169833,169834],{"class":70,"line":1408},[68,169835,2606],{"emptyLinePlaceholder":260},[68,169837,169838,169840],{"class":70,"line":1422},[68,169839,30616],{"class":82},[68,169841,165139],{"class":335},[14,169843,169845],{"id":169844},"_811-csv文件","8.11 CSV文件",[19,169847,169848],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169850,169851],{},"写入 CSV：",[58,169853,169855],{"className":30579,"code":169854,"language":30581,"meta":63,"style":63},"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",[65,169856,169857,169864,169868,169876,169894,169910,169926,169930,169934,169974,169988],{"__ignoreMap":63},[68,169858,169859,169861],{"class":70,"line":71},[68,169860,30593],{"class":331},[68,169862,169863],{"class":335}," csv\n",[68,169865,169866],{"class":70,"line":92},[68,169867,2606],{"emptyLinePlaceholder":260},[68,169869,169870,169872,169874],{"class":70,"line":1387},[68,169871,159860],{"class":335},[68,169873,381],{"class":331},[68,169875,55648],{"class":335},[68,169877,169878,169881,169883,169885,169887,169889,169892],{"class":70,"line":1402},[68,169879,169880],{"class":335},"    [",[68,169882,73300],{"class":78},[68,169884,12640],{"class":335},[68,169886,73333],{"class":78},[68,169888,12640],{"class":335},[68,169890,169891],{"class":78},"\"成绩\"",[68,169893,88037],{"class":335},[68,169895,169896,169898,169900,169902,169904,169906,169908],{"class":70,"line":1408},[68,169897,169880],{"class":335},[68,169899,150032],{"class":78},[68,169901,12640],{"class":335},[68,169903,983],{"class":82},[68,169905,12640],{"class":335},[68,169907,1322],{"class":82},[68,169909,88037],{"class":335},[68,169911,169912,169914,169916,169918,169920,169922,169924],{"class":70,"line":1422},[68,169913,169880],{"class":335},[68,169915,151080],{"class":78},[68,169917,12640],{"class":335},[68,169919,958],{"class":82},[68,169921,12640],{"class":335},[68,169923,1144],{"class":82},[68,169925,88037],{"class":335},[68,169927,169928],{"class":70,"line":1428},[68,169929,33447],{"class":335},[68,169931,169932],{"class":70,"line":1519},[68,169933,2606],{"emptyLinePlaceholder":260},[68,169935,169936,169938,169940,169942,169945,169947,169949,169951,169953,169955,169957,169959,169962,169964,169966,169968,169970,169972],{"class":70,"line":1525},[68,169937,108033],{"class":331},[68,169939,146935],{"class":82},[68,169941,336],{"class":335},[68,169943,169944],{"class":78},"\"students.csv\"",[68,169946,12640],{"class":335},[68,169948,152120],{"class":78},[68,169950,12640],{"class":335},[68,169952,146950],{"class":5421},[68,169954,381],{"class":331},[68,169956,146955],{"class":78},[68,169958,12640],{"class":335},[68,169960,169961],{"class":5421},"newline",[68,169963,381],{"class":331},[68,169965,7857],{"class":78},[68,169967,13919],{"class":335},[68,169969,31584],{"class":331},[68,169971,148297],{"class":5421},[68,169973,3945],{"class":335},[68,169975,169976,169979,169981,169984,169986],{"class":70,"line":1537},[68,169977,169978],{"class":335},"    writer ",[68,169980,381],{"class":331},[68,169982,169983],{"class":335}," csv.writer(",[68,169985,45555],{"class":5421},[68,169987,342],{"class":335},[68,169989,169990],{"class":70,"line":1819},[68,169991,169992],{"class":335},"    writer.writerows(students)\n",[19,169994,169995],{},"读取 CSV：",[58,169997,169999],{"className":30579,"code":169998,"language":30581,"meta":63,"style":63},"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",[65,170000,170001,170007,170011,170041,170055,170067],{"__ignoreMap":63},[68,170002,170003,170005],{"class":70,"line":71},[68,170004,30593],{"class":331},[68,170006,169863],{"class":335},[68,170008,170009],{"class":70,"line":92},[68,170010,2606],{"emptyLinePlaceholder":260},[68,170012,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039],{"class":70,"line":1387},[68,170014,108033],{"class":331},[68,170016,146935],{"class":82},[68,170018,336],{"class":335},[68,170020,169944],{"class":78},[68,170022,12640],{"class":335},[68,170024,146945],{"class":78},[68,170026,12640],{"class":335},[68,170028,146950],{"class":5421},[68,170030,381],{"class":331},[68,170032,146955],{"class":78},[68,170034,13919],{"class":335},[68,170036,31584],{"class":331},[68,170038,148297],{"class":5421},[68,170040,3945],{"class":335},[68,170042,170043,170046,170048,170051,170053],{"class":70,"line":1402},[68,170044,170045],{"class":335},"    reader ",[68,170047,381],{"class":331},[68,170049,170050],{"class":335}," csv.reader(",[68,170052,45555],{"class":5421},[68,170054,342],{"class":335},[68,170056,170057,170059,170062,170064],{"class":70,"line":1408},[68,170058,3407],{"class":331},[68,170060,170061],{"class":335}," row ",[68,170063,26247],{"class":331},[68,170065,170066],{"class":335}," reader:\n",[68,170068,170069,170071],{"class":70,"line":1422},[68,170070,32652],{"class":82},[68,170072,170073],{"class":335},"(row)\n",[19,170075,170076],{},"使用字典写入：",[58,170078,170080],{"className":30579,"code":170079,"language":30581,"meta":63,"style":63},"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",[65,170081,170082,170088,170092,170100,170128,170156,170160,170164,170202,170223,170244,170249],{"__ignoreMap":63},[68,170083,170084,170086],{"class":70,"line":71},[68,170085,30593],{"class":331},[68,170087,169863],{"class":335},[68,170089,170090],{"class":70,"line":92},[68,170091,2606],{"emptyLinePlaceholder":260},[68,170093,170094,170096,170098],{"class":70,"line":1387},[68,170095,159860],{"class":335},[68,170097,381],{"class":331},[68,170099,55648],{"class":335},[68,170101,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120,170122,170124,170126],{"class":70,"line":1402},[68,170103,148529],{"class":335},[68,170105,62880],{"class":78},[68,170107,51638],{"class":335},[68,170109,150032],{"class":78},[68,170111,12640],{"class":335},[68,170113,69325],{"class":78},[68,170115,51638],{"class":335},[68,170117,983],{"class":82},[68,170119,12640],{"class":335},[68,170121,151616],{"class":78},[68,170123,51638],{"class":335},[68,170125,1322],{"class":82},[68,170127,5136],{"class":335},[68,170129,170130,170132,170134,170136,170138,170140,170142,170144,170146,170148,170150,170152,170154],{"class":70,"line":1408},[68,170131,148529],{"class":335},[68,170133,62880],{"class":78},[68,170135,51638],{"class":335},[68,170137,151080],{"class":78},[68,170139,12640],{"class":335},[68,170141,69325],{"class":78},[68,170143,51638],{"class":335},[68,170145,958],{"class":82},[68,170147,12640],{"class":335},[68,170149,151616],{"class":78},[68,170151,51638],{"class":335},[68,170153,1144],{"class":82},[68,170155,5136],{"class":335},[68,170157,170158],{"class":70,"line":1422},[68,170159,33447],{"class":335},[68,170161,170162],{"class":70,"line":1428},[68,170163,2606],{"emptyLinePlaceholder":260},[68,170165,170166,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192,170194,170196,170198,170200],{"class":70,"line":1519},[68,170167,108033],{"class":331},[68,170169,146935],{"class":82},[68,170171,336],{"class":335},[68,170173,169944],{"class":78},[68,170175,12640],{"class":335},[68,170177,152120],{"class":78},[68,170179,12640],{"class":335},[68,170181,146950],{"class":5421},[68,170183,381],{"class":331},[68,170185,146955],{"class":78},[68,170187,12640],{"class":335},[68,170189,169961],{"class":5421},[68,170191,381],{"class":331},[68,170193,7857],{"class":78},[68,170195,13919],{"class":335},[68,170197,31584],{"class":331},[68,170199,148297],{"class":5421},[68,170201,3945],{"class":335},[68,170203,170204,170207,170209,170211,170213,170215,170217,170219,170221],{"class":70,"line":1525},[68,170205,170206],{"class":335},"    fieldnames ",[68,170208,381],{"class":331},[68,170210,52427],{"class":335},[68,170212,62880],{"class":78},[68,170214,12640],{"class":335},[68,170216,69325],{"class":78},[68,170218,12640],{"class":335},[68,170220,151616],{"class":78},[68,170222,33447],{"class":335},[68,170224,170225,170227,170229,170232,170234,170236,170239,170241],{"class":70,"line":1537},[68,170226,169978],{"class":335},[68,170228,381],{"class":331},[68,170230,170231],{"class":335}," csv.DictWriter(",[68,170233,45555],{"class":5421},[68,170235,12640],{"class":335},[68,170237,170238],{"class":5421},"fieldnames",[68,170240,381],{"class":331},[68,170242,170243],{"class":335},"fieldnames)\n",[68,170245,170246],{"class":70,"line":1819},[68,170247,170248],{"class":335},"    writer.writeheader()\n",[68,170250,170251],{"class":70,"line":1824},[68,170252,169992],{"class":335},[14,170254,170256],{"id":170255},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170258,123489],{},[23,170260,170261,170264,170267],{},[26,170262,170263],{},"读取文本文件。",[26,170265,170266],{},"统计每个单词出现次数。",[26,170268,170269],{},"输出出现次数最多的前 10 个单词。",[19,170271,10240],{},[58,170273,170275],{"className":30579,"code":170274,"language":30581,"meta":63,"style":63},"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",[65,170276,170277,170287,170291,170304,170320,170324,170334,170343,170347,170359,170379,170388,170392,170410,170414,170444,170448,170464],{"__ignoreMap":63},[68,170278,170279,170281,170283,170285],{"class":70,"line":71},[68,170280,30938],{"class":331},[68,170282,108511],{"class":335},[68,170284,30593],{"class":331},[68,170286,108516],{"class":335},[68,170288,170289],{"class":70,"line":92},[68,170290,2606],{"emptyLinePlaceholder":260},[68,170292,170293,170295,170297,170299,170302],{"class":70,"line":1387},[68,170294,168455],{"class":335},[68,170296,381],{"class":331},[68,170298,108745],{"class":335},[68,170300,170301],{"class":78},"\"article.txt\"",[68,170303,342],{"class":335},[68,170305,170306,170308,170310,170312,170314,170316,170318],{"class":70,"line":1402},[68,170307,168638],{"class":335},[68,170309,381],{"class":331},[68,170311,169515],{"class":335},[68,170313,146950],{"class":5421},[68,170315,381],{"class":331},[68,170317,146955],{"class":78},[68,170319,342],{"class":335},[68,170321,170322],{"class":70,"line":1408},[68,170323,2606],{"emptyLinePlaceholder":260},[68,170325,170326,170329,170331],{"class":70,"line":1422},[68,170327,170328],{"class":335},"words ",[68,170330,381],{"class":331},[68,170332,170333],{"class":335}," content.lower().split()\n",[68,170335,170336,170339,170341],{"class":70,"line":1428},[68,170337,170338],{"class":335},"counter ",[68,170340,381],{"class":331},[68,170342,88069],{"class":335},[68,170344,170345],{"class":70,"line":1519},[68,170346,2606],{"emptyLinePlaceholder":260},[68,170348,170349,170351,170354,170356],{"class":70,"line":1525},[68,170350,3231],{"class":331},[68,170352,170353],{"class":335}," word ",[68,170355,26247],{"class":331},[68,170357,170358],{"class":335}," words:\n",[68,170360,170361,170364,170366,170369,170372,170374,170377],{"class":70,"line":1537},[68,170362,170363],{"class":335},"    word ",[68,170365,381],{"class":331},[68,170367,170368],{"class":335}," word.strip(",[68,170370,170371],{"class":78},"\".,!?;:",[68,170373,156639],{"class":82},[68,170375,170376],{"class":78},"'()[]\"",[68,170378,342],{"class":335},[68,170380,170381,170383,170385],{"class":70,"line":1819},[68,170382,3307],{"class":331},[68,170384,39131],{"class":331},[68,170386,170387],{"class":335}," word:\n",[68,170389,170390],{"class":70,"line":1824},[68,170391,148656],{"class":331},[68,170393,170394,170397,170399,170402,170404,170406,170408],{"class":70,"line":1830},[68,170395,170396],{"class":335},"    counter[word] ",[68,170398,381],{"class":331},[68,170400,170401],{"class":335}," counter.get(word, ",[68,170403,525],{"class":82},[68,170405,13919],{"class":335},[68,170407,814],{"class":331},[68,170409,55900],{"class":82},[68,170411,170412],{"class":70,"line":1835},[68,170413,2606],{"emptyLinePlaceholder":260},[68,170415,170416,170419,170421,170423,170426,170428,170430,170432,170434,170436,170438,170440,170442],{"class":70,"line":1849},[68,170417,170418],{"class":335},"items ",[68,170420,381],{"class":331},[68,170422,163748],{"class":82},[68,170424,170425],{"class":335},"(counter.items(), ",[68,170427,154090],{"class":5421},[68,170429,154093],{"class":331},[68,170431,154096],{"class":335},[68,170433,551],{"class":82},[68,170435,112402],{"class":335},[68,170437,163672],{"class":5421},[68,170439,381],{"class":331},[68,170441,31677],{"class":82},[68,170443,342],{"class":335},[68,170445,170446],{"class":70,"line":1854},[68,170447,2606],{"emptyLinePlaceholder":260},[68,170449,170450,170452,170455,170457,170460,170462],{"class":70,"line":1860},[68,170451,3231],{"class":331},[68,170453,170454],{"class":335}," word, count ",[68,170456,26247],{"class":331},[68,170458,170459],{"class":335}," items[:",[68,170461,779],{"class":82},[68,170463,165899],{"class":335},[68,170465,170466,170468],{"class":70,"line":1881},[68,170467,31500],{"class":82},[68,170469,170470],{"class":335},"(word, count)\n",[14,170472,170474],{"id":170473},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[58,170476,170478],{"className":30579,"code":170477,"language":30581,"meta":63,"style":63},"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",[65,170479,170480,170486,170496,170500,170512,170516,170520,170528,170538,170544,170548,170578,170588,170592,170596,170604,170634,170658,170662,170666,170674,170703,170708],{"__ignoreMap":63},[68,170481,170482,170484],{"class":70,"line":71},[68,170483,30593],{"class":331},[68,170485,147235],{"class":335},[68,170487,170488,170490,170492,170494],{"class":70,"line":92},[68,170489,30938],{"class":331},[68,170491,108511],{"class":335},[68,170493,30593],{"class":331},[68,170495,108516],{"class":335},[68,170497,170498],{"class":70,"line":1387},[68,170499,2606],{"emptyLinePlaceholder":260},[68,170501,170502,170504,170506,170508,170510],{"class":70,"line":1402},[68,170503,151968],{"class":82},[68,170505,13769],{"class":331},[68,170507,108745],{"class":335},[68,170509,151975],{"class":78},[68,170511,342],{"class":335},[68,170513,170514],{"class":70,"line":1408},[68,170515,2606],{"emptyLinePlaceholder":260},[68,170517,170518],{"class":70,"line":1422},[68,170519,2606],{"emptyLinePlaceholder":260},[68,170521,170522,170524,170526],{"class":70,"line":1428},[68,170523,32148],{"class":331},[68,170525,151992],{"class":74},[68,170527,32154],{"class":335},[68,170529,170530,170532,170534,170536],{"class":70,"line":1519},[68,170531,3307],{"class":331},[68,170533,39131],{"class":331},[68,170535,152003],{"class":82},[68,170537,152006],{"class":335},[68,170539,170540,170542],{"class":70,"line":1525},[68,170541,14957],{"class":331},[68,170543,52039],{"class":335},[68,170545,170546],{"class":70,"line":1537},[68,170547,2606],{"emptyLinePlaceholder":260},[68,170549,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570,170572,170574,170576],{"class":70,"line":1819},[68,170551,34379],{"class":331},[68,170553,146935],{"class":82},[68,170555,336],{"class":335},[68,170557,151968],{"class":82},[68,170559,12640],{"class":335},[68,170561,146945],{"class":78},[68,170563,12640],{"class":335},[68,170565,146950],{"class":5421},[68,170567,381],{"class":331},[68,170569,146955],{"class":78},[68,170571,13919],{"class":335},[68,170573,31584],{"class":331},[68,170575,148297],{"class":5421},[68,170577,3945],{"class":335},[68,170579,170580,170582,170584,170586],{"class":70,"line":1824},[68,170581,14957],{"class":331},[68,170583,148308],{"class":335},[68,170585,45555],{"class":5421},[68,170587,342],{"class":335},[68,170589,170590],{"class":70,"line":1830},[68,170591,2606],{"emptyLinePlaceholder":260},[68,170593,170594],{"class":70,"line":1835},[68,170595,2606],{"emptyLinePlaceholder":260},[68,170597,170598,170600,170602],{"class":70,"line":1849},[68,170599,32148],{"class":331},[68,170601,152102],{"class":74},[68,170603,152105],{"class":335},[68,170605,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626,170628,170630,170632],{"class":70,"line":1854},[68,170607,34379],{"class":331},[68,170609,146935],{"class":82},[68,170611,336],{"class":335},[68,170613,151968],{"class":82},[68,170615,12640],{"class":335},[68,170617,152120],{"class":78},[68,170619,12640],{"class":335},[68,170621,146950],{"class":5421},[68,170623,381],{"class":331},[68,170625,146955],{"class":78},[68,170627,13919],{"class":335},[68,170629,31584],{"class":331},[68,170631,148297],{"class":5421},[68,170633,3945],{"class":335},[68,170635,170636,170638,170640,170642,170644,170646,170648,170650,170652,170654,170656],{"class":70,"line":1860},[68,170637,152141],{"class":335},[68,170639,45555],{"class":5421},[68,170641,12640],{"class":335},[68,170643,147281],{"class":5421},[68,170645,381],{"class":331},[68,170647,34188],{"class":82},[68,170649,12640],{"class":335},[68,170651,152156],{"class":5421},[68,170653,381],{"class":331},[68,170655,412],{"class":82},[68,170657,342],{"class":335},[68,170659,170660],{"class":70,"line":1881},[68,170661,2606],{"emptyLinePlaceholder":260},[68,170663,170664],{"class":70,"line":1886},[68,170665,2606],{"emptyLinePlaceholder":260},[68,170667,170668,170670,170672],{"class":70,"line":1900},[68,170669,159860],{"class":335},[68,170671,381],{"class":331},[68,170673,153186],{"class":335},[68,170675,170676,170679,170681,170683,170685,170687,170689,170691,170693,170695,170697,170699,170701],{"class":70,"line":1905},[68,170677,170678],{"class":335},"students.append({",[68,170680,62880],{"class":78},[68,170682,51638],{"class":335},[68,170684,150032],{"class":78},[68,170686,12640],{"class":335},[68,170688,69325],{"class":78},[68,170690,51638],{"class":335},[68,170692,983],{"class":82},[68,170694,12640],{"class":335},[68,170696,151616],{"class":78},[68,170698,51638],{"class":335},[68,170700,1322],{"class":82},[68,170702,165296],{"class":335},[68,170704,170705],{"class":70,"line":1934},[68,170706,170707],{"class":335},"save_students(students)\n",[68,170709,170710,170712,170714,170717],{"class":70,"line":1939},[68,170711,30616],{"class":82},[68,170713,336],{"class":335},[68,170715,170716],{"class":78},"\"保存成功\"",[68,170718,342],{"class":335},[14,170720,170722],{"id":170721},"_814-易错点","8.14 易错点",[23,170724,170725,170729,170735,170740,170747,170754],{},[26,170726,170727,168988],{},[65,170728,1128],{},[26,170730,170731,170732,28588],{},"读写中文要指定 ",[65,170733,170734],{},"encoding=\"utf-8\"",[26,170736,170737,170738,28588],{},"打开文件后要关闭，推荐使用 ",[65,170739,108033],{},[26,170741,170742,170743,170746],{},"读取大文件不要直接 ",[65,170744,170745],{},"read()"," 全部内容。",[26,170748,170749,170750,170753],{},"Windows 写 CSV 时建议加 ",[65,170751,170752],{},"newline=\"\"","，避免空行。",[26,170755,170756],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170758,170760],{"id":170759},"_815-本章练习","8.15 本章练习",[23,170762,170763,170770,170775,170778,170781],{},[26,170764,170765,170766,170769],{},"写入一个 ",[65,170767,170768],{},"students.txt","，每行保存一个学生姓名。",[26,170771,104555,170772,170774],{},[65,170773,170768],{}," 并输出所有学生。",[26,170776,170777],{},"把学生列表保存为 JSON 文件。",[26,170779,170780],{},"从 JSON 文件读取学生数据，计算平均分。",[26,170782,170783,170784,170787,170788,170791],{},"写一个日志函数 ",[65,170785,170786],{},"write_log(message)","，每次调用向 ",[65,170789,170790],{},"app.log"," 追加一行。",[250,170793,170794],{},"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":63,"searchDepth":92,"depth":92,"links":170796},[170797,170798,170802,170803,170809,170810,170811,170812,170813,170814,170815,170816,170817,170818,170819],{"id":168308,"depth":92,"text":168309},{"id":168349,"depth":92,"text":168350,"children":170799},[170800,170801],{"id":168353,"depth":1387,"text":168354},{"id":168387,"depth":1387,"text":168388},{"id":168501,"depth":92,"text":168502},{"id":168594,"depth":92,"text":168595,"children":170804},[170805,170806,170807,170808],{"id":168598,"depth":1387,"text":168599},{"id":168685,"depth":1387,"text":168686},{"id":168755,"depth":1387,"text":168756},{"id":168849,"depth":1387,"text":168850},{"id":168919,"depth":92,"text":168920},{"id":168982,"depth":92,"text":168983},{"id":169143,"depth":92,"text":169144},{"id":169206,"depth":92,"text":169207},{"id":169322,"depth":92,"text":169323},{"id":169532,"depth":92,"text":169533},{"id":169844,"depth":92,"text":169845},{"id":170255,"depth":92,"text":170256},{"id":170473,"depth":92,"text":170474},{"id":170721,"depth":92,"text":170722},{"id":170759,"depth":92,"text":170760},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168300,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170826,"title":170827,"body":170828,"description":257,"extension":258,"meta":173014,"navigation":260,"path":173015,"seo":173016,"stem":173017,"__hash__":173018},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170829,"toc":172981},[170830,170833,170837,170840,170843,170935,170937,170956,170961,170965,170968,170971,171000,171007,171010,171014,171017,171046,171048,171100,171106,171159,171163,171261,171264,171331,171335,171392,171394,171400,171404,171409,171415,171506,171511,171515,171518,171596,171599,171637,171641,171759,171762,171766,171769,171814,171817,171821,171826,171832,171882,171885,171916,171920,171924,171954,171958,171993,171997,172032,172072,172076,172092,172095,172099,172103,172182,172186,172227,172231,172286,172290,172324,172328,172358,172367,172374,172380,172437,172440,172448,172451,172455,172462,172465,172471,172474,172491,172496,172500,172506,172519,172522,172559,172562,172573,172576,172590,172593,172607,172611,172618,172651,172654,172656,172662,172665,172669,172671,172677,172682,172855,172859,172922,172926,172950,172954,172978],[10,170831,170827],{"id":170832},"_9-异常模块与包",[14,170834,170836],{"id":170835},"_91-什么是异常","9.1 什么是异常",[19,170838,170839],{},"异常是程序运行过程中出现的错误。",[19,170841,170842],{},"常见异常：",[471,170844,170845,170854],{},[474,170846,170847],{},[477,170848,170849,170852],{},[480,170850,170851],{},"异常",[480,170853,26073],{},[518,170855,170856,170866,170876,170885,170895,170905,170915,170925],{},[477,170857,170858,170863],{},[523,170859,170860],{},[65,170861,170862],{},"NameError",[523,170864,170865],{},"使用了未定义变量",[477,170867,170868,170873],{},[523,170869,170870],{},[65,170871,170872],{},"TypeError",[523,170874,170875],{},"类型不匹配",[477,170877,170878,170882],{},[523,170879,170880],{},[65,170881,154978],{},[523,170883,170884],{},"值不合法",[477,170886,170887,170892],{},[523,170888,170889],{},[65,170890,170891],{},"IndexError",[523,170893,170894],{},"列表索引越界",[477,170896,170897,170902],{},[523,170898,170899],{},[65,170900,170901],{},"KeyError",[523,170903,170904],{},"字典 key 不存在",[477,170906,170907,170912],{},[523,170908,170909],{},[65,170910,170911],{},"FileNotFoundError",[523,170913,170914],{},"文件不存在",[477,170916,170917,170922],{},[523,170918,170919],{},[65,170920,170921],{},"ZeroDivisionError",[523,170923,170924],{},"除数为 0",[477,170926,170927,170932],{},[523,170928,170929],{},[65,170930,170931],{},"ImportError",[523,170933,170934],{},"导入失败",[19,170936,15340],{},[58,170938,170940],{"className":30579,"code":170939,"language":30581,"meta":63,"style":63},"num = int(\"abc\")\n",[65,170941,170942],{"__ignoreMap":63},[68,170943,170944,170946,170948,170950,170952,170954],{"class":70,"line":71},[68,170945,155931],{"class":335},[68,170947,381],{"class":331},[68,170949,2588],{"class":82},[68,170951,336],{"class":335},[68,170953,156024],{"class":78},[68,170955,342],{"class":335},[19,170957,170958,170959,28588],{},"会触发 ",[65,170960,154978],{},[14,170962,170964],{"id":170963},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170966,170967],{},"如果不处理异常，程序会直接终止。",[19,170969,170970],{},"例如用户输入年龄：",[58,170972,170974],{"className":30579,"code":170973,"language":30581,"meta":63,"style":63},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[65,170975,170976,170994],{"__ignoreMap":63},[68,170977,170978,170980,170982,170984,170986,170988,170990,170992],{"class":70,"line":71},[68,170979,146690],{"class":335},[68,170981,381],{"class":331},[68,170983,2588],{"class":82},[68,170985,336],{"class":335},[68,170987,54022],{"class":82},[68,170989,336],{"class":335},[68,170991,152538],{"class":78},[68,170993,30698],{"class":335},[68,170995,170996,170998],{"class":70,"line":92},[68,170997,30616],{"class":82},[68,170999,155905],{"class":335},[19,171001,171002,171003,171006],{},"用户输入 ",[65,171004,171005],{},"abc","，程序就会报错退出。",[19,171008,171009],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171011,171013],{"id":171012},"_93-try-except","9.3 try except",[19,171015,171016],{},"基础语法：",[58,171018,171020],{"className":30579,"code":171019,"language":30581,"meta":63,"style":63},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[65,171021,171022,171029,171034,171041],{"__ignoreMap":63},[68,171023,171024,171027],{"class":70,"line":71},[68,171025,171026],{"class":331},"try",[68,171028,3945],{"class":335},[68,171030,171031],{"class":70,"line":92},[68,171032,171033],{"class":335},"    可能出错的代码\n",[68,171035,171036,171039],{"class":70,"line":1387},[68,171037,171038],{"class":331},"except",[68,171040,3945],{"class":335},[68,171042,171043],{"class":70,"line":1402},[68,171044,171045],{"class":335},"    出错后的处理代码\n",[19,171047,15340],{},[58,171049,171051],{"className":30579,"code":171050,"language":30581,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[65,171052,171053,171059,171077,171083,171089],{"__ignoreMap":63},[68,171054,171055,171057],{"class":70,"line":71},[68,171056,171026],{"class":331},[68,171058,3945],{"class":335},[68,171060,171061,171063,171065,171067,171069,171071,171073,171075],{"class":70,"line":92},[68,171062,152530],{"class":335},[68,171064,381],{"class":331},[68,171066,2588],{"class":82},[68,171068,336],{"class":335},[68,171070,54022],{"class":82},[68,171072,336],{"class":335},[68,171074,152538],{"class":78},[68,171076,30698],{"class":335},[68,171078,171079,171081],{"class":70,"line":1387},[68,171080,31500],{"class":82},[68,171082,155905],{"class":335},[68,171084,171085,171087],{"class":70,"line":1402},[68,171086,171038],{"class":331},[68,171088,3945],{"class":335},[68,171090,171091,171093,171095,171098],{"class":70,"line":1408},[68,171092,31500],{"class":82},[68,171094,336],{"class":335},[68,171096,171097],{"class":78},"\"年龄必须是数字\"",[68,171099,342],{"class":335},[19,171101,171102,171103,171105],{},"不建议裸写 ",[65,171104,171038],{},"，最好指定异常类型。",[58,171107,171109],{"className":30579,"code":171108,"language":30581,"meta":63,"style":63},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[65,171110,171111,171117,171135,171141,171149],{"__ignoreMap":63},[68,171112,171113,171115],{"class":70,"line":71},[68,171114,171026],{"class":331},[68,171116,3945],{"class":335},[68,171118,171119,171121,171123,171125,171127,171129,171131,171133],{"class":70,"line":92},[68,171120,152530],{"class":335},[68,171122,381],{"class":331},[68,171124,2588],{"class":82},[68,171126,336],{"class":335},[68,171128,54022],{"class":82},[68,171130,336],{"class":335},[68,171132,152538],{"class":78},[68,171134,30698],{"class":335},[68,171136,171137,171139],{"class":70,"line":1387},[68,171138,31500],{"class":82},[68,171140,155905],{"class":335},[68,171142,171143,171145,171147],{"class":70,"line":1402},[68,171144,171038],{"class":331},[68,171146,152370],{"class":82},[68,171148,3945],{"class":335},[68,171150,171151,171153,171155,171157],{"class":70,"line":1408},[68,171152,31500],{"class":82},[68,171154,336],{"class":335},[68,171156,171097],{"class":78},[68,171158,342],{"class":335},[14,171160,171162],{"id":171161},"_94-捕获多个异常","9.4 捕获多个异常",[58,171164,171166],{"className":30579,"code":171165,"language":30581,"meta":63,"style":63},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[65,171167,171168,171174,171195,171215,171222,171230,171241,171250],{"__ignoreMap":63},[68,171169,171170,171172],{"class":70,"line":71},[68,171171,171026],{"class":331},[68,171173,3945],{"class":335},[68,171175,171176,171179,171181,171183,171185,171187,171189,171191,171193],{"class":70,"line":92},[68,171177,171178],{"class":335},"    nums ",[68,171180,381],{"class":331},[68,171182,52427],{"class":335},[68,171184,551],{"class":82},[68,171186,12640],{"class":335},[68,171188,412],{"class":82},[68,171190,12640],{"class":335},[68,171192,406],{"class":82},[68,171194,33447],{"class":335},[68,171196,171197,171200,171202,171204,171206,171208,171210,171213],{"class":70,"line":1387},[68,171198,171199],{"class":335},"    index ",[68,171201,381],{"class":331},[68,171203,2588],{"class":82},[68,171205,336],{"class":335},[68,171207,54022],{"class":82},[68,171209,336],{"class":335},[68,171211,171212],{"class":78},"\"请输入索引:\"",[68,171214,30698],{"class":335},[68,171216,171217,171219],{"class":70,"line":1402},[68,171218,31500],{"class":82},[68,171220,171221],{"class":335},"(nums[index])\n",[68,171223,171224,171226,171228],{"class":70,"line":1408},[68,171225,171038],{"class":331},[68,171227,152370],{"class":82},[68,171229,3945],{"class":335},[68,171231,171232,171234,171236,171239],{"class":70,"line":1422},[68,171233,31500],{"class":82},[68,171235,336],{"class":335},[68,171237,171238],{"class":78},"\"索引必须是整数\"",[68,171240,342],{"class":335},[68,171242,171243,171245,171248],{"class":70,"line":1428},[68,171244,171038],{"class":331},[68,171246,171247],{"class":82}," IndexError",[68,171249,3945],{"class":335},[68,171251,171252,171254,171256,171259],{"class":70,"line":1519},[68,171253,31500],{"class":82},[68,171255,336],{"class":335},[68,171257,171258],{"class":78},"\"索引越界\"",[68,171260,342],{"class":335},[19,171262,171263],{},"多个异常使用相同处理逻辑：",[58,171265,171267],{"className":30579,"code":171266,"language":30581,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[65,171268,171269,171275,171293,171306,171320],{"__ignoreMap":63},[68,171270,171271,171273],{"class":70,"line":71},[68,171272,171026],{"class":331},[68,171274,3945],{"class":335},[68,171276,171277,171279,171281,171283,171285,171287,171289,171291],{"class":70,"line":92},[68,171278,45794],{"class":335},[68,171280,381],{"class":331},[68,171282,2588],{"class":82},[68,171284,336],{"class":335},[68,171286,54022],{"class":82},[68,171288,336],{"class":335},[68,171290,155940],{"class":78},[68,171292,30698],{"class":335},[68,171294,171295,171297,171299,171301,171303],{"class":70,"line":1387},[68,171296,31500],{"class":82},[68,171298,336],{"class":335},[68,171300,779],{"class":82},[68,171302,156190],{"class":331},[68,171304,171305],{"class":335}," num)\n",[68,171307,171308,171310,171312,171314,171316,171318],{"class":70,"line":1402},[68,171309,171038],{"class":331},[68,171311,1865],{"class":335},[68,171313,154978],{"class":82},[68,171315,12640],{"class":335},[68,171317,170921],{"class":82},[68,171319,30987],{"class":335},[68,171321,171322,171324,171326,171329],{"class":70,"line":1408},[68,171323,31500],{"class":82},[68,171325,336],{"class":335},[68,171327,171328],{"class":78},"\"输入不合法\"",[68,171330,342],{"class":335},[14,171332,171334],{"id":171333},"_95-获取异常信息","9.5 获取异常信息",[58,171336,171338],{"className":30579,"code":171337,"language":30581,"meta":63,"style":63},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[65,171339,171340,171346,171360,171371],{"__ignoreMap":63},[68,171341,171342,171344],{"class":70,"line":71},[68,171343,171026],{"class":331},[68,171345,3945],{"class":335},[68,171347,171348,171350,171352,171354,171356,171358],{"class":70,"line":92},[68,171349,45794],{"class":335},[68,171351,381],{"class":331},[68,171353,2588],{"class":82},[68,171355,336],{"class":335},[68,171357,156024],{"class":78},[68,171359,342],{"class":335},[68,171361,171362,171364,171366,171368],{"class":70,"line":1387},[68,171363,171038],{"class":331},[68,171365,152370],{"class":82},[68,171367,64805],{"class":331},[68,171369,171370],{"class":335}," e:\n",[68,171372,171373,171375,171377,171379,171382,171384,171386,171388,171390],{"class":70,"line":1402},[68,171374,31500],{"class":82},[68,171376,336],{"class":335},[68,171378,387],{"class":331},[68,171380,171381],{"class":78},"\"出错了:",[68,171383,1229],{"class":82},[68,171385,409],{"class":335},[68,171387,1279],{"class":82},[68,171389,584],{"class":78},[68,171391,342],{"class":335},[19,171393,146601],{},[58,171395,171398],{"className":171396,"code":171397,"language":5393,"meta":63},[5391],"出错了:invalid literal for int() with base 10: 'abc'\n",[65,171399,171397],{"__ignoreMap":63},[14,171401,171403],{"id":171402},"_96-else和finally","9.6 else和finally",[19,171405,171406,171408],{},[65,171407,1908],{},"：没有异常时执行。",[19,171410,171411,171414],{},[65,171412,171413],{},"finally","：无论是否异常都会执行。",[58,171416,171418],{"className":30579,"code":171417,"language":30581,"meta":63,"style":63},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[65,171419,171420,171426,171444,171452,171462,171468,171489,171495],{"__ignoreMap":63},[68,171421,171422,171424],{"class":70,"line":71},[68,171423,171026],{"class":331},[68,171425,3945],{"class":335},[68,171427,171428,171430,171432,171434,171436,171438,171440,171442],{"class":70,"line":92},[68,171429,45794],{"class":335},[68,171431,381],{"class":331},[68,171433,2588],{"class":82},[68,171435,336],{"class":335},[68,171437,54022],{"class":82},[68,171439,336],{"class":335},[68,171441,155940],{"class":78},[68,171443,30698],{"class":335},[68,171445,171446,171448,171450],{"class":70,"line":1387},[68,171447,171038],{"class":331},[68,171449,152370],{"class":82},[68,171451,3945],{"class":335},[68,171453,171454,171456,171458,171460],{"class":70,"line":1402},[68,171455,31500],{"class":82},[68,171457,336],{"class":335},[68,171459,153358],{"class":78},[68,171461,342],{"class":335},[68,171463,171464,171466],{"class":70,"line":1408},[68,171465,1908],{"class":331},[68,171467,3945],{"class":335},[68,171469,171470,171472,171474,171476,171479,171481,171483,171485,171487],{"class":70,"line":1422},[68,171471,31500],{"class":82},[68,171473,336],{"class":335},[68,171475,387],{"class":331},[68,171477,171478],{"class":78},"\"输入正确:",[68,171480,1229],{"class":82},[68,171482,1872],{"class":335},[68,171484,1279],{"class":82},[68,171486,584],{"class":78},[68,171488,342],{"class":335},[68,171490,171491,171493],{"class":70,"line":1428},[68,171492,171413],{"class":331},[68,171494,3945],{"class":335},[68,171496,171497,171499,171501,171504],{"class":70,"line":1519},[68,171498,31500],{"class":82},[68,171500,336],{"class":335},[68,171502,171503],{"class":78},"\"程序结束\"",[68,171505,342],{"class":335},[19,171507,171508,171510],{},[65,171509,171413],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171512,171514],{"id":171513},"_97-抛出异常","9.7 抛出异常",[19,171516,171517],{},"程序可以主动抛出异常。",[58,171519,171521],{"className":30579,"code":171520,"language":30581,"meta":63,"style":63},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[65,171522,171523,171532,171544,171557,171577,171581,171585],{"__ignoreMap":63},[68,171524,171525,171527,171530],{"class":70,"line":71},[68,171526,32148],{"class":331},[68,171528,171529],{"class":74}," set_age",[68,171531,161559],{"class":335},[68,171533,171534,171536,171538,171540,171542],{"class":70,"line":92},[68,171535,3307],{"class":331},[68,171537,15912],{"class":335},[68,171539,1243],{"class":331},[68,171541,4299],{"class":82},[68,171543,3945],{"class":335},[68,171545,171546,171548,171550,171552,171555],{"class":70,"line":1387},[68,171547,103632],{"class":331},[68,171549,152370],{"class":82},[68,171551,336],{"class":335},[68,171553,171554],{"class":78},"\"年龄不能为负数\"",[68,171556,342],{"class":335},[68,171558,171559,171561,171563,171565,171567,171569,171571,171573,171575],{"class":70,"line":1402},[68,171560,31500],{"class":82},[68,171562,336],{"class":335},[68,171564,387],{"class":331},[68,171566,162127],{"class":78},[68,171568,1229],{"class":82},[68,171570,70422],{"class":335},[68,171572,1279],{"class":82},[68,171574,584],{"class":78},[68,171576,342],{"class":335},[68,171578,171579],{"class":70,"line":1408},[68,171580,2606],{"emptyLinePlaceholder":260},[68,171582,171583],{"class":70,"line":1422},[68,171584,2606],{"emptyLinePlaceholder":260},[68,171586,171587,171590,171592,171594],{"class":70,"line":1428},[68,171588,171589],{"class":335},"set_age(",[68,171591,865],{"class":331},[68,171593,551],{"class":82},[68,171595,342],{"class":335},[19,171597,171598],{},"调用者可以捕获：",[58,171600,171602],{"className":30579,"code":171601,"language":30581,"meta":63,"style":63},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[65,171603,171604,171610,171621,171631],{"__ignoreMap":63},[68,171605,171606,171608],{"class":70,"line":71},[68,171607,171026],{"class":331},[68,171609,3945],{"class":335},[68,171611,171612,171615,171617,171619],{"class":70,"line":92},[68,171613,171614],{"class":335},"    set_age(",[68,171616,865],{"class":331},[68,171618,551],{"class":82},[68,171620,342],{"class":335},[68,171622,171623,171625,171627,171629],{"class":70,"line":1387},[68,171624,171038],{"class":331},[68,171626,152370],{"class":82},[68,171628,64805],{"class":331},[68,171630,171370],{"class":335},[68,171632,171633,171635],{"class":70,"line":1402},[68,171634,31500],{"class":82},[68,171636,67200],{"class":335},[14,171638,171640],{"id":171639},"_98-自定义异常","9.8 自定义异常",[58,171642,171644],{"className":30579,"code":171643,"language":30581,"meta":63,"style":63},"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",[65,171645,171646,171660,171664,171668,171672,171680,171690,171701,171711,171715,171719,171725,171742,171753],{"__ignoreMap":63},[68,171647,171648,171650,171653,171655,171658],{"class":70,"line":71},[68,171649,14899],{"class":331},[68,171651,171652],{"class":74}," BalanceNotEnoughError",[68,171654,336],{"class":335},[68,171656,171657],{"class":82},"Exception",[68,171659,30987],{"class":335},[68,171661,171662],{"class":70,"line":92},[68,171663,149681],{"class":331},[68,171665,171666],{"class":70,"line":1387},[68,171667,2606],{"emptyLinePlaceholder":260},[68,171669,171670],{"class":70,"line":1402},[68,171671,2606],{"emptyLinePlaceholder":260},[68,171673,171674,171676,171678],{"class":70,"line":1408},[68,171675,32148],{"class":331},[68,171677,150330],{"class":74},[68,171679,162956],{"class":335},[68,171681,171682,171684,171686,171688],{"class":70,"line":1422},[68,171683,3307],{"class":331},[68,171685,150286],{"class":335},[68,171687,1293],{"class":331},[68,171689,162733],{"class":335},[68,171691,171692,171694,171697,171699],{"class":70,"line":1428},[68,171693,103632],{"class":331},[68,171695,171696],{"class":335}," BalanceNotEnoughError(",[68,171698,150381],{"class":78},[68,171700,342],{"class":335},[68,171702,171703,171705,171707,171709],{"class":70,"line":1519},[68,171704,4296],{"class":331},[68,171706,162963],{"class":335},[68,171708,865],{"class":331},[68,171710,150319],{"class":335},[68,171712,171713],{"class":70,"line":1525},[68,171714,2606],{"emptyLinePlaceholder":260},[68,171716,171717],{"class":70,"line":1537},[68,171718,2606],{"emptyLinePlaceholder":260},[68,171720,171721,171723],{"class":70,"line":1819},[68,171722,171026],{"class":331},[68,171724,3945],{"class":335},[68,171726,171727,171729,171731,171734,171736,171738,171740],{"class":70,"line":1824},[68,171728,162634],{"class":335},[68,171730,381],{"class":331},[68,171732,171733],{"class":335}," withdraw(",[68,171735,644],{"class":82},[68,171737,12640],{"class":335},[68,171739,1929],{"class":82},[68,171741,342],{"class":335},[68,171743,171744,171746,171749,171751],{"class":70,"line":1830},[68,171745,171038],{"class":331},[68,171747,171748],{"class":335}," BalanceNotEnoughError ",[68,171750,31584],{"class":331},[68,171752,171370],{"class":335},[68,171754,171755,171757],{"class":70,"line":1835},[68,171756,31500],{"class":82},[68,171758,67200],{"class":335},[19,171760,171761],{},"入门阶段大多数情况使用内置异常即可。",[14,171763,171765],{"id":171764},"_99-traceback","9.9 traceback",[19,171767,171768],{},"调试时可以输出完整异常堆栈。",[58,171770,171772],{"className":30579,"code":171771,"language":30581,"meta":63,"style":63},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[65,171773,171774,171781,171785,171791,171801,171809],{"__ignoreMap":63},[68,171775,171776,171778],{"class":70,"line":71},[68,171777,30593],{"class":331},[68,171779,171780],{"class":335}," traceback\n",[68,171782,171783],{"class":70,"line":92},[68,171784,2606],{"emptyLinePlaceholder":260},[68,171786,171787,171789],{"class":70,"line":1387},[68,171788,171026],{"class":331},[68,171790,3945],{"class":335},[68,171792,171793,171795,171797,171799],{"class":70,"line":1402},[68,171794,2191],{"class":82},[68,171796,336],{"class":335},[68,171798,156024],{"class":78},[68,171800,342],{"class":335},[68,171802,171803,171805,171807],{"class":70,"line":1408},[68,171804,171038],{"class":331},[68,171806,152370],{"class":82},[68,171808,3945],{"class":335},[68,171810,171811],{"class":70,"line":1422},[68,171812,171813],{"class":335},"    traceback.print_exc()\n",[19,171815,171816],{},"日志系统中常把异常堆栈记录到文件。",[14,171818,171820],{"id":171819},"_910-什么是模块","9.10 什么是模块",[19,171822,171823,171824,126180],{},"模块就是一个 ",[65,171825,146496],{},[19,171827,171828,171829,24822],{},"例如创建 ",[65,171830,171831],{},"my_math.py",[58,171833,171835],{"className":30579,"code":171834,"language":30581,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[65,171836,171837,171845,171855,171859,171863,171872],{"__ignoreMap":63},[68,171838,171839,171841,171843],{"class":70,"line":71},[68,171840,32148],{"class":331},[68,171842,138],{"class":74},[68,171844,151237],{"class":335},[68,171846,171847,171849,171851,171853],{"class":70,"line":92},[68,171848,4296],{"class":331},[68,171850,11074],{"class":335},[68,171852,814],{"class":331},[68,171854,151248],{"class":335},[68,171856,171857],{"class":70,"line":1387},[68,171858,2606],{"emptyLinePlaceholder":260},[68,171860,171861],{"class":70,"line":1402},[68,171862,2606],{"emptyLinePlaceholder":260},[68,171864,171865,171867,171870],{"class":70,"line":1408},[68,171866,32148],{"class":331},[68,171868,171869],{"class":74}," sub",[68,171871,151237],{"class":335},[68,171873,171874,171876,171878,171880],{"class":70,"line":1422},[68,171875,4296],{"class":331},[68,171877,11074],{"class":335},[68,171879,865],{"class":331},[68,171881,151248],{"class":335},[19,171883,171884],{},"在另一个文件中导入：",[58,171886,171888],{"className":30579,"code":171887,"language":30581,"meta":63,"style":63},"import my_math\n\nprint(my_math.add(1, 2))\n",[65,171889,171890,171897,171901],{"__ignoreMap":63},[68,171891,171892,171894],{"class":70,"line":71},[68,171893,30593],{"class":331},[68,171895,171896],{"class":335}," my_math\n",[68,171898,171899],{"class":70,"line":92},[68,171900,2606],{"emptyLinePlaceholder":260},[68,171902,171903,171905,171908,171910,171912,171914],{"class":70,"line":1387},[68,171904,30616],{"class":82},[68,171906,171907],{"class":335},"(my_math.add(",[68,171909,551],{"class":82},[68,171911,12640],{"class":335},[68,171913,412],{"class":82},[68,171915,30698],{"class":335},[14,171917,171919],{"id":171918},"_911-import导入","9.11 import导入",[301,171921,171923],{"id":171922},"_9111-导入模块","9.11.1 导入模块",[58,171925,171927],{"className":30579,"code":171926,"language":30581,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\n",[65,171928,171929,171935,171939],{"__ignoreMap":63},[68,171930,171931,171933],{"class":70,"line":71},[68,171932,30593],{"class":331},[68,171934,45529],{"class":335},[68,171936,171937],{"class":70,"line":92},[68,171938,2606],{"emptyLinePlaceholder":260},[68,171940,171941,171943,171946,171948,171950,171952],{"class":70,"line":1387},[68,171942,30616],{"class":82},[68,171944,171945],{"class":335},"(random.randint(",[68,171947,551],{"class":82},[68,171949,12640],{"class":335},[68,171951,779],{"class":82},[68,171953,30698],{"class":335},[301,171955,171957],{"id":171956},"_9112-导入指定内容","9.11.2 导入指定内容",[58,171959,171961],{"className":30579,"code":171960,"language":30581,"meta":63,"style":63},"from random import randint\n\nprint(randint(1, 10))\n",[65,171962,171963,171974,171978],{"__ignoreMap":63},[68,171964,171965,171967,171969,171971],{"class":70,"line":71},[68,171966,30938],{"class":331},[68,171968,57997],{"class":335},[68,171970,30593],{"class":331},[68,171972,171973],{"class":335}," randint\n",[68,171975,171976],{"class":70,"line":92},[68,171977,2606],{"emptyLinePlaceholder":260},[68,171979,171980,171982,171985,171987,171989,171991],{"class":70,"line":1387},[68,171981,30616],{"class":82},[68,171983,171984],{"class":335},"(randint(",[68,171986,551],{"class":82},[68,171988,12640],{"class":335},[68,171990,779],{"class":82},[68,171992,30698],{"class":335},[301,171994,171996],{"id":171995},"_9113-起别名","9.11.3 起别名",[58,171998,172000],{"className":30579,"code":171999,"language":30581,"meta":63,"style":63},"import random as rd\n\nprint(rd.randint(1, 10))\n",[65,172001,172002,172013,172017],{"__ignoreMap":63},[68,172003,172004,172006,172008,172010],{"class":70,"line":71},[68,172005,30593],{"class":331},[68,172007,57997],{"class":335},[68,172009,31584],{"class":331},[68,172011,172012],{"class":335}," rd\n",[68,172014,172015],{"class":70,"line":92},[68,172016,2606],{"emptyLinePlaceholder":260},[68,172018,172019,172021,172024,172026,172028,172030],{"class":70,"line":1387},[68,172020,30616],{"class":82},[68,172022,172023],{"class":335},"(rd.randint(",[68,172025,551],{"class":82},[68,172027,12640],{"class":335},[68,172029,779],{"class":82},[68,172031,30698],{"class":335},[58,172033,172035],{"className":30579,"code":172034,"language":30581,"meta":63,"style":63},"from random import randint as rint\n\nprint(rint(1, 10))\n",[65,172036,172037,172053,172057],{"__ignoreMap":63},[68,172038,172039,172041,172043,172045,172048,172050],{"class":70,"line":71},[68,172040,30938],{"class":331},[68,172042,57997],{"class":335},[68,172044,30593],{"class":331},[68,172046,172047],{"class":335}," randint ",[68,172049,31584],{"class":331},[68,172051,172052],{"class":335}," rint\n",[68,172054,172055],{"class":70,"line":92},[68,172056,2606],{"emptyLinePlaceholder":260},[68,172058,172059,172061,172064,172066,172068,172070],{"class":70,"line":1387},[68,172060,30616],{"class":82},[68,172062,172063],{"class":335},"(rint(",[68,172065,551],{"class":82},[68,172067,12640],{"class":335},[68,172069,779],{"class":82},[68,172071,30698],{"class":335},[301,172073,172075],{"id":172074},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[58,172077,172079],{"className":30579,"code":172078,"language":30581,"meta":63,"style":63},"from random import *\n",[65,172080,172081],{"__ignoreMap":63},[68,172082,172083,172085,172087,172089],{"class":70,"line":71},[68,172084,30938],{"class":331},[68,172086,57997],{"class":335},[68,172088,30593],{"class":331},[68,172090,172091],{"class":331}," *\n",[19,172093,172094],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172096,172098],{"id":172097},"_912-常用内置模块","9.12 常用内置模块",[301,172100,172102],{"id":172101},"_9121-random","9.12.1 random",[58,172104,172106],{"className":30579,"code":172105,"language":30581,"meta":63,"style":63},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[65,172107,172108,172114,172118,172132,172151],{"__ignoreMap":63},[68,172109,172110,172112],{"class":70,"line":71},[68,172111,30593],{"class":331},[68,172113,45529],{"class":335},[68,172115,172116],{"class":70,"line":92},[68,172117,2606],{"emptyLinePlaceholder":260},[68,172119,172120,172122,172124,172126,172128,172130],{"class":70,"line":1387},[68,172121,30616],{"class":82},[68,172123,171945],{"class":335},[68,172125,551],{"class":82},[68,172127,12640],{"class":335},[68,172129,779],{"class":82},[68,172131,30698],{"class":335},[68,172133,172134,172136,172139,172141,172143,172145,172147,172149],{"class":70,"line":1402},[68,172135,30616],{"class":82},[68,172137,172138],{"class":335},"(random.choice([",[68,172140,150032],{"class":78},[68,172142,12640],{"class":335},[68,172144,151080],{"class":78},[68,172146,12640],{"class":335},[68,172148,159875],{"class":78},[68,172150,33344],{"class":335},[68,172152,172153,172155,172158,172160,172162,172164,172166,172168,172170,172172,172174,172176,172178,172180],{"class":70,"line":1408},[68,172154,30616],{"class":82},[68,172156,172157],{"class":335},"(random.sample([",[68,172159,551],{"class":82},[68,172161,12640],{"class":335},[68,172163,412],{"class":82},[68,172165,12640],{"class":335},[68,172167,406],{"class":82},[68,172169,12640],{"class":335},[68,172171,626],{"class":82},[68,172173,12640],{"class":335},[68,172175,652],{"class":82},[68,172177,112402],{"class":335},[68,172179,412],{"class":82},[68,172181,30698],{"class":335},[301,172183,172185],{"id":172184},"_9122-time","9.12.2 time",[58,172187,172189],{"className":30579,"code":172188,"language":30581,"meta":63,"style":63},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[65,172190,172191,172197,172201,172208,172216],{"__ignoreMap":63},[68,172192,172193,172195],{"class":70,"line":71},[68,172194,30593],{"class":331},[68,172196,32030],{"class":335},[68,172198,172199],{"class":70,"line":92},[68,172200,2606],{"emptyLinePlaceholder":260},[68,172202,172203,172205],{"class":70,"line":1387},[68,172204,30616],{"class":82},[68,172206,172207],{"class":335},"(time.time())\n",[68,172209,172210,172212,172214],{"class":70,"line":1402},[68,172211,95272],{"class":335},[68,172213,551],{"class":82},[68,172215,342],{"class":335},[68,172217,172218,172220,172222,172225],{"class":70,"line":1408},[68,172219,30616],{"class":82},[68,172221,336],{"class":335},[68,172223,172224],{"class":78},"\"1秒后执行\"",[68,172226,342],{"class":335},[301,172228,172230],{"id":172229},"_9123-datetime","9.12.3 datetime",[58,172232,172234],{"className":30579,"code":172233,"language":30581,"meta":63,"style":63},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[65,172235,172236,172248,172252,172262,172269],{"__ignoreMap":63},[68,172237,172238,172240,172243,172245],{"class":70,"line":71},[68,172239,30938],{"class":331},[68,172241,172242],{"class":335}," datetime ",[68,172244,30593],{"class":331},[68,172246,172247],{"class":335}," datetime\n",[68,172249,172250],{"class":70,"line":92},[68,172251,2606],{"emptyLinePlaceholder":260},[68,172253,172254,172257,172259],{"class":70,"line":1387},[68,172255,172256],{"class":335},"now ",[68,172258,381],{"class":331},[68,172260,172261],{"class":335}," datetime.now()\n",[68,172263,172264,172266],{"class":70,"line":1402},[68,172265,30616],{"class":82},[68,172267,172268],{"class":335},"(now)\n",[68,172270,172271,172273,172276,172279,172281,172284],{"class":70,"line":1408},[68,172272,30616],{"class":82},[68,172274,172275],{"class":335},"(now.strftime(",[68,172277,172278],{"class":78},"\"%Y-%m-",[68,172280,156835],{"class":82},[68,172282,172283],{"class":78}," %H:%M:%S\"",[68,172285,30698],{"class":335},[301,172287,172289],{"id":172288},"_9124-os","9.12.4 os",[58,172291,172293],{"className":30579,"code":172292,"language":30581,"meta":63,"style":63},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[65,172294,172295,172301,172305,172312],{"__ignoreMap":63},[68,172296,172297,172299],{"class":70,"line":71},[68,172298,30593],{"class":331},[68,172300,45506],{"class":335},[68,172302,172303],{"class":70,"line":92},[68,172304,2606],{"emptyLinePlaceholder":260},[68,172306,172307,172309],{"class":70,"line":1387},[68,172308,30616],{"class":82},[68,172310,172311],{"class":335},"(os.getcwd())\n",[68,172313,172314,172316,172319,172322],{"class":70,"line":1402},[68,172315,30616],{"class":82},[68,172317,172318],{"class":335},"(os.listdir(",[68,172320,172321],{"class":78},"\".\"",[68,172323,30698],{"class":335},[301,172325,172327],{"id":172326},"_9125-sys","9.12.5 sys",[58,172329,172331],{"className":30579,"code":172330,"language":30581,"meta":63,"style":63},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[65,172332,172333,172340,172344,172351],{"__ignoreMap":63},[68,172334,172335,172337],{"class":70,"line":71},[68,172336,30593],{"class":331},[68,172338,172339],{"class":335}," sys\n",[68,172341,172342],{"class":70,"line":92},[68,172343,2606],{"emptyLinePlaceholder":260},[68,172345,172346,172348],{"class":70,"line":1387},[68,172347,30616],{"class":82},[68,172349,172350],{"class":335},"(sys.version)\n",[68,172352,172353,172355],{"class":70,"line":1402},[68,172354,30616],{"class":82},[68,172356,172357],{"class":335},"(sys.path)\n",[14,172359,172361,172362,172364,172365,584],{"id":172360},"_913-if-name-main","9.13 if ",[483,172363,80011],{}," == \"",[483,172366,102258],{},[19,172368,172369,172370,172373],{},"模块被直接运行和被导入时，",[65,172371,172372],{},"__name__"," 的值不同。",[19,172375,172376,172377,24822],{},"创建 ",[65,172378,172379],{},"my_module.py",[58,172381,172383],{"className":30579,"code":172382,"language":30581,"meta":63,"style":63},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[65,172384,172385,172393,172403,172407,172411,172423],{"__ignoreMap":63},[68,172386,172387,172389,172391],{"class":70,"line":71},[68,172388,32148],{"class":331},[68,172390,138],{"class":74},[68,172392,151237],{"class":335},[68,172394,172395,172397,172399,172401],{"class":70,"line":92},[68,172396,4296],{"class":331},[68,172398,11074],{"class":335},[68,172400,814],{"class":331},[68,172402,151248],{"class":335},[68,172404,172405],{"class":70,"line":1387},[68,172406,2606],{"emptyLinePlaceholder":260},[68,172408,172409],{"class":70,"line":1402},[68,172410,2606],{"emptyLinePlaceholder":260},[68,172412,172413,172415,172417,172419,172421],{"class":70,"line":1408},[68,172414,1738],{"class":331},[68,172416,31421],{"class":82},[68,172418,101759],{"class":331},[68,172420,101762],{"class":78},[68,172422,3945],{"class":335},[68,172424,172425,172427,172429,172431,172433,172435],{"class":70,"line":1422},[68,172426,31500],{"class":82},[68,172428,166744],{"class":335},[68,172430,551],{"class":82},[68,172432,12640],{"class":335},[68,172434,412],{"class":82},[68,172436,30698],{"class":335},[19,172438,172439],{},"作用：",[23,172441,172442,172445],{},[26,172443,172444],{},"直接运行该文件时，执行测试代码。",[26,172446,172447],{},"被其他文件导入时，不执行测试代码。",[19,172449,172450],{},"这是写模块时很常用的习惯。",[14,172452,172454],{"id":172453},"_914-包","9.14 包",[19,172456,172457,172458,172461],{},"包是包含 ",[65,172459,172460],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172463,172464],{},"目录结构：",[58,172466,172469],{"className":172467,"code":172468,"language":5393,"meta":63},[5391],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[65,172470,172468],{"__ignoreMap":63},[19,172472,172473],{},"导入：",[58,172475,172477],{"className":30579,"code":172476,"language":30581,"meta":63,"style":63},"from utils.file_utils import read_file\n",[65,172478,172479],{"__ignoreMap":63},[68,172480,172481,172483,172486,172488],{"class":70,"line":71},[68,172482,30938],{"class":331},[68,172484,172485],{"class":335}," utils.file_utils ",[68,172487,30593],{"class":331},[68,172489,172490],{"class":335}," read_file\n",[19,172492,172493,172495],{},[65,172494,172460],{}," 可以为空，也可以写包初始化逻辑。",[14,172497,172499],{"id":172498},"_915-第三方包","9.15 第三方包",[19,172501,172502,172503,172505],{},"第三方包通过 ",[65,172504,24036],{}," 安装。",[58,172507,172509],{"className":24027,"code":172508,"language":24029,"meta":63,"style":63},"pip install requests\n",[65,172510,172511],{"__ignoreMap":63},[68,172512,172513,172515,172517],{"class":70,"line":71},[68,172514,24036],{"class":74},[68,172516,24039],{"class":78},[68,172518,146242],{"class":78},[19,172520,172521],{},"使用：",[58,172523,172525],{"className":30579,"code":172524,"language":30581,"meta":63,"style":63},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[65,172526,172527,172533,172537,172552],{"__ignoreMap":63},[68,172528,172529,172531],{"class":70,"line":71},[68,172530,30593],{"class":331},[68,172532,146242],{"class":335},[68,172534,172535],{"class":70,"line":92},[68,172536,2606],{"emptyLinePlaceholder":260},[68,172538,172539,172542,172544,172547,172550],{"class":70,"line":1387},[68,172540,172541],{"class":335},"response ",[68,172543,381],{"class":331},[68,172545,172546],{"class":335}," requests.get(",[68,172548,172549],{"class":78},"\"https:\u002F\u002Fwww.example.com\"",[68,172551,342],{"class":335},[68,172553,172554,172556],{"class":70,"line":1402},[68,172555,30616],{"class":82},[68,172557,172558],{"class":335},"(response.status_code)\n",[19,172560,172561],{},"查看已安装包：",[58,172563,172565],{"className":24027,"code":172564,"language":24029,"meta":63,"style":63},"pip list\n",[65,172566,172567],{"__ignoreMap":63},[68,172568,172569,172571],{"class":70,"line":71},[68,172570,24036],{"class":74},[68,172572,119153],{"class":78},[19,172574,172575],{},"导出项目依赖：",[58,172577,172578],{"className":24027,"code":146437,"language":24029,"meta":63,"style":63},[65,172579,172580],{"__ignoreMap":63},[68,172581,172582,172584,172586,172588],{"class":70,"line":71},[68,172583,24036],{"class":74},[68,172585,146446],{"class":78},[68,172587,26426],{"class":331},[68,172589,146451],{"class":78},[19,172591,172592],{},"安装项目依赖：",[58,172594,172595],{"className":24027,"code":146457,"language":24029,"meta":63,"style":63},[65,172596,172597],{"__ignoreMap":63},[68,172598,172599,172601,172603,172605],{"class":70,"line":71},[68,172600,24036],{"class":74},[68,172602,24039],{"class":78},[68,172604,119837],{"class":82},[68,172606,146451],{"class":78},[14,172608,172610],{"id":172609},"_916-模块搜索路径","9.16 模块搜索路径",[19,172612,172613,172614,172617],{},"Python 导入模块时会在 ",[65,172615,172616],{},"sys.path"," 中查找。",[58,172619,172621],{"className":30579,"code":172620,"language":30581,"meta":63,"style":63},"import sys\n\nfor path in sys.path:\n    print(path)\n",[65,172622,172623,172629,172633,172645],{"__ignoreMap":63},[68,172624,172625,172627],{"class":70,"line":71},[68,172626,30593],{"class":331},[68,172628,172339],{"class":335},[68,172630,172631],{"class":70,"line":92},[68,172632,2606],{"emptyLinePlaceholder":260},[68,172634,172635,172637,172640,172642],{"class":70,"line":1387},[68,172636,3231],{"class":331},[68,172638,172639],{"class":335}," path ",[68,172641,26247],{"class":331},[68,172643,172644],{"class":335}," sys.path:\n",[68,172646,172647,172649],{"class":70,"line":1402},[68,172648,31500],{"class":82},[68,172650,169373],{"class":335},[19,172652,172653],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172655,157767],{},[58,172657,172660],{"className":172658,"code":172659,"language":5393,"meta":63},[5391],"random.py\njson.py\ntime.py\n",[65,172661,172659],{"__ignoreMap":63},[19,172663,172664],{},"这些文件名可能导致导入异常。",[14,172666,172668],{"id":172667},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172670,172464],{},[58,172672,172675],{"className":172673,"code":172674,"language":5393,"meta":63},[5391],"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",[65,172676,172674],{"__ignoreMap":63},[19,172678,172679,24822],{},[65,172680,172681],{},"utils\u002Ffile_utils.py",[58,172683,172685],{"className":30579,"code":172684,"language":30581,"meta":63,"style":63},"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",[65,172686,172687,172693,172703,172707,172711,172721,172731,172739,172745,172749,172776,172786,172790,172794,172804,172830],{"__ignoreMap":63},[68,172688,172689,172691],{"class":70,"line":71},[68,172690,30593],{"class":331},[68,172692,147235],{"class":335},[68,172694,172695,172697,172699,172701],{"class":70,"line":92},[68,172696,30938],{"class":331},[68,172698,108511],{"class":335},[68,172700,30593],{"class":331},[68,172702,108516],{"class":335},[68,172704,172705],{"class":70,"line":1387},[68,172706,2606],{"emptyLinePlaceholder":260},[68,172708,172709],{"class":70,"line":1402},[68,172710,2606],{"emptyLinePlaceholder":260},[68,172712,172713,172715,172718],{"class":70,"line":1408},[68,172714,32148],{"class":331},[68,172716,172717],{"class":74}," read_json",[68,172719,172720],{"class":335},"(path):\n",[68,172722,172723,172726,172728],{"class":70,"line":1422},[68,172724,172725],{"class":335},"    path ",[68,172727,381],{"class":331},[68,172729,172730],{"class":335}," Path(path)\n",[68,172732,172733,172735,172737],{"class":70,"line":1428},[68,172734,3307],{"class":331},[68,172736,39131],{"class":331},[68,172738,169454],{"class":335},[68,172740,172741,172743],{"class":70,"line":1519},[68,172742,14957],{"class":331},[68,172744,52039],{"class":335},[68,172746,172747],{"class":70,"line":1525},[68,172748,2606],{"emptyLinePlaceholder":260},[68,172750,172751,172753,172755,172758,172760,172762,172764,172766,172768,172770,172772,172774],{"class":70,"line":1537},[68,172752,34379],{"class":331},[68,172754,146935],{"class":82},[68,172756,172757],{"class":335},"(path, ",[68,172759,146945],{"class":78},[68,172761,12640],{"class":335},[68,172763,146950],{"class":5421},[68,172765,381],{"class":331},[68,172767,146955],{"class":78},[68,172769,13919],{"class":335},[68,172771,31584],{"class":331},[68,172773,148297],{"class":5421},[68,172775,3945],{"class":335},[68,172777,172778,172780,172782,172784],{"class":70,"line":1819},[68,172779,14957],{"class":331},[68,172781,148308],{"class":335},[68,172783,45555],{"class":5421},[68,172785,342],{"class":335},[68,172787,172788],{"class":70,"line":1824},[68,172789,2606],{"emptyLinePlaceholder":260},[68,172791,172792],{"class":70,"line":1830},[68,172793,2606],{"emptyLinePlaceholder":260},[68,172795,172796,172798,172801],{"class":70,"line":1835},[68,172797,32148],{"class":331},[68,172799,172800],{"class":74}," write_json",[68,172802,172803],{"class":335},"(path, data):\n",[68,172805,172806,172808,172810,172812,172814,172816,172818,172820,172822,172824,172826,172828],{"class":70,"line":1849},[68,172807,34379],{"class":331},[68,172809,146935],{"class":82},[68,172811,172757],{"class":335},[68,172813,152120],{"class":78},[68,172815,12640],{"class":335},[68,172817,146950],{"class":5421},[68,172819,381],{"class":331},[68,172821,146955],{"class":78},[68,172823,13919],{"class":335},[68,172825,31584],{"class":331},[68,172827,148297],{"class":5421},[68,172829,3945],{"class":335},[68,172831,172832,172835,172837,172839,172841,172843,172845,172847,172849,172851,172853],{"class":70,"line":1854},[68,172833,172834],{"class":335},"        json.dump(data, ",[68,172836,45555],{"class":5421},[68,172838,12640],{"class":335},[68,172840,147281],{"class":5421},[68,172842,381],{"class":331},[68,172844,34188],{"class":82},[68,172846,12640],{"class":335},[68,172848,152156],{"class":5421},[68,172850,381],{"class":331},[68,172852,412],{"class":82},[68,172854,342],{"class":335},[19,172856,172857,24822],{},[65,172858,154751],{},[58,172860,172862],{"className":30579,"code":172861,"language":30581,"meta":63,"style":63},"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",[65,172863,172864,172875,172879,172892,172912],{"__ignoreMap":63},[68,172865,172866,172868,172870,172872],{"class":70,"line":71},[68,172867,30938],{"class":331},[68,172869,172485],{"class":335},[68,172871,30593],{"class":331},[68,172873,172874],{"class":335}," read_json, write_json\n",[68,172876,172877],{"class":70,"line":92},[68,172878,2606],{"emptyLinePlaceholder":260},[68,172880,172881,172883,172885,172888,172890],{"class":70,"line":1387},[68,172882,159860],{"class":335},[68,172884,381],{"class":331},[68,172886,172887],{"class":335}," read_json(",[68,172889,151975],{"class":78},[68,172891,342],{"class":335},[68,172893,172894,172896,172898,172900,172902,172904,172906,172908,172910],{"class":70,"line":1402},[68,172895,170678],{"class":335},[68,172897,62880],{"class":78},[68,172899,51638],{"class":335},[68,172901,150032],{"class":78},[68,172903,12640],{"class":335},[68,172905,151616],{"class":78},[68,172907,51638],{"class":335},[68,172909,1322],{"class":82},[68,172911,165296],{"class":335},[68,172913,172914,172917,172919],{"class":70,"line":1408},[68,172915,172916],{"class":335},"write_json(",[68,172918,151975],{"class":78},[68,172920,172921],{"class":335},", students)\n",[14,172923,172925],{"id":172924},"_918-易错点","9.18 易错点",[23,172927,172928,172931,172936,172941,172944,172947],{},[26,172929,172930],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[26,172932,172933,172934,28588],{},"能指定异常类型就不要裸写 ",[65,172935,171038],{},[26,172937,172938,172940],{},[65,172939,171413],{}," 无论是否出错都会执行。",[26,172942,172943],{},"模块文件名不要和标准库重名。",[26,172945,172946],{},"导入自己写的模块时，要注意运行目录。",[26,172948,172949],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172951,172953],{"id":172952},"_919-本章练习","9.19 本章练习",[23,172955,172956,172959,172962,172968,172975],{},[26,172957,172958],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[26,172960,172961],{},"写函数读取文件，如果文件不存在则返回空字符串。",[26,172963,172376,172964,172967],{},[65,172965,172966],{},"math_utils.py","，实现加减乘除函数并导入使用。",[26,172969,172970,172971,172974],{},"创建一个 ",[65,172972,172973],{},"utils"," 包，把 JSON 读写函数放进去。",[26,172976,172977],{},"写一个程序，捕获除零异常和输入格式异常。",[250,172979,172980],{},"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":63,"searchDepth":92,"depth":92,"links":172982},[172983,172984,172985,172986,172987,172988,172989,172990,172991,172992,172993,172999,173006,173008,173009,173010,173011,173012,173013],{"id":170835,"depth":92,"text":170836},{"id":170963,"depth":92,"text":170964},{"id":171012,"depth":92,"text":171013},{"id":171161,"depth":92,"text":171162},{"id":171333,"depth":92,"text":171334},{"id":171402,"depth":92,"text":171403},{"id":171513,"depth":92,"text":171514},{"id":171639,"depth":92,"text":171640},{"id":171764,"depth":92,"text":171765},{"id":171819,"depth":92,"text":171820},{"id":171918,"depth":92,"text":171919,"children":172994},[172995,172996,172997,172998],{"id":171922,"depth":1387,"text":171923},{"id":171956,"depth":1387,"text":171957},{"id":171995,"depth":1387,"text":171996},{"id":172074,"depth":1387,"text":172075},{"id":172097,"depth":92,"text":172098,"children":173000},[173001,173002,173003,173004,173005],{"id":172101,"depth":1387,"text":172102},{"id":172184,"depth":1387,"text":172185},{"id":172229,"depth":1387,"text":172230},{"id":172288,"depth":1387,"text":172289},{"id":172326,"depth":1387,"text":172327},{"id":172360,"depth":92,"text":173007},"9.13 if name == \"main\"",{"id":172453,"depth":92,"text":172454},{"id":172498,"depth":92,"text":172499},{"id":172609,"depth":92,"text":172610},{"id":172667,"depth":92,"text":172668},{"id":172924,"depth":92,"text":172925},{"id":172952,"depth":92,"text":172953},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170827,"description":257},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173020,"title":173021,"body":173022,"description":173185,"extension":258,"meta":173186,"navigation":260,"path":173187,"seo":173188,"stem":173189,"__hash__":173190},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173023,"toc":173180},[173024,173027,173030,173033,173044,173046,173120,173123,173126,173129,173132,173135,173138,173141,173144,173147,173150],[10,173025,173021],{"id":173026},"python教程",[19,173028,173029],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173031,173032],{},"建议学习环境：",[23,173034,173035,173038,173041],{},[26,173036,173037],{},"Python 版本：Python 3.10 及以上。",[26,173039,173040],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[26,173042,173043],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173045,117278],{"id":117278},[23,173047,173048,173054,173060,173066,173072,173078,173084,173090,173096,173102,173108,173114],{},[26,173049,173050],{},[30,173051,173053],{"href":173052},".\u002Fch1-Python","Python环境与第一个程序",[26,173055,173056],{},[30,173057,173059],{"href":173058},".\u002Fch2","基础语法、变量与字符串",[26,173061,173062],{},[30,173063,173065],{"href":173064},".\u002Fch3","判断语句",[26,173067,173068],{},[30,173069,173071],{"href":173070},".\u002Fch4","循环语句",[26,173073,173074],{},[30,173075,173077],{"href":173076},".\u002Fch5","函数基础",[26,173079,173080],{},[30,173081,173083],{"href":173082},".\u002Fch6","数据容器",[26,173085,173086],{},[30,173087,173089],{"href":173088},".\u002Fch7","函数进阶",[26,173091,173092],{},[30,173093,173095],{"href":173094},".\u002Fch8","文件操作",[26,173097,173098],{},[30,173099,173101],{"href":173100},".\u002Fch9","异常、模块与包",[26,173103,173104],{},[30,173105,173107],{"href":173106},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[26,173109,173110],{},[30,173111,173113],{"href":173112},".\u002Fch11","面向对象基础",[26,173115,173116],{},[30,173117,173119],{"href":173118},".\u002Fch12","综合案例与复习路线",[14,173121,173122],{"id":173122},"学习路线",[19,173124,173125],{},"第一阶段：能运行程序。",[19,173127,173128],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173130,173131],{},"第二阶段：能组织数据。",[19,173133,173134],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173136,173137],{},"第三阶段：能封装逻辑。",[19,173139,173140],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173142,173143],{},"第四阶段：能做小项目。",[19,173145,173146],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173148,173149],{"id":173149},"参考资料",[23,173151,173152,173159,173166,173173],{},[26,173153,173154,173155],{},"黑马程序员 Python 入门教程推荐：",[30,173156,173157],{"href":173157,"rel":173158},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[34],[26,173160,173161,173162],{},"Python 官方中文教程：",[30,173163,173164],{"href":173164,"rel":173165},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[34],[26,173167,173168,173169],{},"Python 标准库文档：",[30,173170,173171],{"href":173171,"rel":173172},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[34],[26,173174,173175,173176],{},"pyecharts 文档：",[30,173177,173178],{"href":173178,"rel":173179},"https:\u002F\u002Fpyecharts.org\u002F",[34],{"title":63,"searchDepth":92,"depth":92,"links":173181},[173182,173183,173184],{"id":117278,"depth":92,"text":117278},{"id":173122,"depth":92,"text":173122},{"id":173149,"depth":92,"text":173149},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23583},"\u002Fwiki\u002F2024-10-10-python",{"title":173021,"description":173185},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331444224]